Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление записи из типизированного файла, функция seek 
:(
    Опции темы
delphi1user
Дата 8.11.2010, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Доброго времени суток! 
Ребят, пишу программу-тестер которая записывает вопросы с ответами в тип.файл, хочу добавить возможность удалять вопросы из теста, Вопрос - как это сделать?? Подскажите пожалуйста...перешарил весь гугл вдоль и поперек уже, ничего дельного найти не могу, вот мой код
так я организовываю вопросы, ответы в тесте:

Код

.....................
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 =(((


В общем жду любой помощи


Это сообщение отредактировал(а) delphi1user - 8.11.2010, 09:04
PM MAIL   Вверх
cfb
Дата 8.11.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.11.2010
Где: г.Краснодар

Репутация: нет
Всего: нет



В первом варианте имеет ли значение переменная NQ? И второе, не забыли-ли Вы случайно записать полученное значение переменной Test в конечный файл?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0393 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.