Операции над списком по средствам C# сниппета

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Подскажите, пожалуйста, как можно организовать следующее по средствам C# сниппета:
Нужно взять определенное количество (задается во входных настройках) рандомных строк из списка "Список1" (строки разделены ENTERом) и положить их в переменную (или список "Список2") со своим разделителем.
Для примера:
в списке "1" находятся строки:

Текст1
Текст2
Текст3
Текст4

берем рандомно две строки и кладем их в переменную (или список "2"), разделяя, например, запятой
результат должен быть следующим:
Текст2, Текст3

Стандартными средствами ZP осуществить это возможно, но приходиться городить несколько экшенов. А т.к. в проекте данное действие встречается несколько раз, то проект становиться слишком громоздким.
 
  • Спасибо
Реакции: Шива

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
C#:
var list1 = project.Lists["Список1"];// Исходный список
Здесь рандомный элемент берем
....
var rezult = string.Join(",",list1);//
Пишу с телефона) очень неудобно.
 
  • Спасибо
Реакции: Dimionix и Roman*

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113
C#:
var list1 = project.Lists["Список1"];// Исходный список
Здесь рандомный элемент берем
....
var rezult = string.Join(",",list1);//
Пишу с телефона) очень неудобно.
Отличный сниппет, можно рандомные пути фоток выставлять через запятую и заливать)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Спасибо, но как-то не особо понял, что записывать в "Здесь рандомный элемент берем"?
 
  • Спасибо
Реакции: Roman*

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Отличный сниппет, можно рандомные пути фоток выставлять через запятую и заливать)
Вообще сниппет предполагалось использовать для текстовок, т.е. есть файл ключевиков, записанных построчно и эти строки нужно преобразовать в бредотекст определенного объема.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Ну так для бредотекста есть сети маркова
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Ну так для бредотекста есть сети маркова
Вообщем это не совсем бредотекст, а просто ключевики через запятую (иногда нужны и другие разделители). И вот из списка, в котором они лежат построчно, нужно брать 10, 20, 30... строк (количество задавать самостоятельно во входных настройках) и класть это всё в переменную в одну строку, разделяя, допустим, запятыми.
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113
Так чего в коде 2и 3 строку удалить типа или там что то должно быть..Как код выглядит рабочий то?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Так чего в коде 2и 3 строку удалить типа или там что то должно быть..Как код выглядит рабочий то?
Вот там как-то и нужно брать из списка определенное количество рандомных строк.
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Так чего в коде 2и 3 строку удалить типа или там что то должно быть..Как код выглядит рабочий то?
Код:
var list = project.Lists["Список1"];// Исходный список
            Random rand = new Random();
            StringBuilder strb = new StringBuilder();
                // j - количество строк, которое нужно взять.
            int j = 2;
            for (int i = 0; i < j; i++)
            {
                int r = rand.Next(list.Count);
                if (i + 1 == 2)
                {
                    strb.Append(list[r]);
                }
                else
                {
                    strb.Append(list[r] + ",");
                }

                list.RemoveAt(r);
            }
            return strb.ToString();
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
var list = project.Lists["Список1"];
list.Shuffle();
return string.Join(",", list.GetRange(0, COUNT).ToArray());
 

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 770
Благодарностей
1 182
Баллы
113

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 770
Благодарностей
1 182
Баллы
113
Ne tak ja dumal.

Paprobuj v zenno ;-)


Error in action "CS1061" "'ZennoLab.InterfacesLibrary.ProjectModel.IZennoList' does not contain a definition for 'GetRange' and no extension method 'GetRange' accepting a first argument of type 'ZennoLab.InterfacesLibrary.ProjectModel.IZennoList' could be found (are you missing a using directive or an assembly reference?)". [Row: 3; Column: 30]


Error in action "CS0103" "The name 'COUNT' does not exist in the current context". [Row: 3; Column: 42]
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Irbis, спасибо огромное! Очень выручили, то что нужно.
Только в девятой строке написал таким образом

if (i + 1 == j)

И еще, как переменной "j" присвоить значение из переменной проекта?
Так код работает

int j = {-Variable.j-};

но, мне кажется, это не особо правильно.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
  • Спасибо
Реакции: Sho

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Irbis, спасибо огромное! Очень выручили, то что нужно.
Только в девятой строке написал таким образом

