Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись, чтение, поиск строки. [D3]


-= Like =- ©   (2002-08-19 17:26:00) 

Добрый вечер. "Нарисовал" я три функции для работы со строками в текстовом файле. Вот они... У меня такой вопрос: как можно сделать так, чтобы функция записи строки записывала строку в конец текста, то есть записывала строку самой последней. И чтение происходило по всему файлу для поиска нужной нам строки. То же должно происходить и с удаление. В моем же выполнении все функции работают с нулевой, то есть с самой первой строкой.

//Чтение строки в файле
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;


Anatoly Podgoretsky   (2002-08-19 18:04:00) [1]

Да мы так тебя не путали


MBo   (2002-08-19 18:04:00) [2]

на все это я уже ответил.
Какой смысл в этом?
L := 0;
if L = Line.IndexOf(Str) then

надо что-то типа

L:= Line.IndexOf(Str);
if L>=0 then
Line.Delete(i);

добавить в конец - Add, а не Insert

замечание- нехорошо использовать идентификаторы Str, Write и т.п.


Riko   (2002-08-19 17:56:00) [3]

Я и Riko и Like. Решил поменять позывной, дабы особо не светиться. Промашечка вышла, бывает...


Riko   (2002-08-19 17:54:00) [4]

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);


MBo   (2002-08-19 17:43:00) [5]

нельзя ли поставить техническое задание поточнее - что, при каких условиях, нужно сделать?


-= Like =-   (2002-08-19 17:34:00) [6]

Не могу это использовать. Если нет строки - ошибка. Даже, когда я разрушаю всё с помощью Exit. D3 ведет себя в этом случае очень капризно.

if Line.IndexOf(Str) >=0 then


MBo   (2002-08-19 17:31:00) [7]

if Line.IndexOf(Str) >=0 то строка есть (нумерация в списке идет с 0)
добавить - TStringList.Add


Наверх

Титульная страница Поиск, карта сайта Написать письмо