// Replaces a string in a file with new string. // Ersetzt eine Zeichenkette in einer Datei mit einer anderen Zeichenkette. procedure TForm1.Button1Click(Sender: TObject);
var
f: file;
l: Longint;
FileName, oldstring, newstring, s: string;
begin
oldstring := 'old string';
newstring := 'new string';
FileName := 'c:\YourFileName.xyz';
s := oldstring;
AssignFile(f, FileName);
Reset(f, 1);
for l := 0 to FileSize(f) - Length(oldstring) - 1 dobegin
Application.ProcessMessages;
Seek(f, l);
BlockRead(f, oldstring[1], Length(oldstring));
if oldstring = s thenbegin
Seek(f, l);
BlockWrite(f, newstring[1], Length(newstring));
ShowMessage('String successfully replaced!');
end;
Application.ProcessMessages;
end;
CloseFile(f);
end;
Перевод контента на русский язык:
Предлагается процедура на языке Pascal, которая заменяет конкретную строку на другую в двоичном файле. Код работает следующим образом:
Сначала присваивается имя файла и старой/новой строк.
Файл открывается в режиме чтения с помощью AssignFile и Reset.
Затем проходит по каждому байту в файле (используя FileSize - Length(oldstring) - 1) для поиска вхождения старой строки.
Когда она находит совпадение, она перемещается назад к этому положению и записывает новую строку над старой с помощью BlockWrite.
Наконец, файл закрывается с помощью CloseFile.
Вот некоторые предложения по улучшению:
Код использует Application.ProcessMessages, что может быть неэффективно, поскольку оно заставляет приложение обрабатывать сообщения от других компонентов в то время, когда оно проходит по файлу.
Код предполагает, что файл слишком маленький для хранения в памяти. Если файл слишком велик, более эффективным будет чтение его частями и замена строк на месте.
Обработка ошибок минимальна. Могло бы быть хорошим идеей проверить, существует ли файл перед попыткой открыть его.
Вот альтернативное решение с использованием TStreamReader и TStreamWriter, которое может обрабатывать большие файлы:
procedureTForm1.Button1Click(Sender:TObject);varFileName,oldstring,newstring:string;beginoldstring:='old string';newstring:='new string';FileName:='c:\YourFileName.xyz';tryAssignFile(FileName);Reset(FileName);varreader:=TStreamReader.Create(FileName,System.TextEncoding.UTF8);varwriter:=TStreamWriter.Create(FileName,True,System.TextEncoding.UTF8);whilenotreader.EndOfStreamdobeginvarline:=reader.ReadLine;ifPos(oldstring,line)>0thenwriter.WriteLine(StringReplace(line,oldstring,newstring))elsewriter.WriteLine(line);end;CloseFile(FileName);exceptonE:ExceptiondoShowMessage('Error while processing file: '+E.Message);end;end;
Код читает файл строка за строкой и заменяет старую строку на новую. Он использует TStreamReader для чтения файла и TStreamWriter для записи модифицированных строк обратно в файл. Этот подход более эффективен для больших файлов и также правильно обрабатывает кодировку.
Программа на Pascal, позволяющая заменить строку в двоичном файле на новую строку.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.