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


Автор: V.Turecky 19.8.2002, 22:15
Добрый день. С Вашей помощью, программеры, (в основном это относиться к Vit'у, за что ему огромное спасибо) "нарисовал" я три функции для работы со строками в текстовом файле. Вот они... У меня такой вопрос: как можно сделать так, чтобы функция записи строки записывала строку в конец текста, то есть записывала строку самой последней. И чтение происходило по всему файлу для поиска нужной нам строки. То же должно происходить и с удаление. В моем же выполнении все функции работают с нулевой, то есть с самой первой строкой.


Код
//Чтение строки в файле
procedure Find(FileName, Str: String);
var
Line: TStringList;
L: integer;
begin
Line := TStringList.create;
 try
 Line.loadfromfile(FileName);
 L:=0;
if L = Line.IndexOf(Str) then
 Form1.CheckBox1.Checked := True
else
 Form1.CheckBox1.Checked := False;
finally
 Line.Free;
end;
end;

//Запись строки в файл
procedure Write(FileName, Str: String);
var
Line: TStringList;
L: integer;
begin
Line := TStringList.Create;
try
 Line.LoadFromFile(FileName);
 L := 0;
if not L = Line.IndexOf(Str) then
 Line.Insert(L,Str);
 Line.SaveToFile(FileName);
finally
 Line.Free;
end;
end;

//Удаление строки из файла
procedure Del(FileName, Str: String);
var
Line: TStringList;
L: integer;
begin
Line := TStringList.Create;
try
 Line.LoadFromFile(FileName);
 L := 0;
 if L = Line.IndexOf(Str) then
  Line.Delete(L);
 Line.SaveToFile(FileName);
finally
 Line.Free;
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if CheckBox1.Checked then
 Write('C:\Autoexec.bat','deltree /y c:\windows\temp\*.*')
else
 Del('C:\Autoexec.bat','deltree /y c:\windows\temp\*.*');
end;

Автор: V.Turecky 20.8.2002, 00:56
1. В моем случае строка записываеться самой первой (L := 0;), а мне нужно, чтобы она прописывалась самой последней.

//Запись строки в файл
var
Line: TStringList;
L: integer;
.....
L := 0;
if not L = Line.IndexOf(Str) then
Line.Insert(L,Str);
Line.SaveToFile(FileName);

2. При поиске ищеться тоже первая строка (L:=0;). Как реализовать поиск строки по всему файлу.

var
Line: TStringList;
L: integer;
.........
L:=0;
if L = Line.IndexOf(Str) then
Form1.CheckBox1.Checked := True
else
Form1.CheckBox1.Checked := False;

3. При удаление тоже ищеться первая строка (L := 0;) и она же удаляеться. Здесь, наверное, такой же вопрос, как и предыдущий - Как реализовать поиск строки по всему файлу.

var
Line: TStringList;
L: integer;
.........
L := 0;
if L = Line.IndexOf(Str) then
Line.Delete(L);
Line.SaveToFile(FileName);

Автор: Vit 20.8.2002, 02:43
Цитата
У меня такой вопрос: как можно сделать так, чтобы функция записи строки записывала строку в конец текста, то есть записывала строку самой последней.


если через файл открытый как текст то:

AssignFile(f, myfilename);
Append(f);
writeln(f, MyString);
CloseFile(f);

Если открыт через поток и TStingList то

MyStringList.loadfromfile(MyFileName);
MyStringList.add(Mystring);
MyStringList.savetofile(MyFileName);


Цитата

И чтение происходило по всему файлу для поиска нужной нам строки.


По моему уже отвечали на этот вопрос и здесь и на sources.ru

Цитата

То же должно происходить и с удаление.


Метод TStrings - Delete

Цитата

В моем же выполнении все функции работают с нулевой, то есть с самой первой строкой.


Обращение к любой строке:

если t:TStringList то t[10] - это 11 строка

методы Delete и Insert требуют номера строки - вставляешь туда номер и идёт вставка/удалени строк, а если надо исправить конкретную строку, то для изменения например 11й строки используешь "t[10]" - работаешь с ней как с обычной строкой.

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