adr1enette

Client
Регистрация
30.11.2022
Сообщения
55
Благодарностей
14
Баллы
8
Хочу создать regex условие для работы со списком - нужно регулярное выражение с условием брать каждую третью строку, начиная со второй, перемещая эти строки из списка в подсписок. Знаю что можно делать подобное с четными-нечетными строками, но как ставить условие по типу такого, что привел выше? Заранее спасибо!
 

Вложения

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 340
Благодарностей
9 088
Баллы
113
Хочу создать regex условие для работы со списком - нужно регулярное выражение с условием брать каждую третью строку, начиная со второй, перемещая эти строки из списка в подсписок. Знаю что можно делать подобное с четными-нечетными строками, но как ставить условие по типу такого, что привел выше? Заранее спасибо!
Можно по счетчику в цикле.
То есть по сути по четным и нечетным номерам строк.
 

Zellweger

Client
Регистрация
14.12.2022
Сообщения
20
Благодарностей
4
Баллы
3
Я вижу два варианта решения:
1. Если строки, которые нужно выделить в подсписок, имеют общую закономерность, которую можно выделить regex'ом - то можно написать регулярное выражение и таким образом брать их из списка, при этом, пренебрегая их порядковым номером в списке.
2. Переменная {-Number_String-}=>установить значение 2=>взять строку под номером {-Number_String-}=>увеличить счетчик переменной {-Number_String-} на 3=>зациклить на "взять строку под номером {-Number_String-}".
 

adr1enette

Client
Регистрация
30.11.2022
Сообщения
55
Благодарностей
14
Баллы
8
Можно ли после получения количества строк просто удалить те, которые делятся на 3 (удалятся строки будут лишь до полученного числа всех строк)? Например, начиная с 0: 0, 3, 6, 9, 12... Возможно ли это сделать через регулярное выражение или хоть как-то?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 340
Благодарностей
9 088
Баллы
113
Можно ли после получения количества строк просто удалить те, которые делятся на 3 (удалятся строки будут лишь до полученного числа всех строк)? Например, начиная с 0: 0, 3, 6, 9, 12... Возможно ли это сделать через регулярное выражение или хоть как-то?
Возможно, работа через диапазоны значений тут сможет помочь:
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
var spisok = project.Lists["spisok"];
var podspisok = project.Lists["podspisok"];
var start = 1;//с какой строки начинать отсчет. чтобы пропустить первое совпадение, указать start + eachNumber, то есть 4, в данном случае
var eachNumber = 3;//брать каждую третью строку

var copy = spisok.GetItems("all", true).ToList();//очищаю исходный список

copy.ForEach(x => {
    if(copy.Skip(start).ToList().IndexOf(x) % eachNumber == 0) podspisok.Add(x);//если подходит, пишу в подсписок
    else spisok.Add(x);//иначе возвращаю в исходный список
});
Первый - это исходный список. Второй и третий: исходный список в результате и получившийся подсписок
1673253892050.png 1673253997186.png 1673254034718.png
 
  • Спасибо
Реакции: Zellweger и adr1enette

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)