Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2007, 12:43   #1
VAbramyak
 
Регистрация: 04.04.2007
Сообщений: 5
По умолчанию Поиск и замена текста в файле

Здравствуйте! Нужна помощь! Есть prn (с esc-последовательностью) файл, мне нужно програмно в delphi заменить один текст другим. Пробовал на файле размером примерно 65к использовать такой код

procedure FileReplaceString(const FileName, searchstring, replacestring: string);
var
fs: TFileStream;
S: string;
begin
fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone);
try
SetLength(S, fs.Size);
fs.ReadBuffer(S[1], fs.Size);
finally
fs.Free;
end;
S := StringReplace(S, SearchString, replaceString, [rfReplaceAll, rfIgnoreCase]);
fs := TFileStream.Create(FileName, fmCreate);
try
fs.WriteBuffer(S[1], Length(S));
finally
fs.Free;
end;
end;

но он почему-то не меняет текст во всех местах, а только первых два вхождения. Как быть?
VAbramyak вне форума Ответить с цитированием
Старый 04.04.2007, 12:54   #3
VAbramyak
 
Регистрация: 04.04.2007
Сообщений: 5
По умолчанию

примерчика не будет?
VAbramyak вне форума Ответить с цитированием
Старый 04.04.2007, 20:20   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

можно загружать файл в tstringlist
Код:
var
  str:tstringlist
begin
  str:=..create;
  str.loadfromfile(....);
str.text возвращает весь файл как одну большую длинную строку и насколько я знаю её размер ограничивается 2 ГБ

вот процедурка которая намного быстрее StringReplace моего собственного производства

Код:
function MyStringReplace(_Value,_Old,_New:string):string;
var
  i,l,lold,lnew:integer;
begin
  l:=length(_Value);
  lold:=length(_Old);
  lnew:=length(_New);
  Result:='';
  i:=0;
  repeat
   Inc(i);
   begin
    if copy(_Value,i,lold)=_Old then
     begin
      Result:=Result+_New;
      i:=i+lold-1;
     end                       else
     Result:=Result+_Value[i];
   end;
  until i=l;
end;
тебе хватит только этого MyStringReplace(str.text, 'старое', 'новое')
хотя можно построчно обрабатывать
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема поиск и замена текста(Delphi) KirkMETAL Помощь студентам 4 26.07.2010 08:41
Поиск определённого текста в текстовом файле vitawt Общие вопросы Delphi 4 20.01.2008 22:12
Как правильно сохранить настройки текста в ini файле KORN Общие вопросы Delphi 2 30.10.2007 09:14
поиск и замена текста в RichEdit Vasya Помощь студентам 11 16.03.2007 06:48
замена текста zetrix Microsoft Office Excel 0 31.10.2006 07:54