Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Замена в теекстовом файле


Автор: Metalist 7.7.2006, 16:55
Имеется текстовый файл в котором нужно произвести замену подстрок в строках
т.е. примерно так

0. Открыть файл
1. Считать строку
2.1. Найти в строке подстроку "Vasya"
2.1.1. Заменить ее на подстроку "Вася"
....(Искомых подстрок может быть несколько и каждой соответсвует своя новая подстрока)
2.n. Найти в строке подстроку "Pupkin"
2.n.1. Заменить ее на подстроку "Пупкин"
....
3. Считать следующую строку
4. И так до конца файла
5. Сохранить файл с изменениями

Никак не могу придумать алгоритм - ПОМОГИТЕ !!!


 

Автор: Poseidon 7.7.2006, 17:09
Код

StringReplace(Stroka, 'Vasya', 'Вася', [rfReplaceAll]);
StringReplace(Stroka, 'Pupkin', 'Пупкин', [rfReplaceAll]);

 

Автор: Alexeis 7.7.2006, 17:09
Metalist, из транслита сделать руские буквы чтоли? 

Автор: Poseidon 7.7.2006, 17:10
В Stroka весь текст файла 

Автор: volvo877 7.7.2006, 17:12
Цитата(Metalist @  7.7.2006,  16:55 Найти цитируемый пост)
Никак не могу придумать алгоритм

Ты как раз алгоритм и придумал... Осталось реализовать...

Код
var
  sl: tstringlist;
  i: integer;

begin
  sl := tstringlist.create;
  sl.loadfromfile('1.txt');
  for i := 0 to pred(sl.count) do begin
    // Ну, тут замени по желанию... Первое слово - ЧТО меняешь, второе - НА ЧТО...
    sl[i] := stringreplace(sl[i], 'vasya', 'VASYA', [rfReplaceAll]);
    sl[i] := stringreplace(sl[i], 'vova', 'Vovan', [rfReplaceAll]);
  end;
  sl.savetofile('1.txt');
  sl.free;
end.

  

Автор: Metalist 7.7.2006, 17:14
Цитата(alexeis1 @ 7.7.2006,  09:09)
Metalist, из транслита сделать руские буквы чтоли?

НЕТ, это я так для примера =)

Добавлено @ 17:16 
Спасибо за ответы буду разбирать  smile  

Автор: Poseidon 7.7.2006, 17:16
volvo877, ужас! Я бы твой код переписал вот так:

Код
var
  sl: tstringlist;
  i: integer;
begin
  sl := tstringlist.create;
  sl.loadfromfile('1.txt');
    // Ну, тут замени по желанию... Первое слово - ЧТО меняешь, второе - НА ЧТО...
    sl.Text := stringreplace(sl.Text, 'vasya', 'VASYA', [rfReplaceAll]);
    sl.Text := stringreplace(sl.Text, 'vova', 'Vovan', [rfReplaceAll]);

  sl.savetofile('1.txt');
  sl.free;
end.


Тут правильнее опираться не на приведенный алгоритм, а на постановку задачи: 
Цитата(Metalist @  7.7.2006,  16:55 Найти цитируемый пост)
Имеется текстовый файл в котором нужно произвести замену подстрок в строках
 т.к. приведенный алгоритм тоже не идеален. smile
 

Автор: Alexeis 7.7.2006, 17:21
Poseidon, код volvo877 будет работать намного быстрее!  

Автор: Poseidon 7.7.2006, 17:39
Согласен. Но это будет заметно только при работе с ОГРОМНЫМИ файлами 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)