![]() |
Обработчик строк из текстового файла
Есть файл с текстом формата(разделитель '|'):
1|325230ш5ш3|438|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ| 2|32523лпукп4|22|Европа|ДУБЛИН, ИРЛАНДИЯ| 3|32епкупщ4пп|21|Венгрия|БУДАПЕШТ, ВЕНГРИЯ| Нужно пропарсить его ( 1. Если в 3-ем числе >394, то вычитаем из него 394(строку дублируем),остаток оставляем новой строкой.(учесть, что операция должна быть циклична, т.к. встречаются числа больше 792) 2. Отсортировать строки по 3-ему числу. (1-ое число - счетчик) ) , чтобы на выходе получилось это: 1|32епкупщ4пп|21|Венгрия|БУДАПЕШТ, ВЕНГРИЯ| 2|32523лпукп4|22|Европа|ДУБЛИН, ИРЛАНДИЯ| 3|325230ш5ш3|46|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ| 4|325230ш5ш3|394|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ| |
pageYK@fb, в чем возникла проблема?
Где рассуждения? |
lxa85, «рассуждения» были здесь: CMD/BAT - [решено] обработка в подстроке.
|
lxa85, рассуждениями поделились ссылочкой выше.
А так затык, в основном, как в Delphi индентифицировать в строке это третье число, delimited опробовал, не зашло. |
Цитата:
|
Цитата:
Код:
function split(splitter: Char; str: String): TStringList; Код:
var value: Integer; |
Вся "работа" вокруг анализа одной "колонки"... не нужно что-то выдумывать. Для выделения подстроки в Delphi все есть
все остальные действия от обработки результата. |
Из вышестоящего, собрал вот такой кусок:
Код:
var |
Цитата:
|
opel431, Методов хватает, работает не так как надо.
Код
Код:
var SaveToFile по итогу, возвращает в файл текст уже разбитый на подстроки: "1 325230ш5ш3 438 Лондон ЛОНДОН, ВЕЛИКОБРИТАНИЯ". И как оперировать с несколькими строками для их сортировки так мне осталось неясным. |
Цитата:
Код:
while value>394 do |
opel431,
Проблема заключается в том, что делиметр разделяет строку на подстроки, а как обратно конкатенировать для записи в файл непонятно. |
pageYK@fb, есть строка, разбитая на под строки.
Что вам мешает собрать ее обратно? Если у вас формат файла фиксирован, то и собирайте в цикле Код:
str = ""; delimiters - полученный "конструктор" подстрочек str - результирующая строка |
opel431, lxa85, а какого-нибудь аналога basic'овского «Join()» в Delphi нету разве?
|
lxa85, opel431,
Строки разбиваются (при delimiter = "|") на отделяемое запятыми тоже, поэтому обратно приведенным вами способом не соберешь. Вот почему мне не нравится этот метод через делимитедтекст. Поэтому прошу выкладывать решение, а не функцию которую можно применить.(уже n-раз выходит, что возникают только доп.вопросы) |
Iska, честно, не знаю :)
pageYK@fb, что значит "не соберешь"? Что отладчик говорит? Что говорят watchdog'и? Что в полученных структурах, что на выходе? Вы хоть какую-то информацию к размышлениям давайте. |
Встроенного аналога, с параметром разделителя, не нашел (есть обычная Concat), заменяющая +. Так что, или ее или ручками.
pageYK@fb, нужно с интересом подходить к своей задаче. Поковыряюсь параллельно с вами. Поставил триальный XE4, нашел в справочнике функцию SplitString (функция есть, как минимум с XE) и .... Для наглядность, применил TMemo. pageYK@fb, дальнейшие "телодвижения" (сортировка, адаптация, оптимизация и все, что вам требуется, делайте сами). Результат 1|325230ш5ш3|438|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ| 2|325230ш5ш3|44|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ| 3|32523лпукп4|22|Европа|ДУБЛИН, ИРЛАНДИЯ| 4|32епкупщ4пп|21|Венгрия|БУДАПЕШТ, ВЕНГРИЯ| |
opel431,
Спасибо за splitstring, а memo работает только на кнопке, была бы привязка к форме. Спасибо, и на этом. |
Цитата:
|
Время: 22:31. |
Время: 22:31.
© OSzone.net 2001-