if (i + 1 == j)

И еще, как переменной "j" присвоить значение из переменной проекта?
Код:
int j = project.Variables["Имя переменной"].Value;
А это что за метод?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
int j = project.Variables["Имя переменной"].Value;
Пробовал так писать, такая ошибка:
Компиляция кода Ошибка в действии "CS0029" "Неявное преобразование типа "string" в "int" невозможно". [Строка: 5; Cтолбец: 21]
 
Последнее редактирование:

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Код:
int j = int.Parse(project.Variables["Имя переменной"].Value);
 
  • Спасибо
Реакции: kul0n, greengou и Dimionix

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Может кому-нибудь пригодится, вот рабочий код
Код:
var list = project.Lists["Список"]; // Исходный список
            Random rand = new Random();
            StringBuilder strb = new StringBuilder();
                // j - количество строк, которое нужно взять.
            int j = int.Parse(project.Variables["Имя переменной"].Value);
            for (int i = 0; i < j; i++)
            {
                int r = rand.Next(list.Count);
                if (i + 1 == j)
                {
                    strb.Append(list[r]);
                }
                else
                {
                    strb.Append(list[r] + ","); // Разделитель
                }
                list.RemoveAt(r);
            }
            return strb.ToString();
Спасибо, Irbis, за помощь!
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
var list = project.Lists["Список 1"].ToList();
list.Shuffle();
return string.Join(",", list.Take(10).ToArray());
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113

xuligan

Client
Регистрация
07.03.2011
Сообщения
156
Благодарностей
42
Баллы
28
народ подправите кто может, надо взять из файла 4-5 рандомных строк, и положить их в переменную или список все с новой строки.
var list = project.Lists["Test.txt"]; // Исходный список
Random random = new Random();


string result = string.Empty;
string[] parts = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < 5; i++)
{
result += parts[random.Next(0, parts.Length)] + Environment.NewLine;
}
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113

xuligan

Client
Регистрация
07.03.2011
Сообщения
156
Благодарностей
42
Баллы
28
Последнее редактирование:

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Я писал название другого экшена
"Выделить подсписок"
И подсписок выделяется в другой список, а не файл.
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
народ подправите кто может, надо взять из файла 4-5 рандомных строк, и положить их в переменную или список все с новой строки.
var list = project.Lists["Test.txt"]; // Исходный список
Random random = new Random();


string result = string.Empty;
string[] parts = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < 5; i++)
{
result += parts[random.Next(0, parts.Length)] + Environment.NewLine;
}




Код:
var list = project.Lists["Строки"]; // Исходный список
            Random rand = new Random();
            StringBuilder strb = new StringBuilder();
                // j - количество строк, которое нужно взять.
            int j = int.Parse(project.Variables["ssasdfaf"].Value);
            for (int i = 0; i < j; i++)
            {
                int r = rand.Next(list.Count);
                if (i + 1 == j)
                {
                    strb.Append(list[r]);
                }
                else
                {
                    strb.Append(list[r] + "\r\n"); // Разделитель
                }
                list.RemoveAt(r);
            }
            return strb.ToString();
Тут уже стоит разделитель - \r\n (вместо запятой, как писали выше).
 

xuligan

Client
Регистрация
07.03.2011
Сообщения
156
Благодарностей
42
Баллы
28
Я писал название другого экшена
"Выделить подсписок"
И подсписок выделяется в другой список, а не файл.
Всё равно не понимаю что тут куда, если можно пример покажите. Мне надо 4 строчки в переменной





Код:
var list = project.Lists["Строки"]; // Исходный список
            Random rand = new Random();
            StringBuilder strb = new StringBuilder();
                // j - количество строк, которое нужно взять.
            int j = int.Parse(project.Variables["ssasdfaf"].Value);
            for (int i = 0; i < j; i++)
            {
                int r = rand.Next(list.Count);
                if (i + 1 == j)
                {
                    strb.Append(list[r]);
                }
                else
                {
                    strb.Append(list[r] + "\r\n"); // Разделитель
                }
                list.RemoveAt(r);
            }
            return strb.ToString();
Тут уже стоит разделитель - \r\n (вместо запятой, как писали выше).
такая-же история, не пойму где прописать имя файла.

Вы уж сильно не пинайте, просто разобраться охота.
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93

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