Доброго времени суток! Ребят, пишу программу-тестер которая записывает вопросы с ответами в тип.файл, хочу добавить возможность удалять вопросы из теста, Вопрос - как это сделать?? Подскажите пожалуйста...перешарил весь гугл вдоль и поперек уже, ничего дельного найти не могу, вот мой код так я организовываю вопросы, ответы в тесте:
| Код | ..................... const NQ=100;//максимальное число вопросов NA=3;//максимальное число ответов type t_Test=record QW:array[1..NQ] of String[200]; //массив вопроса An:array[1..NQ,1..NA] of String[100];//ответы двумерный массив Ra:array[1..NQ] of integer;//правильный ответ Bb:array[1..NQ]of integer;// балл за правильный ответ zapis_K:byte; //запись общего кол-ва вопросов zapis_B_vsego:byte;//запись общего кол-ва баллов Res:array [1..NQ] of integer;//результат end;
var Test:t_Test; FTest:File of t_Test; //файл для создания теста n:byte; //текущий вопрос k:byte; //количество вопросов ball:integer; //баллы FileName:String; ............................... //пытался удалять при помощи временного файла tempTest:t_test; //файл для удаления записи f,fa:integer;
|
собственно процедуры записи-чтения
| Код | procedure WriteTest; begin //создание файла при записи AssignFile(FTest,FileName+'.dat');// связь файловой переменной с файлом на диске Rewrite(FTest);//Создание файла Write(FTest,Test);//записываем тест в файл CloseFile(FTest); end;
procedure ReadTest; begin AssignFile(FTest, FileName);// связь файловой переменной с файлом на диске Reset(FTest); Read(FTest,Test);//читаем тест из файла CloseFile(FTest); end;
|
С этим проблем у меня нету.
Пробовал сам 2 варинта удаления:
1 Вариант - при помощи временного файла temрTest
| Код | procedure DelZap; //удаление записи begin fa:=1; FillChar(tempTest, SizeOf(t_Test),0); for f:=1 to NQ do begin if f <> n{вопрос который надо удалить} then begin tempTest.QW[fa]:=Test.QW[f]; inc(fa); end; end;
for f:=1 to NQ do Test.QW[f]:=tempTest.QW[f];
end;
|
Результат - ничего не происходит вообще=(((((
2 вариант - Насоветовали на delphisorces при помощи функции seek и truncate - перемещение записи вопроса в конец файла с последующим его отсечением
| Код | begin //n = номер удаляемой записи, начиная с 0 seek(ftest, filesize(ftest) - 1); readtest seek(ftest, n - 1); writetest //когда запись уже находиться в конце файла, я ее отсекаю seek(ftest, filesize(ftest) - 1); truncate(ftest)
|
Результат - ошибка I/O =(((
В общем жду любой помощи |