Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Файл записей   Найти похожие ветки 

 
Firefly ©   (2006-05-19 00:44) [0]

Здравствуйте.
Есть запись -
type
TLogRecord = packed record
  LogStringNum: string;
  LogString : string;
end;


При попытке создать файловую переменную
F: file of TLogRecord;
- ругается Type "TLogRecord" needs finalization - not allowed in file type.

В чем дело то?


 
Zeqfreed ©   (2006-05-19 01:11) [1]

Длинные (Ansi) строки не имеют постоянного размера в памяти и потому не могут быть записаны в типизированный файл. Чтобы избежать этого, используйте строки ограниченной длины (ShortString, или строки с явно указанным размером).


 
Firefly ©   (2006-05-19 01:30) [2]


> Zeqfreed ©  

Спасибо.
А как указать явно длину строки(именно строки, создавать массив выльется потом в гемор)


 
DevilDevil ©   (2006-05-19 01:40) [3]

Вообще, забудь ты F: file of TLogRecord;, используй TFileStream. Можешь посмотреть: http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&search=TFileStream

Но по сабжу, можно ограничить записи по максимальному размеру строки, например:
type
TLogRecord = packed record
 LogStringNum: string[55];
 LogString : string[40];
end;

Если размер файла важен, то не увлекайся, так как размер одной такой записи = длинна(LogStringNum) + длинна(LogString) + 2 байт


 
Firefly ©   (2006-05-19 01:46) [4]


> DevilDevil ©  

Туплю, string[55] - это ж и догадаться можно было:-)))
Спасибо за помощь.


 
Zeqfreed ©   (2006-05-19 02:04) [5]


> Вообще, забудь ты F: file of TLogRecord;, используй TFileStream.
>

Зачем?


> Если размер файла важен, то не увлекайся, так как размер
> одной такой записи = длинна(LogStringNum) + длинна(LogString)
> + 2 байт

Откуда 2 байта?


 
Zeqfreed ©   (2006-05-19 02:13) [6]

[5] Zeqfreed ©   (19.05.06 02:04)

> Откуда 2 байта?

Вопрос снимается. В этом частном случае действительно 2 байта. :)


 
Германн ©   (2006-05-19 02:16) [7]


> Откуда 2 байта?

Имхо, длина записи. В записи две короткие строки. Каждая может иметь до 255 символов.


 
Zeqfreed ©   (2006-05-19 02:18) [8]

[7] Германн ©   (19.05.06 02:16)
Да, я уже понял, что со строкой записывается служебная информация о её длине размером в один байт.


 
Firefly ©   (2006-05-19 03:30) [9]

Еще вопрос:
В записи, если ограничивать string по длине, то максимальная длина 255 символов. Можно ли как-то обойти это ограничение? Почему-то для WideString нельзя зафиксировать длину.


 
Сергей М. ©   (2006-05-19 09:14) [10]


> Можно ли как-то обойти это ограничение?


Просто не вводить ограничение, т.е. использовать AnsiString
Но тогда придется отказаться от использования типизированного файла для хранения структуры


> для WideString нельзя зафиксировать длину.


Это действительно так.



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

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
4-1142341098
Arhangel_isa
2006-03-14 15:58
2006.06.04
Помогите отследить завершение процесса архивирования


6-1139136992
parovoZZ
2006-02-05 13:56
2006.06.04
SQL и время с датой


15-1146930890
Nick Denry
2006-05-06 19:54
2006.06.04
как настроить apache локально?


2-1146751850
DAn13
2006-05-04 18:10
2006.06.04
TreeView


2-1147848747
dest81
2006-05-17 10:52
2006.06.04
Событие от клавиатуры