18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
1 | |
Ограничить длину строк в тексте26.12.2020, 16:29. Показов 4551. Ответов 33
Метки нет (Все метки)
Имеется некий текст в которм строки совершенно разной длины (есть и пустые строки то есть просто перенос на новую строку vbCrLf ). Нужно чтобы ни одна строка в тексте не превышала заданную длину maxlen, но так, чтобы слова не разделялись, то есть если разделение символом vbCrLf придётся посреди слова, например "совершенно раз/ной длины", то строка должна разделиться по пробелу перед словом на которое пришлось разделение:"совершенно /разной длины" то есть "совершенно" останетсяна одной строке, а "разной длины" перенесётся на новую строку
0
|
26.12.2020, 16:29 | |
Ответы с готовыми решениями:
33
Определить среднюю длину строк в тексте и вывести строки с длиной меньше средней В тексте из N строк выровнять строки так, чтобы каждая строка имела длину 65 символов Ограничить длину текста в JLabel Как ограничить длину string? |
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 17:57 [ТС] | 3 |
maxlen=150
Текстовый файл прилагаю
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 19:07 [ТС] | 5 |
минимум любой то есть вплоть до пустой строки
Добавлено через 3 минуты нет неправильно говорю - о минимуме речи нет все остальные строки которые меньше maxlen остаются нетронутые, изменять (разбивать) надо только строки бОльшие maxlen
0
|
Модератор
|
||||||
26.12.2020, 19:15 | 6 | |||||
Сообщение было отмечено I can как решение
Решение
Вот, от нечего делать, написал. Это пропорциональное выравнивание пробелами по задаваемой ширине:
3
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 19:26 [ТС] | 8 |
Catstail - спасибо! Код интересный и наверняка пригодится но к сожалению это не то что мне нужно сейчас
Кстати у меня последнее слово "воз" не печатается
0
|
26.12.2020, 21:10 | 10 |
Смысл в ограничении максимума. Если вы установите максимум, равным нулю, то получится ерунда.
Т.е. речь о "защите от дурака". В программе для себя, не важно, а в программе для всех, защиту надо ставить на максимум, чтобы он был в разумных пределах. Допустим, от 10 до 159 или как-то ещё. В вышеприведённой программе, защиты нет. Максимальный размер буфера в функции Catstail, установлен 100, я увеличил до 200. Т.е. если максимальный размер строки будет больше 200, то программа "сломается".
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 21:37 [ТС] | 11 |
Catstail, Argus19 - как-то мне сложным показался ваш подxод я предполагал что-то такого типа:
строка - наш текст start = 1 при помощи substringLen=InStr(start, строка, vbCrLf) ищем следующий vbCrLf если substringLen < maxlen то тогда start = substringLen + 1 и опять ищем следующий vbCrLf если substringLen > maxlen то тогда ищем последний пробел в отрезке от start до start + maxlen (как?) и делаем Replace вместо пробела пробел+vbCrLf и start = start + maxlen и всё опять повторяется по какому условию заканчивать этот цикл не соображаю в общем что-то такого типа но пытаясь реализовать это я застрял и туплю до сиx пор Что скажете, други?
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 21:52 [ТС] | 13 |
некоторые ошибки есть в том алгоритме что я написал но надеюсь вы поняли мой ламерский бред
Добавлено через 5 минут Да нет же! Всё работает, спасибо БОЛЬШОЕ! но чисто от шизы - xочется покороче
0
|
26.12.2020, 22:05 | 14 |
Я сам начал с поиска точки и то же застрял.
Первая длинная строка в вашем тексте состоит из 400 с лишним символов и в неё входит несколько предложений, которые надо укоротить до нужной длины. Функция Split возвращает массив строк. Берём первую строку и, если она длиннее указанного размера, то надо её разбить. Функцией InstrRev найти пробел, по номеру его вхождения прикинуть длину строки и, если не устраивает, то искать опять с новой позиции. Выделить строку, соответствующую нужной длине и записать в переменную. В другую переменную записать остаток строки. Получить из массива следующую строку, в начало её вставить огрызок из переменной и повторить предыдущий геморрой и т.д. Как-то так.
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 22:16 [ТС] | 15 |
OK Всё понятно Ещё раз большое спасибо за помощь!
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
26.12.2020, 22:41 [ТС] | 17 |
ОК Спасибо!
Но я всё-таки пытаюсь закончить свой вариант
1
|
738 / 552 / 141
Регистрация: 27.01.2019
Сообщений: 1,243
|
||||||
27.12.2020, 01:25 | 19 | |||||
Argus19, Catstail, Отличная программа и нужная!Только у меня вопрос,почему при задании малой длины,тех же 20,в строке
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|||||||||||
27.12.2020, 07:19 [ТС] | 20 | ||||||||||
Тут мне такая мысль пришла в голову - если мы используем регулярку:
Может кто-нибудь возьмёт на себя труд реализовать этот подxод - я ведь дня 2-3 буду делать при моей ламерности Добавлено через 8 минут Забыл написать что и позиции всеx пробелов тоже узнаём
0
|
27.12.2020, 07:19 | |
27.12.2020, 07:19 | |
Помогаю со студенческими работами здесь
20
ограничить длину числа в Edit Control Не удается ограничить длину строки в TextBox Как ограничить длину вводимого текста? Ограничить длину строки в listBox и listView Как ограничить длину вводимой строки? Ограничить длину текста в анонсе записи WordPress Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |