Delphi - Обработчик строк из текстового файла
-
pageYK@fb
Delphi - Обработчик строк из текстового файла
Есть файл с текстом формата(разделитель '|'):
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|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ|
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|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ|
-
lxa85
Re: Delphi - Обработчик строк из текстового файла
pageYK@fb, в чем возникла проблема?
Где рассуждения?
Где рассуждения?
-
opel431
Re: Delphi - Обработчик строк из текстового файла
lxa85, «рассуждения» были здесь:
CMD/BAT - [решено] обработка в подстроке
.-
lxa85
Re: Delphi - Обработчик строк из текстового файла
lxa85, рассуждениями поделились ссылочкой выше.
А так затык, в основном, как в Delphi индентифицировать в строке это третье число, delimited опробовал, не зашло.
А так затык, в основном, как в Delphi индентифицировать в строке это третье число, delimited опробовал, не зашло.
-
Iska
Re: Delphi - Обработчик строк из текстового файла
Цитата pageYK@fb:
delimited опробовал, не зашло.
Ну, так показывайте, как именно опробовали.
delimited опробовал, не зашло.
Delphi - Обработчик строк из текстового файла
Ну, так показывайте, как именно опробовали.
-
pageYK@fb
Re: Delphi - Обработчик строк из текстового файла
Цитата pageYK@fb:
А так затык, в основном, как в Delphi индентифицировать в строке это третье число, delimited опробовал, не зашло.
А что если написать функцию разделения строки по типу питоновской split или пхпшной explode? Примерно так:
Код:
Соответственно, на выходе имеем TStringList, где третье число - parts[2]. Ну а дальше в Integer преобразовать проще простого:
Код:
P.S. 100 лет не писал на Delphi, уж простите, если накосячил.
А так затык, в основном, как в Delphi индентифицировать в строке это третье число, delimited опробовал, не зашло.
Delphi - Обработчик строк из текстового файла
А что если написать функцию разделения строки по типу питоновской split или пхпшной explode? Примерно так:
Код:
Код: Выделить всё
function split(splitter: Char; str: String): TStringList;
var substr: String;
var parts: TStringList;
var i: Integer;
begin
parts := TStringList.Create;
for i := 1 to Length(str) do
begin
if str[i] = splitter then
begin
parts.add(substr);
substr := '';
end else
substr := substr + str[i];
end;
parts.add(substr);
result := parts;
end;Соответственно, на выходе имеем TStringList, где третье число - parts[2]. Ну а дальше в Integer преобразовать проще простого:
Код:
Код: Выделить всё
var value: Integer;
...
value := StrToInt(parts[2]);P.S. 100 лет не писал на Delphi, уж простите, если накосячил.
-
shisik
Re: Delphi - Обработчик строк из текстового файла
Вся "работа" вокруг анализа одной "колонки"... не нужно что-то выдумывать. Для выделения подстроки в Delphi все есть
Код:
Код:
все остальные действия от обработки результата.
ExtractStrings
Код:
Код: Выделить всё
const
str = '1|325230ш5ш3|438|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ|'; // для примера одна строка
var
sl: TStringList;
begin
sl := TStringList.Create;
begin
try
ExtractStrings(['|', ','], [' '], str, sl); // Note: ExtractStrings does not add empty strings to the list.
ShowMessage(sl[2]);
finally
sl.Free;
end;
end;Delimiter
Код:
Код: Выделить всё
const
str = '1|325230ш5ш3|438|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ|';
var
i: Integer;
begin
with TStringList.Create do
begin
Delimiter := '|';
StrictDelimiter := True;
DelimitedText := str;
{for i := 0 to Count - 1 do
ShowMessage(Strings[i]);}
ShowMessage(Strings[2]);
Free;
end;все остальные действия от обработки результата.
-
opel431
Re: Delphi - Обработчик строк из текстового файла
Вся "работа" вокруг анализа одной "колонки"... не нужно что-то выдумывать. Для выделения подстроки в Delphi все есть
Код:
Код:
все остальные действия от обработки результата.
ExtractStrings
Код:
Код: Выделить всё
const
str = '1|325230ш5ш3|438|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ|'; // для примера одна строка
var
sl: TStringList;
begin
sl := TStringList.Create;
begin
try
ExtractStrings(['|', ','], [' '], str, sl); // Note: ExtractStrings does not add empty strings to the list.
ShowMessage(sl[2]);
finally
sl.Free;
end;
end;Delimiter
Код:
Код: Выделить всё
const
str = '1|325230ш5ш3|438|Лондон|ЛОНДОН, ВЕЛИКОБРИТАНИЯ|';
var
i: Integer;
begin
with TStringList.Create do
begin
Delimiter := '|';
StrictDelimiter := True;
DelimitedText := str;
{for i := 0 to Count - 1 do
ShowMessage(Strings[i]);}
ShowMessage(Strings[2]);
Free;
end;все остальные действия от обработки результата.
-
pageYK@fb
Re: Delphi - Обработчик строк из текстового файла
Цитата pageYK@fb:
Как прописать запись строки в файл из цикла, через append?
Разве методов TStringList (add, insert, delete и прочих, для выполнения задачи, не хватает? Вариантов много, можно вообще все сделать в TSL (например, копирование нужной строки в конец списка add() с заменой подстроки StringReplace) и сохранением в файл SavetoFile.
Как прописать запись строки в файл из цикла, через append?
Delphi - Обработчик строк из текстового файла
Разве методов TStringList (add, insert, delete и прочих, для выполнения задачи, не хватает? Вариантов много, можно вообще все сделать в TSL (например, копирование нужной строки в конец списка add() с заменой подстроки StringReplace) и сохранением в файл SavetoFile.
-
opel431
Re: Delphi - Обработчик строк из текстового файла
opel431, Методов хватает, работает не так как надо.
Код
[spoiler]Код: [/spoiler]
SaveToFile по итогу, возвращает в файл текст уже разбитый на подстроки:
"1
325230ш5ш3
438
Лондон
ЛОНДОН,
ВЕЛИКОБРИТАНИЯ".
И как оперировать с несколькими строками для их сортировки так мне осталось неясным.
Код
[spoiler]Код: [/spoiler]
Код: Выделить всё
var
i,l,value:integer;
ts:TStringList;
s: string;
begin ts := TStringList.Create;
try
ts.LoadFromFile('1.txt');
ts.Delimiter := '|';
for l:=0 to ts.Count-1 do
begin
ts.DelimitedText := ts.Strings[l];
value := StrToInt(ts.Strings[2]);
while value>394 do
begin
value := value-394;
ts.Strings[2]:='394';
ts.SaveToFile('2.txt');
end;
end;
finally
ts.Free;
end;SaveToFile по итогу, возвращает в файл текст уже разбитый на подстроки:
"1
325230ш5ш3
438
Лондон
ЛОНДОН,
ВЕЛИКОБРИТАНИЯ".
И как оперировать с несколькими строками для их сортировки так мне осталось неясным.