Главная страница
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.062 c
15-1147551749
alex-drob
2006-05-14 00:22
2006.06.04
Сохранить/загрузить динамический массив


5-1132676787
OlegPFR
2005-11-22 19:26
2006.06.04
Компонент не сохраняет свойства


2-1147787175
!_SM_!
2006-05-16 17:46
2006.06.04
Массив компанент


6-1138812061
Volf_555
2006-02-01 19:41
2006.06.04
Как организовать чат через Интернет


2-1147708590
AlexanderMS
2006-05-15 19:56
2006.06.04
Юникод