c# - Как сделать в спискe через каждые 10 строк 1 пустую строку?

Lextor

Client
Регистрация
19.06.2020
Сообщения
172
Благодарностей
19
Баллы
18
Как сделать в спискe через каждые 10 строк 1 пустую строку?

Детальное описание:
В список "Result" вставляем строки из переменной. В переменной лижет всегда только 1 строка. Строка в переменной обновляется после того как вставили строку в список "Result". Затем вставляем строку из переменной снова в список "Result". Итд, покамись строки для переменной из другого списка не закончатся.

Нужно в списке "Result" сделать так чтобы через каждые 10 строк была одна пустая строка. Как сделать?
 
Последнее редактирование:

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43
Даже интересно что имеется ввиду
 

Lextor

Client
Регистрация
19.06.2020
Сообщения
172
Благодарностей
19
Баллы
18

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113

Вложения

  • Спасибо
Реакции: Lextor

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Я бы решил примерно так:

77356

C#:
List<string> temp_list = new List<string>(); // создал временный список
IZennoList list1 = project.Lists["list1"]; // получил список Зенно

for(int i=0;i<100;i++) {
    list1.Add(i.ToString()); // наполнил список Зенно строчками
}
lock(SyncObjects.ListSyncer){ // заблокировал работу со списком
    for(int i=0; i<list1.Count; i++) {
        if(i%10 == 0) temp_list.Add(string.Empty); // Если остаток от деления на 10 больше 0 - добавляем пустую строчку во временный список
        temp_list.Add(list1[i]); // добавляю существующую строчку во временный список
    }
   
    if(temp_list.Count > 0) { // если во временном списке есть строчки
        list1.Clear(); // очищаю Зенносписок
        list1.AddRange(temp_list); // добавляю в него элементы временного списка
        temp_list.Clear(); // очищаю временный список
    }
}

foreach(string s in list1) { // перебираю Зенносписок чтобы убедиться что задача решена
    if(string.IsNullOrEmpty(s)) project.SendWarningToLog(s,true);
    else project.SendInfoToLog(s,true);
}
Но, если вдруг список подать повторно - то пустые строчки добавляться ещё раз.
Возможно, чтобы такого не произошло, прежде чем использовать код нужно удалить все пустые строки, а уже потом размечать список используя данный код.
 
  • Спасибо
Реакции: Маломальский
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
Я бы решил примерно так:

Посмотреть вложение 77356
C#:
List<string> temp_list = new List<string>(); // создал временный список
IZennoList list1 = project.Lists["list1"]; // получил список Зенно

for(int i=0;i<100;i++) {
    list1.Add(i.ToString()); // наполнил список Зенно строчками
}
lock(SyncObjects.ListSyncer){ // заблокировал работу со списком
    for(int i=0; i<list1.Count; i++) {
        if(i%10 == 0) temp_list.Add(string.Empty); // Если остаток от деления на 10 больше 0 - добавляем пустую строчку во временный список
        temp_list.Add(list1[i]); // добавляю существующую строчку во временный список
    }

    if(temp_list.Count > 0) { // если во временном списке есть строчки
        list1.Clear(); // очищаю Зенносписок
        list1.AddRange(temp_list); // добавляю в него элементы временного списка
        temp_list.Clear(); // очищаю временный список
    }
}

foreach(string s in list1) { // перебираю Зенносписок чтобы убедиться что задача решена
    if(string.IsNullOrEmpty(s)) project.SendWarningToLog(s,true);
    else project.SendInfoToLog(s,true);
}
Но, если вдруг список подать повторно - то пустые строчки добавляться ещё раз.
Возможно, чтобы такого не произошло, прежде чем использовать код нужно удалить все пустые строки, а уже потом размечать список используя данный код.

Как еще вариант
C#:
project.Lists["inputList"].AddRange(Enumerable.Range(0, 100).Select(x => x.ToString()));

List<string> temp = new List<string>();
int count = project.Lists["inputList"].Count;

for (int i=0; i <= count; i++) {
    temp.AddRange(project.Lists["inputList"].GetItems("0-9", true));
    temp.Add(string.Empty);
    count-=10;
    i--;
}

return string.Join(";", temp);
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
ну или так

C#:
project.Lists["inputList"].AddRange(Enumerable.Range(0, 100).Select(x => x.ToString()));

List<string> temp = new List<string>();
temp.AddRange(project.Lists["inputList"].Select((x, i) => {
    if (i % 10 == 0)
        return x + Environment.NewLine;
    return x;
}));

File.WriteAllLines(Path.Combine(project.Directory, "input.txt"), temp);
 

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