разделить большую строку на строки рандомной длинны

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
задача: есть большой текст в одну строку, нужно разделить его на строки рандомной длинны..
тут на форуме нашел сниппет:
Код:
string input = project.Variables["text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 100; // Количество строк
for (int i = 0; i < count; i++)
{
    string pattern = @"^.{0,90}\s"; // где 90 - максимальная длина выходных строк (в символах)
    Match match = Regex.Match(input, pattern);
    if (match.Success)
    {
        list.Add(match.Value.Trim());
        input = input.Remove(0, match.Length);
    }
}
project.Variables["text"].Value = input;
но он делит текст на строки указанной длинны, а мне нужен рандом, к примеру {70,90}
пытаюсь сделать так:
Код:
string input = project.Variables["text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 100; // Количество строк
for (int i = 0; i < count; i++)
{
    int n = new Random().Next(70,90);
    string pattern = @"^.{0,n}\s"; // где n - максимальная длина выходных строк (в символах)
    Match match = Regex.Match(input, pattern);
    if (match.Success)
    {
        list.Add(match.Value.Trim());
        input = input.Remove(0, match.Length);
    }
}
project.Variables["text"].Value = input;
в итоге список list пустой..
что я делаю не так? .. сильно не пинайте, ибо я только начинаю с# осваивать.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
C#:
string input = project.Variables["text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 100; // Количество строк
for (int i = 0; i < count; i++)
{
    int n = new Random().Next(70,90);
    var text = input.Substring(0, n);
    Match match = Regex.Match(input, text.ToString());
    if (match.Success)
    {
        list.Add(match.Value.Trim());
        input = input.Remove(0, match.Length);
    }
}
project.Variables["text"].Value = input;
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
C#:
string input = project.Variables["text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 100; // Количество строк
for (int i = 0; i < count; i++)
{
    int n = new Random().Next(70,90);
    var text = input.Substring(0, n);
    Match match = Regex.Match(input, text.ToString());
    if (match.Success)
    {
        list.Add(match.Value.Trim());
        input = input.Remove(0, match.Length);
    }
}
project.Variables["text"].Value = input;
выдает ошибку: перед квантификатором {x,y} ничего нет
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
выдает ошибку: перед квантификатором {x,y} ничего нет
ну ты ведь видишь что тут нет таких значений {x,y}, кликни два раза по ошибке и посмотри в какой кубик кинет
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
ну ты ведь видишь что тут нет таких значений {x,y}, кликни два раза по ошибке и посмотри в какой кубик кинет
это у меня тестовый шаблон ... тут только кубик с текстом и кубик c#:
 

Вложения

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
ну ты ведь видишь что тут нет таких значений {x,y}, кликни два раза по ошибке и посмотри в какой кубик кинет
вставил в переменную text абзац обычного текста, работает сниппет, НО, разрывает слова, а мне нужно делить по пробелу
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
вставил в переменную text абзац обычного текста, работает сниппет, НО, разрывает слова, а мне нужно делить по пробелу
C#:
string input = project.Variables["text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 3; // Количество строк
for (int i = 0; i < count; i++)
{
    int n = new Random().Next(50,90);
    var str = Regex.Match(input, @"^.{0,"+n+"}.*?\\s").Value;
    if (str != "")
    {
        input = input.Remove(0, str.Length);
        list.Add(str.Trim());
    }
}
project.Variables["text"].Value = input;
 
  • Спасибо
Реакции: sentinel

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
C#:
string input = project.Variables["text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 3; // Количество строк
for (int i = 0; i < count; i++)
{
    int n = new Random().Next(50,90);
    var str = Regex.Match(input, @"^.{0,"+n+"}.*?\\s").Value;
    if (str != "")
    {
        input = input.Remove(0, str.Length);
        list.Add(str.Trim());
    }
}
project.Variables["text"].Value = input;
спасибо .. работает, НО в результат попадают строки приблизительно одной длинны, хотя разброс рандома ставлю от 10 до 100..
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
это так рандом срабатывает, что бы не повторялось одно и тоже число поставь там паузу, но тогда долго будет обрабатывать, я у себя в проектах вместо рандома всегда делаю спинтаксом он более рандомнее выбирает
 
  • Спасибо
Реакции: sentinel и rostonix

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
это так рандом срабатывает, что бы не повторялось одно и тоже число поставь там паузу, но тогда долго будет обрабатывать, я у себя в проектах вместо рандома всегда делаю спинтаксом он более рандомнее выбирает
простите пожалуйста за назойливость, но если можно, то чуть по подробней про паузу и про срабатывание рандома..
я (не кодер) думал, что при каждой итерации цикла, в переменную n будет попадать рандомное число от 10 до 100, и в зависимости от этой переменной регулярка будет отрезать кусок от большой строки(переменная text) и складывать в список ... я не прав??
 

rostonix

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

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
А как сделать из этого просто сортировщик по длине строки?
Есть файл с ключевиками или цитатами. Много строк. Надо рассортировать их по длине строки, от меньшей к большей или наоборот?
Очень часто такое нужно
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
А как сделать из этого просто сортировщик по длине строки?
Есть файл с ключевиками или цитатами. Много строк. Надо рассортировать их по длине строки, от меньшей к большей или наоборот?
Очень часто такое нужно
Проверяй
C#:
var list = project.Lists["Список1"]; //исходный список
var newlist = project.Lists["НовыйСписок"]; // список куда будем все складывать
newlist.AddRange(list.OrderBy(x => x.Length).ToList());
 
  • Спасибо
Реакции: sentinel и Valiksim

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
  • Спасибо
Реакции: Radzhab

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