Разбивка текста на абзацы

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
Всем привет, есть текст который идёт сплошняком.
В настройках хочу прописать после какой точки сделать абзац, к примеру абзац после 5 точки. Текст всегда разный как это реализовать? Подскажите снипет. Заранее спасибо!
 

Sergei K

Client
Регистрация
30.05.2016
Сообщения
6
Благодарностей
6
Баллы
3
// Исходная строка текста
Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.

// Результат
Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле.

Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.
 
Последнее редактирование:

Sergei K

Client
Регистрация
30.05.2016
Сообщения
6
Благодарностей
6
Баллы
3
Код:
string paragraph = "";
// Исходная строка текста
string text = "Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.";
// Преобразуем строку в массив с разделением по точка + пробел
string[] array = text.Split(new[] { ". " }, StringSplitOptions.RemoveEmptyEntries);
// Проходим получившийся массив в цикле
for (int i = 0; i < array.Length; i++) { 
 
    // Если последняя строка, то прервываем цикл
    if (i >= array.Length-1) {
        paragraph += array[i];
        break;
    } else
        paragraph += array[i] + ".";     
 
    // Если 5 элемент массива, то добавляем два переноса строки (т.е. новый абзац)
    if ((i+1)%5 == 0)
        paragraph += Environment.NewLine + Environment.NewLine;
    else
        paragraph += " ";
}
// Возвращаем отформатированный по абзацам текст
return paragraph;
 
Последнее редактирование:
  • Спасибо
Реакции: Old, gevolushn и guloc

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
Код:
string paragraph = "";
// Исходная строка текста
string text = "Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.";
// Преобразуем строку в массив с разделением по точка + пробел
string[] array = text.Split(new[] { ". " }, StringSplitOptions.RemoveEmptyEntries);
// Проходим получившийся массив в цикле
for (int i = 0; i < array.Length; i++) {

    // Если последняя строка, то прервываем цикл
    if (i >= array.Length-1) {
        paragraph += array[i];
        break;
    } else
        paragraph += array[i] + ".";    

    // Если 5 элемент массива, то добавляем два переноса строки (т.е. новый абзац)
    if ((i+1)%5 == 0)
        paragraph += Environment.NewLine + Environment.NewLine;
    else
        paragraph += " ";
}
// Возвращаем отформатированный по абзацам текст
return paragraph;
Не работает заменил текст на переменную пишет ошибка в строке 2 столбец 35 и 40 именно где и переменная с текстом, что не правильно делаю?
 

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
Код:
string paragraph = "";
// Исходная строка текста
string text = "Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.";
// Преобразуем строку в массив с разделением по точка + пробел
string[] array = text.Split(new[] { ". " }, StringSplitOptions.RemoveEmptyEntries);
// Проходим получившийся массив в цикле
for (int i = 0; i < array.Length; i++) {

    // Если последняя строка, то прервываем цикл
    if (i >= array.Length-1) {
        paragraph += array[i];
        break;
    } else
        paragraph += array[i] + ".";    

    // Если 5 элемент массива, то добавляем два переноса строки (т.е. новый абзац)
    if ((i+1)%5 == 0)
        paragraph += Environment.NewLine + Environment.NewLine;
    else
        paragraph += " ";
}
// Возвращаем отформатированный по абзацам текст
return paragraph;
А подскажи как в настройках указать через какое количество точек делать абзац если я заменяю код :
Код:
 if ((i+1)%5 == 0)
На
Код:
if ((i+1)%project.Variables["tochka"].Value == 0)
То код не работает как сделать чтоб можно из настроек регулировать количество точек?
 

Sergei K

Client
Регистрация
30.05.2016
Сообщения
6
Благодарностей
6
Баллы
3
А подскажи как в настройках указать через какое количество точек делать абзац если я заменяю код :
Код:
 if ((i+1)%5 == 0)
На
Код:
if ((i+1)%project.Variables["tochka"].Value == 0)
То код не работает как сделать чтоб можно из настроек регулировать количество точек?
Значение переменной нужно привести к int
Код:
if ((i+1) % int.Parse(project.Variables["tochka"].Value) == 0)
 
  • Спасибо
Реакции: guloc

Old

Client
Регистрация
24.01.2018
Сообщения
176
Благодарностей
87
Баллы
28
Код:
string paragraph = "";
// Исходная строка текста
string text = "Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.";
// Преобразуем строку в массив с разделением по точка + пробел
string[] array = text.Split(new[] { ". " }, StringSplitOptions.RemoveEmptyEntries);
// Проходим получившийся массив в цикле
for (int i = 0; i < array.Length; i++) {

    // Если последняя строка, то прервываем цикл
    if (i >= array.Length-1) {
        paragraph += array[i];
        break;
    } else
        paragraph += array[i] + ".";    

    // Если 5 элемент массива, то добавляем два переноса строки (т.е. новый абзац)
    if ((i+1)%5 == 0)
        paragraph += Environment.NewLine + Environment.NewLine;
    else
        paragraph += " ";
}
// Возвращаем отформатированный по абзацам текст
return paragraph;
Этот сниппет делит текст на абзацы с одинаковым количеством предложений в каждом абзаце. Как сделать, чтобы количество предложений в абзацах было рандомным? Например, от двух до четырех предложений в каждом.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Этот сниппет делит текст на абзацы с одинаковым количеством предложений в каждом абзаце. Как сделать, чтобы количество предложений в абзацах было рандомным? Например, от двух до четырех предложений в каждом.
вот вместо этой 5 -ки, надо проставить рандом от 2-х, до 5-ти.
72811
 
  • Спасибо
