dartx: Типизированный файл (паскаль)

13 сообщений / 0 new
Последнее сообщение
Гость
dartx: Типизированный файл (паскаль)

Есть типизированный файл, который хранит записи вида

TRec = record
passw_check:string[50];
passw_list:string[50];
przs_can_empty:string[250];
no_cond_string:integer;
cond_string:array[1..100] of record
cst: byte;
css: string[250];
end;
end;

var
T: Trec;

Как мне обратится к внутренней записи, учитывая что это массив записей?

я пробую T.cond_string[индекс].cst ругается компилятор.
<span class='smallblacktext'>[ Редактирование ]</span>

frug (не проверено)

а подробней, на что ругается компилятор ?

dartx (не проверено)

Record, Object or Class type required.

Я открываю файл так

assignfile(b,RecFileName);
reset(b);
read(b,T);

потом пытаюс обратится к внутренней записи по индексу T.cond_string[индекс].cst но так не получается

frug (не проверено)

Странно, а у меня работает.

[blockquote][color=green]program Test;

type
TRec = record
passw_check: string[50];
passw_list: string[50];
przs_can_empty: string[250];
no_cond_string: integer;
cond_string: array[1..100] of record
cst: byte;
css: string[250];
end;
end;

var
T: TRec;

begin
T.cond_string[1].cst := 100;
writeln(T.cond_string[1].cst);
end.[/color]
[/blockquote]

[b]dartx[/b], может быть ты не правильно обращаешься к элементу массива структуры ?
Покажи тот участок кода, откуда растёт ошибка компиляции.
<span class='smallblacktext'>[ Редактирование 13.12.2006 - 11:36:50 ]</span>

dartx (не проверено)

Ну у меня есть типизированные файл в котором куча этих рекордов. И я их пытаюсь вытянуть и у меня на это компилятор ругается(только на внутреннюю запись). А так тоже работает.

dartx (не проверено)

<div class="indent">
var
brak : TAnkBrak;
b : file of TAnkBrak;
cont_str, i: integer;
cst_: byte;
css_: string;
begin
assignfile(b,BrakFileName);
reset(b);
read(b,brak);
cont_str := brak.no_cond_string;
showmessage(IntToStr(cont_str));

for i:= 1 to cont_str do
begin
css_:= DecodeStr(brak.cond_string[i].css);
showmessage(css_);
end;
end;

</div>

<span class='smallblacktext'>[ Редактирование 13.12.2006 - 11:48:12 ]</span>

frug (не проверено)

Ну не может компилятор ругаться на файл который будет открыт только во время выполнения... ошибка у тебя скорей всего синтаксическая. Покажи весь код, а так же дословно сообщения компилятора.

frug (не проверено)

так у меня тоже работает :)
[blockquote] [color=green]T.cond_string[1].cst := 100;
T.cond_string[1].css := 'test';
writeln(T.cond_string[1].cst);
writeln(T.cond_string[1].css);[/color]
[/blockquote]

dartx (не проверено)

Дело в том что структура, хранится в отдельном файле, и сейчас я добавил в эту структуру поле test: integer,
и компилятор это поле не увидел.

dartx (не проверено)

Наверное формат рекорда поменяли, а файл в котором записаны рекорды нет, вот компилятор и ругается, т.к. не может эти поля найти

dartx (не проверено)

Все разобрался, не тот путь брал к файлу с инфой о записях.

frug (не проверено)

[blockquote]Наверное формат рекорда поменяли, а файл в котором записаны рекорды нет, вот компилятор и ругается, т.к. не может эти поля найти[/blockquote]
видимо не уяснил ты эту тему :)
я ж говорю, компилятору абсолютно параллельно на файл, который будет открыт в процессе выполнения. да и поиск полей в файле по такой схеме выборки никаким образом не производится... просто из файла читается блок данных, соответствующий размеру sizeof(TRec) и просто проецируется на экземпляр этой структуры.
<span class='smallblacktext'>[ Редактирование 22.12.2006 - 08:53:50 ]</span>

dartx (не проверено)

Ну да затупил немного :)

RSS-материал