Вниз
Скачать: CL | DM;

Как обойти эту проблему   Найти похожие ветки 

← →
Popova   (2003-11-02 17:22) [0]

Создаю тип
Type TMyType=record
s:integer;
str:string;
end;

затем

var f:file of TMyType;

но при компиляции ошибка
Type "<name>" needs finalization - not allowed in file type
в хелпе написано что надо str:array [1..100] of char;

Это как нибудь можно обойти я ведь не знаю кокй длины заранее у меня будет str?


← →
Anatoly Podgoretsky ©   (2003-11-02 17:28) [1]

В типизированном файле все записи должно быть одинаковой длины!
Ну и чем тебя спарвка не устраивает? Если конечно теб нужно 100 символов.


← →
default ©   (2003-11-02 17:52) [2]

"Это как нибудь можно обойти я ведь не знаю кокй длины заранее у меня будет str?"
ну если, к примеру, у тебя все строки не длинее 100 символов, можешь описать их как "str:array [1..100] of char" и воспринимать файлы таких записей как типизированные если, конечно, память не жалко или что-то ещё...


← →
Юрий Федоров ©   (2003-11-02 18:30) [3]

Либо str: ShortDtring;
либо str:string[100];
либо str: array [1..100] of char
Либо не использовать file of TMyType, а например TFileStream


← →
Gero ©   (2003-11-02 19:07) [4]

Я тоже когда-то сталкивался с этой проблемой. Один из возможных вариантов решения:


type TMyType = record
S : Integer;
Str : String;
end;
var
MyR : TMyType;
F : file;
begin
AssignFile(F, "MyFile.my");
Reset(F, 1);
BlockRead(F, MyR, SizeOf(MyR));
CloseFile(F);
end.


Кроме того, если известно, что Str не больше 256 символов, используй Str : ShortString. Тогда ошибки не возникает.


← →
Palladin ©   (2003-11-02 22:19) [5]

нда

> Gero © (02.11.03 19:07) [4]

твой вариант ошибочный абсолютно


← →
default ©   (2003-11-02 22:24) [6]

Palladin © (02.11.03 22:19) [5]
прикинь это один из возможных вариантов решения, рискну предположить, что он выбрал наилучший, какие же остальные...
Gero © (02.11.03 19:07) [4]
записывается(считывается) указатель на строку, а не сама строка(в файл/из файла)


← →
Gero ©   (2003-11-02 22:36) [7]

Я использовал это, когда надо было считать/записать дин. массив в файл. Потому как при использовании array of SomeType в record и попытке объявить F : TMyType возникала та же ошибка.


← →
Palladin ©   (2003-11-03 01:59) [8]

Ну типа хорошо... можешь юзать дальше свой способ... лично я не против...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
1-41712
Cranium
2003-11-03 18:56
2003.11.13
Как в обработчике события запретить его?


3-40935
zsr
2003-10-17 13:27
2003.11.13
BatchMove для ADOQuery


14-42136
D'oh
2003-10-21 00:43
2003.11.13
Дисковод


1-41613
Floppy
2003-10-25 10:14
2003.11.13
QuickReport


4-42265
kopcap
2003-09-13 13:26
2003.11.13
Работа с мышкой




   Наверх