Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Denis_ger от 20 Августа 2021, 16:21:14

Название: Работа с текстовым файлом
Отправлено: Denis_ger от 20 Августа 2021, 16:21:14
Можно ли с помощью скрипта переписать строку в текстовом файле не трогая прочие строки? Не заменить весь файл, не дописать строку в конец, а именно выбрать определенную строку и переписать ее?
Название: Re: Работа с текстовым файлом
Отправлено: Simple_Scada от 23 Августа 2021, 11:41:40
Здравствуйте.

Цитировать
а именно выбрать определенную строку и переписать ее
В текстовом файле так сделать не получится. Если текстовый файл не очень большой, то можно загрузить его в список TM_StringList (https://simple-scada.com/help/script/stringlist.html), изменить нужную строку и затем сохранить список обратно в файл, например:
Создаем скрипт с типом "Глобальный модуль (https://simple-scada.com/help/script/globalmodule.html)":
Код: (delphi)
 interface

var
  myList: TM_StringList;          // объявляем список с именем myList

implementation

initialization                    // во время запуска проекта
  myList := TM_StringList.Create; // создаём список

finalization                      // во время выключения проекта
  FreeAndNil(myList);             // !!! обязательно удаляем список

end.
Далее, в нужном скрипте используем список:
Код: (delphi)
begin
  myList.LoadFromFile('D:\Test.txt', fcpUTF8);     // загружаем файл в список
  myList[3] := 'Измененная строка';                // изменяем четвертую строку списка
  myList.SaveToFile('D:\TestChange.txt', fcpUTF8); // сохряняем список во временный файл
  DeleteFile('D:\Test.txt');                       // удаляем исходный файл
  RenameFile('D:\TestChange.txt', 'D:\Test.txt');  // переименовываем временный файл в исходный
end.
Если текстовый файл большой, то нужно использовать следующий способ:
1. Открыть исходный текстовый файл для чтения.
2. Создать временный текстовый файл для записи.
3. Построчно считывать строки исходного файла. Если считанная строка искомая, то изменить ее содержимое на нужное.
4. Записывать строки во временный файл.
5. Закрыть временный файл.
6. Закрыть исходный файл.
7. Удалить исходный файл.
8. Переименовать временный файл в исходный.

Название: Re: Работа с текстовым файлом
Отправлено: Denis_ger от 25 Августа 2021, 11:48:20
Большой файл это какой? 2000 строк по 100 символов влезет в TM_StringList?
Название: Re: Работа с текстовым файлом
Отправлено: Simple_Scada от 25 Августа 2021, 13:24:17
Здравствуйте.

"2000 строк по 100 символов" да, влезет.