
05.07.2010, 22:54
|
Прохожий
|
|
Регистрация: 05.07.2010
Сообщения: 12
Репутация: 10
|
|
Работа с текстовым файлом. Срочно.
В общем я пишу программу тесты. Данная программа берет вопросы и ответы а также информацию по вопросу из файла с определенной структурой.
Код:
test=record
nomer:integer; // номер записи
vopros:string; // сам вопрос
ot1:string; // первый ответ
ot2:string; // второй ответ
ot3:string; // третий ответ
ot4:string; // четвертый ответ
pot:string; // правильный ответ
teor:string; // информация по вопросу
end;
файл уже сфомирован вот его пример
1
Сколько человек у нас в группе???
12
23
13
20
13
13 человек
2
Если да то ...
да
неи
не знаю
подумаю еще
да
да
3
Просто мне так захотелось
1
2
3
6
1
Многгоооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо
смысл моей же программы в том что при открытии очередного такого теста она должна брать рандомно все эти вопросы и ответы но в правильной последовательности. Чтобы брал не фиг пойми как а вопросы совпадали с ответами. Пример
Если да то ...
да
неи
не знаю
подумаю еще
да
да
но возникает проблема что seek не используется в текстовых файлах.
При использовании функции windows Api SetFilePointer(TTextRec(f).Handle, Pos, nil, File_Begin); в дальнейшем на readln(f,vizov.nomer) и т.д. выдает ошибку EinOutError с сообщением invalid input error. Такое сообщение он выдает если рандомное значение равно 1. И значение 2 он не показывал ни разу хотя записи 3.
Вот сам код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
RadioGroup1: TRadioGroup;
Image1: TImage;
procedure Button2Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
test=record
nomer:integer;
vopros:string;
ot1:string;
ot2:string;
ot3:string;
ot4:string;
pot:string;
teor:string;
end;
var
Form1: TForm1;
f:textfile;
vizov:test;
pravotvet:integer;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
closefile (f);
form1.Close;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
label1.Visible:=false;
label2.Visible:=false;
radiogroup1.visible:=false;
button1.Visible:=false;
image1.Visible:=true;
closefile (f);
end;
procedure TForm1.N2Click(Sender: TObject);
var
f:textfile;
slu4:integer;
pos:longint;
begin
opendialog1.Execute;
opendialog1.FileName;
n5.Visible:=true;
n3.Visible:=true;
radiogroup1.Visible:=true;
radiogroup1.Items.Clear;
image1.Visible:=false;
button1.Visible:=true;
label1.visible:=true;
label2.visible:=true;
pravotvet:=0;
randomize;
assignfile (f,opendialog1.FileName);
FileMode := fmOpenRead;
reset (f);
pos:=random(filesize (f));
SetFilePointer(TTextRec(f).Handle, Pos, nil, File_Begin);
readln (f,vizov.nomer); // ошибка если pos=1 и pos никогда не бывает 2 либо 0 (либо 1 проверял)
readln (f,vizov.vopros);
readln (f,vizov.ot1);
readln (f,vizov.ot2);
readln (f,vizov.ot3);
readln (f,vizov.ot4);
readln (f,vizov.pot);
readln (f,vizov.teor);
label2.Caption:=vizov.vopros;
randomize;
slu4:=random(3)+1;
case slu4 of
1: begin radiogroup1.Items.add (vizov.ot1);
radiogroup1.Items.add (vizov.ot2);
radiogroup1.Items.add (vizov.ot3);
radiogroup1.Items.add (vizov.ot4);
end;
2: begin radiogroup1.Items.add (vizov.ot2);
radiogroup1.Items.add (vizov.ot4);
radiogroup1.Items.add (vizov.ot3);
radiogroup1.Items.add (vizov.ot1);
end;
3: begin radiogroup1.Items.add (vizov.ot3);
radiogroup1.Items.add (vizov.ot1);
radiogroup1.Items.add (vizov.ot2);
radiogroup1.Items.add (vizov.ot4);
end;
4: begin radiogroup1.Items.add (vizov.ot4);
radiogroup1.Items.add (vizov.ot2);
radiogroup1.Items.add (vizov.ot1);
radiogroup1.Items.add (vizov.ot3);
end;
end;
end;
end.
Admin: Пользуемся тегами!
А в дальнейшем надо будет чтобы при выборе следующего вопроса бегал по файлу и читал эти записи. Народ подскажите в чём ошибка. И как мне реализовать всё это. Срочняк надо. Могу выложить ещё редактор теста для создания этих тестов чтобы эксперементировать. И учтите я дельфи только начал учить.
Последний раз редактировалось Admin, 05.07.2010 в 23:02.
|