Реакции: NICOLAS Christophe и Old

Old

Client
Регистрация
24.01.2018
Сообщения
176
Благодарностей
87
Баллы
28

dmitlife

Client
Регистрация
25.04.2019
Сообщения
43
Благодарностей
26
Баллы
18
Это я понимаю. Не понимаю как реализовать, не работаю с C#.
C#:
string paragraph = "";
// Исходная строка текста
string text = "Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.";
// Преобразуем строку в массив с разделением по точка + пробел
string[] array = text.Split(new[] { ". " }, StringSplitOptions.RemoveEmptyEntries);
// Проходим получившийся массив в цикле
for (int i = 0; i < array.Length; i++) {
 
    // Если последняя строка, то прервываем цикл
    if (i >= array.Length-1) {
        paragraph += array[i];
        break;
    } else
        paragraph += array[i] + ".";     
     Random r = new Random();
    int randomNumber = r.Next(2, 5);
    // Если 5 элемент массива, то добавляем два переноса строки (т.е. новый абзац)
    if ((i+1) % randomNumber == 0)
        paragraph += Environment.NewLine + Environment.NewLine;
    else
        paragraph += " ";
}
// Возвращаем отформатированный по абзацам текст
return paragraph;
 
  • Спасибо
Реакции: NICOLAS Christophe и Old

Old

Client
Регистрация
24.01.2018
Сообщения
176
Благодарностей
87
Баллы
28
C#:
string paragraph = "";
// Исходная строка текста
string text = "Вдруг раздвинулось пространство. Отметая постоянство, Изменений целый ворох – Перемены все так скоры. После долгой зимней спячки Взбудоражен мир весной. Реку больше лед не прячет, Все журчит, снега - долой. Ветры теплые звенели, Мир был новым для меня В первом том моем апреле. Стала частью мира я. Я разглядывала небо, Облака и тополя. Стала явью эта небыль. Мир разглядывал меня.";
// Преобразуем строку в массив с разделением по точка + пробел
string[] array = text.Split(new[] { ". " }, StringSplitOptions.RemoveEmptyEntries);
// Проходим получившийся массив в цикле
for (int i = 0; i < array.Length; i++) {

    // Если последняя строка, то прервываем цикл
    if (i >= array.Length-1) {
        paragraph += array[i];
        break;
    } else
        paragraph += array[i] + ".";    
     Random r = new Random();
    int randomNumber = r.Next(2, 5);
    // Если 5 элемент массива, то добавляем два переноса строки (т.е. новый абзац)
    if ((i+1) % randomNumber == 0)
        paragraph += Environment.NewLine + Environment.NewLine;
    else
        paragraph += " ";
}
// Возвращаем отформатированный по абзацам текст
return paragraph;
В одном тексте все абзацы получаются с одинаковым количеством предложений. Рандом получается между текстами, а не между абзацами одного текста. То есть в одном тексте все абзацы имеют по два предложения, при следующей генерации все абзацы в тексте состоят из четырех предложений.
Возможно разбивать на рандомное количество предложений в одном тексте?
 

Old

Client
Регистрация
24.01.2018
Сообщения
176
Благодарностей
87
Баллы
28
В общем так и не нашел необходимый сниппет, поэтому пришлось сделать при помощи кубиков.
 
Последнее редактирование:
Регистрация
10.07.2017
Сообщения
29
Благодарностей
1
Баллы
3
Спасибо. Очень полезно.
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
Возможно разбивать на рандомное количество предложений в одном тексте?
C#:
int min = 2;//int.Parse(project.Variables["var1"].Value);//минимум предложений в абзаце
int max = 7;//int.Parse(project.Variables["var2"].Value);//максимум предложений в абзаце
string text = project.Variables["text"].Value;
string split = ". ";
List<string> list = text.Split(new[]{split}, StringSplitOptions.RemoveEmptyEntries).ToList();
List<string> result = new List<string>();
while(list.Count > 0){
    List<string> temp = new List<string>();
    int random = new Random((int)DateTime.Now.Ticks).Next(min, max+1);
    if(list.Count <= max && list.Count >= min)
        random = list.Count;
    for(int i = 0; i < random && i < list.Count; i++){
        temp.Add(list[i]);
        list.RemoveAt(0);
    }
    result.Add(string.Format(@"{0}.", string.Join(split, temp)));
}
return string.Join(string.Format(@"{0}{0}", Environment.NewLine), result);
Чтобы заставить работать его в предыдущем сниппете, нужно функцию рандом привязать к чему-то динамическому, например, к времени, или вытащить за пределы цикла из-за особенности стандартного рандома.
 
  • Спасибо
Реакции: NICOLAS Christophe и Old
Регистрация
10.07.2017
Сообщения
29
Благодарностей
1
Баллы
3
Отлично. Большое спасибо.
 

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