![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Нужна помощь по Делфи.
Существует текстовый файл в виде: фамилия имя группа пароль результат 1 результат 2 результат 3 фамилия имя группа пароль результат 1 результат 2 результат 3 фамилия имя группа пароль результат 1 результат 2 результат 3 и т.п. Задача: после прохождения теста N записать его результат в нужную строку в зависимости от данных регистрации. То есть заранее ни номера строки, ни данных для записи знать невозможно. Известен только номер теста. Подскажите, как это попроще реализовать? может кто сталкивался? Пока я представляю вариант перебора всех строк файла. Открываем файл на чтение. Читаем каждый раз первые 4 строки, сравниваем с данными регистрации, увеличиваем счетчик. Как только все данные совпали, закрываем файл. Открываем на запись. Как в нем поставить указатель на нужную мне строку? Спасибо! |
|
#2
|
|||
|
|||
|
К сожалению, у тебя ничего так не получится. Дело в том, что в тестровом файле реально место для дописывания в середину не зарезервированно. Поэтому придется файл читать целиком, исправлять и перезаписывать заного. Я бы на твоем месте написал бы пару процедур для чтиени/разбора файла в массив записей и сохранения из массива. Можно еще проще сделать. Загрузить все в 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
|
|||
|
|||
|
Спасибо Вам, добрый человек!!!! Немного под себя исправила и все работает!!!!!
![]() |