Обработка текста - разбить на части

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18
Помогите пожалуйста, уже все перепробовал, нужно решить такую задачу:
есть текст в одну строку допустим больше 5000 символов, нужно его разбить на части

что должно получиться:
-строки текста должны иметь не более указанной длинны символов допустим 200 (то-есть сделать перенос, но не разрывая слов)
-после указанного количества строк допустим 10 файл нужно разделить (то-есть сохранить текст в переменную или в файл)
 
Последнее редактирование:
  • Спасибо
Реакции: TRUMP

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18
пример:
есть такой текст:
текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст

Нужно:
текст текст текст текст
текст текст текст текст
текст текст текст текст
______сохранить_____

текст текст текст текст
текст текст текст текст
текст текст текст текст
______сохранить_____
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
(.{200}|.+$)[\w]* - это, если нужен последний кусок текста, который может быть значительно меньше 200символов
.{200}[\w]* - это, если не нужен.
По одной из этих регулярок сохраняешь все совпадения в список. Прогоняешь список, сохраняя каждую строку в файл. Если я всё верно понял
 

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18
регуляркой походу тут не обойтись, нужно чтоб слова не разрывал, и строки считал
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
В общем, создаете список List.
В переменную Text кладете свою строку (берете экшеном из списка или как у вас там).
Далее экшен C#:
C#:
string input = project.Variables["Text"].Value; // Исходный текст
var list = project.Lists["List"]; // Список выходных строк
list.Clear(); // Очищаем список
int count = 10; // Количество строк
for (int i = 0; i < count; i++)
{
    string pattern = @"^.{0,200}\s"; // где 200 - максимальная длина выходных строк (в символах)
    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;
В список сохраняются данные:
текст текст текст текст
текст текст текст текст
текст текст текст текст
а из исходной строки это всё удаляется.
Работаете с этим списком (копируете из него в другой список, берете строки в переменную и т.п.).
Далее возвращаетесь к экшену C# и т.д.

Как-то так! Вроде работает.
P.S. Не стал добавлять проверку на то, если оставшаяся входная строка короткая => какие-то действия, т.к. хз что вам нужно делать в этом случае.
P.S.S В коде регулярка ^.{0,200}\s берет мах 200 символов, до ближайшего пробела. Можно поменять на другой разделитель (http://zennolab.com/discussion/threads/reguljarnoe-vyrazhenie-dopustimoe-kolichestvo-simvolov-teksta.24236/)
 

Вложения

Последнее редактирование:

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18
Dimionix спасибо тебе огромное, все работает, только один маленький нюанс - последнее слово не берет из исходного текста
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
Dimionix спасибо тебе огромное, все работает, только один маленький нюанс - последнее слово не берет из исходного текста
P.S. Не стал добавлять проверку на то, если оставшаяся входная строка короткая => какие-то действия, т.к. хз что вам нужно делать в этом случае.
Чтоб не парится, просто добавьте в конец исходной строки пробел.
Можно еще добавить проверку, если исходная строка уже пустая, то выход по красной стрелке: в коде заменить первую строку
Код:
string input = project.Variables["Text"].Value; // Исходный текст
на
Код:
string input = project.Variables["Text"].Value; // Исходный текст
if (input == String.Empty)
{
    throw new Exception("Нечего больше разбивать))");
}
 
  • Спасибо
Реакции: Mike

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18

Dimionix

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

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18

Artem33

Новичок
Регистрация
24.04.2021
Сообщения
1
Благодарностей
0
Баллы
1
Можно на скриншотах показать?
 

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