как порезать текст

mrak7575

Client
Регистрация
17.04.2018
Сообщения
111
Благодарностей
33
Баллы
28
всем привет
в общем имеется текст , мне нужно нарезать его на отрезки (41 символ )
режу через обработка текста => подстрока далее указываю 0-41 , потом другая 42-83 и т.п.
шаблон режет всё гуд !
\НО нужно чтоб он не резал слова ,
т.е. отрезок 41 символ , если строка не подходит то обрезает на длину не выше 41 ! но слово переносит на другую строку
и получается длина первой строки меньше 41

вот пример :

это вся строка полностью

Если у тебя получилось обмануть человека, это не значит,что он дурак, это значит, что тебе доверяли больше,чем ты этого заслуживаешь.

получается 136 символов (включая знаки препинания)

Если у тебя получилось обмануть человека, ( 41 символ)
это не значит,что он дурак, это значит, (39 символов)
что тебе доверяли больше,чем ты этого (37 символов)
заслуживаешь. (13 символов)

получается режется текст не выше 41 символа + не режет слова
как это можно реализовать ?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113
наверно только на c#
сделать сплит по пробелам
в цикле пробежаться по получившимся строкам
вычислить длину прибавляемого слова
если меньше сумма с общей строкой добавить в общую и идти дальше по циклу,
если больше, результат скинуть в список и общую строку начать формировать заного
после цикла результат из общей строки закинуть в список.
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
C#:
int start = 0;
int range = 41;
string str = "Если у тебя получилось обмануть человека, это не значит, что он дурак, это значит, что тебе доверяли больше, чем ты этого заслуживаешь.";
char[] chars = str.ToCharArray();

while(start < chars.Length)
{
    var newArray = chars.Skip(start).Take(range).ToArray();
    project.Lists["List"].Add(string.Join("", newArray));
//    project.SendInfoToLog(string.Join("", newArray));
    start += range;
}
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113
C#:
int start = 0;
int range = 41;
string str = "Если у тебя получилось обмануть человека, это не значит, что он дурак, это значит, что тебе доверяли больше, чем ты этого заслуживаешь.";
char[] chars = str.ToCharArray();

while(start < chars.Length)
{
    var newArray = chars.Skip(start).Take(range).ToArray();
    project.Lists["List"].Add(string.Join("", newArray));
//    project.SendInfoToLog(string.Join("", newArray));
    start += range;
}
47741


ай, ай :-)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 627
Благодарностей
8 768
Баллы
113
всем привет
в общем имеется текст , мне нужно нарезать его на отрезки (41 символ )
режу через обработка текста => подстрока далее указываю 0-41 , потом другая 42-83 и т.п.
шаблон режет всё гуд !
\НО нужно чтоб он не резал слова ,
т.е. отрезок 41 символ , если строка не подходит то обрезает на длину не выше 41 ! но слово переносит на другую строку
и получается длина первой строки меньше 41

вот пример :

это вся строка полностью

Если у тебя получилось обмануть человека, это не значит,что он дурак, это значит, что тебе доверяли больше,чем ты этого заслуживаешь.

получается 136 символов (включая знаки препинания)

Если у тебя получилось обмануть человека, ( 41 символ)
это не значит,что он дурак, это значит, (39 символов)
что тебе доверяли больше,чем ты этого (37 символов)
заслуживаешь. (13 символов)

получается режется текст не выше 41 символа + не режет слова
как это можно реализовать ?
Можно регуляркой порезать в список.

Регулярка:
[\w\W]{1,41}(?=\ )
47742
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

mrak7575

Client
Регистрация
17.04.2018
Сообщения
111
Благодарностей
33
Баллы
28
C#:
int start = 0;
int range = 41;
string str = "Если у тебя получилось обмануть человека, это не значит, что он дурак, это значит, что тебе доверяли больше, чем ты этого заслуживаешь.";
char[] chars = str.ToCharArray();

while(start < chars.Length)
{
    var newArray = chars.Skip(start).Take(range).ToArray();
    project.Lists["List"].Add(string.Join("", newArray));
//    project.SendInfoToLog(string.Join("", newArray));
    start += range;
}
код пишу в кубик C#

но выдаёт ошибку , в логе это

Выполнение действия CSharp OwnCode Последовательность не содержит соответствующий элемент
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 698
Баллы
113
держи код
C#:
int start = 0;
int range = 41;
string str = "Если у тебя получилось обмануть человека, это не значит, что он дурак, это значит, что тебе доверяли больше, чем ты этого заслуживаешь.";
string[] d1 = str.Split();
string res = "";
for (int i=0; i<d1.Length; i++){
    string res_p = res + " " + d1[i];
    res_p=res_p.Trim();
    if ( res_p.Length <= range ) res = res_p;
    else {
        project.Lists["List"].Add(res);
        res = d1[i];
    }
}
project.Lists["List"].Add(res);
не забудь в проекте добавить список и назови его List
47760
 

mrak7575

Client
Регистрация
17.04.2018
Сообщения
111
Благодарностей
33
Баллы
28
держи код
C#:
int start = 0;
int range = 41;
string str = "Если у тебя получилось обмануть человека, это не значит, что он дурак, это значит, что тебе доверяли больше, чем ты этого заслуживаешь.";
string[] d1 = str.Split();
string res = "";
for (int i=0; i<d1.Length; i++){
    string res_p = res + " " + d1[i];
    res_p=res_p.Trim();
    if ( res_p.Length <= range ) res = res_p;
    else {
        project.Lists["List"].Add(res);
        res = d1[i];
    }
}
project.Lists["List"].Add(res);
не забудь в проекте добавить список и назови его List
Посмотреть вложение 47760
бро ты лучший )) реально спасибо
 

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