Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.06.2010, 22:10
akm-gala akm-gala вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 2
Репутация: 10
По умолчанию Поиск и замена в текстовых файлах

Нужна помощь по Делфи.

Существует текстовый файл в виде:

фамилия
имя
группа
пароль
результат 1
результат 2
результат 3
фамилия
имя
группа
пароль
результат 1
результат 2
результат 3
фамилия
имя
группа
пароль
результат 1
результат 2
результат 3
и т.п.

Задача: после прохождения теста N записать его результат в нужную строку в зависимости от данных регистрации. То есть заранее ни номера строки, ни данных для записи знать невозможно. Известен только номер теста. Подскажите, как это попроще реализовать? может кто сталкивался?
Пока я представляю вариант перебора всех строк файла. Открываем файл на чтение. Читаем каждый раз первые 4 строки, сравниваем с данными регистрации, увеличиваем счетчик. Как только все данные совпали, закрываем файл. Открываем на запись. Как в нем поставить указатель на нужную мне строку?

Спасибо!
Ответить с цитированием
  #2  
Старый 17.06.2010, 23:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

К сожалению, у тебя ничего так не получится. Дело в том, что в тестровом файле реально место для дописывания в середину не зарезервированно. Поэтому придется файл читать целиком, исправлять и перезаписывать заного. Я бы на твоем месте написал бы пару процедур для чтиени/разбора файла в массив записей и сохранения из массива. Можно еще проще сделать. Загрузить все в TStringList и адресоваться в нем N*7 + C.

Код:
procedure SetResult(AFileName, ALastName, AFiestName, AGroup, APass : String; AResNum : Integer; AData : String);
var
  I : Integer;
  L : TStringList;
begin
  L := TStringList.Create;
  L.LoadFromFile(AFileName);
  For I := 0 To L.Count / 7 Do
    Begin
       If (ALastName = L[I*7]) And
          (AFirstName = L[I*7+1]) And
          (AGroup = L[I*7+2]) And
          (APass = L[I*7+3]) Then
         Begin
            L[I+4+AResNum-1] := AData;
            Break;
         End;
    End;
  L.SavetoFile(AFileName);
end;

Код требует заполнения всех строк. Там, где нет данных, надо поставить пустую строку в файле. Ну и, конечно, код не проверяет наличие ошибок и корректность введенных данных, если надо - сам допишешь.
Ответить с цитированием
  #3  
Старый 17.06.2010, 23:31
akm-gala akm-gala вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо Вам, добрый человек!!!! Немного под себя исправила и все работает!!!!!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:41.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025