С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109

Разделить одну строку на несколько

28.01.2015, 12:54. Показов 2280. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите пожалуйста с такой задачкой: необходимо разбить одну длинную строку на несколько небольших, по такому принципу - Если строка из 280 символов, то оставляем как есть, если больше то начинаем делить. При делении, сначала первые 250 символов стразу оставляем и после 250 начинаем искать Точку или !, после того как нашли, выполняем некоторое действие (например записываем в Мемо), дальше, если остаток меньше 280, записать в Мемо как 2-ю строку, если больше, то по такому же принципу, 250 сразу, и до первой точки или ! ... и т.д.

Суть в том, чтобы каждая строка была не больше 280 символов.

Добавлено через 3 часа 29 минут
еще один момент, если в случае, когда в промежутке от 250 до 280 не встречается точка ! или ? , тогда до первого пробела
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2015, 12:54
Ответы с готовыми решениями:

Несколько предложений, расположенных в строку, разделить при помощи определителя конца строки
Всем Здравия! Помогите пожалуйста решить задачку, а то ничего понять не могу с этими строками. Как ни как 1 курс)) Надо...

Разделить одну строку на несколько
Всем привет подскажите как разделить и вписать в базу одну строку такого типа (Автошина 155/70 R13 75Q Белшина БИ- 395) на несколько...

Разделить одну строку на несколько частей одним махом
есть строка: //"Stossdämpfer Federbein hinten links Ford MondeoEUR 54,00Versand:KostenlosRestzeit:21T0Std59Min"; 1-разделение...

6
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
28.01.2015, 14:06
Да у тебя код то простой, только условий много описывать, я тебе код накидал с "коленки"- ты его некопируй конечно это просто псевдокод, просто пример.

Цитата Сообщение от DenProx Посмотреть сообщение
Если строка из 280 символов, то оставляем как есть
Delphi
1
2
If Length(stroka) = 280 then
Exit; //выход из кода
Цитата Сообщение от DenProx Посмотреть сообщение
если больше то начинаем делить.
Delphi
1
If Length(stroka) = 280 then
Цитата Сообщение от DenProx Посмотреть сообщение
При делении, сначала первые 250 символов стразу оставляем
Delphi
1
2
3
4
5
6
7
Copy(stroka, 250, Length(stroka))
if (Pos('.', ctroka) <> 0) and (Pos('!', ctroka) <> 0) then
//найдены символы, сделать это условие
else
//ненайдены символы, сделать это условие 
 
{ и далее бескончное число нужных условий }
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
28.01.2015, 14:40  [ТС]
NIKOLAYY, а что если строка будет из 290 символов ?
тогда Copy(stroka, 250, Length(stroka)) не сможет у остатка скопировать 250 символов.

Должно быть условие сначала на проверку оставшихся символов. Т.е. после того, как первую строку мы определили, нужно узнать сколько еще символов осталось. А как это сделать, я пока не знаю ...
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
28.01.2015, 15:03
Цитата Сообщение от DenProx Посмотреть сообщение
Должно быть условие сначала на проверку оставшихся символов.
Берем функцию определения для длины строки, определяем длину, затем отнимаем от нее число 250 и смотрим остаток если остаток положительный, то есть > 0 (больше нуля) то делаем со строкой что-то.
Если остаток отрицательный условие else то переходим к следующей строке или что там у тебя по плану задумано.
0
Заблокирован
29.01.2015, 00:32
Самый простой способ это перебор.
Строка это массив.
инициализируем счётчик длины строки.
И понадобятся ещё переменные
одна для позиции последнего знака препинания другая для для позиции последнего пробела.
третья позиция начала строки четвёртая, четвёртая - позиция конца строки.
сначала все переменные и счётчик сбрасываем в ноль
и пошли перебирать символы попутно их считая.
встретился знак препинания заносим его позицию в переменную встретился пробел, заносим его позицию в свою переменную. При этом счётчик символов сравнивается с длинной строки.
если произошло превышение, смотрим где у нас последний знак препинания или пробел. Это уже по условию алгоритма. То есть надо найти место разрыва строки.
Ну а после этого...
Проще сделать набор в дополнительную, так называемую сборочную строку.
у нас есть позиция начала строки и позиция конца строки.
По этим данным переносим все символы с сборочную строку. В конце ставим два символа конца строки (DA) и запоминаем позицию конца сформированных строк. Для этого нужна своя переменная.
Ну вот, одна строка внесена. позиция место где окончилась строка в анализируемой строке присваивается переменной начала строки. И с этой же позиции анализ продолжается. всё повторяется.
Находится новое место разрыва. Новая строка заносится в сборочную строку. ставится признак конца строки. Переменные получают новые значения и всё повторяется до тех пор пока строка не закончится.
Ну а потом сборочную строку можно переправить куда нужно, например в memo. И тогда весь текст автоматически разобьётся на строки.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
29.01.2015, 02:09
Цитата Сообщение от DenProx Посмотреть сообщение
Доброго времени суток. Помогите пожалуйста с такой задачкой: необходимо разбить одну длинную строку на несколько небольших, по такому принципу - Если строка из 280 символов, то оставляем как есть, если больше то начинаем делить. При делении, сначала первые 250 символов стразу оставляем и после 250 начинаем искать Точку или !, после того как нашли, выполняем некоторое действие (например записываем в Мемо), дальше, если остаток меньше 280, записать в Мемо как 2-ю строку, если больше, то по такому же принципу, 250 сразу, и до первой точки или ! ... и т.д.
Суть в том, чтобы каждая строка была не больше 280 символов.
Можешь сказать зачем тебе это понадобилось?
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
29.01.2015, 08:08  [ТС]
northener, Долго описывать всю суть))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2015, 08:08
Помогаю со студенческими работами здесь

Разделить одну таблицу на несколько
У меня дана таблица &quot;СТУДЕНТЫ&quot; с столбцами &quot;ИМЯ&quot; ,&quot;День Рождение&quot;, &quot;номер группы&quot;, &quot;курс&quot;. как с помощью операторов...

Разделить столбец на два с переносом данных в одну строку!
Помогите!!!! Есть таблица, с данными о прививках. Данные сгруппированы в одном столбце. Надо разбить данные на два столбца, но в одну...

Разделить строку на несколько частей
Функция создания таблицы: void tableCreate(String ab, String bb,String gg) { ScrollView sv = new ScrollView(this); ...

Разделить исходную строку на несколько строк длины K
Помогите пожалуйста: Разделить исходную строку на несколько строк длины K.

Как лучше всего разделить строку на несколько подстрок?
Есть строка вида параметр1*параметр2*параметр3*параметр4. Как разделить эту строку, чтобы получить в первой переменной параметр1, во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru