adr1enette

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

Вложения

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 501
Благодарностей
10 047
Баллы
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
Сообщения
22 501
Благодарностей
10 047
Баллы
113
Можно ли после получения количества строк просто удалить те, которые делятся на 3 (удалятся строки будут лишь до полученного числа всех строк)? Например, начиная с 0: 0, 3, 6, 9, 12... Возможно ли это сделать через регулярное выражение или хоть как-то?
Возможно, работа через диапазоны значений тут сможет помочь:
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 431
Баллы
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)