Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
15-1147258855
ArtemESC
2006-05-10 15:00
2006.06.04
Предсказатели, "пророки" и маги!


8-1136479603
Zoom
2006-01-05 19:46
2006.06.04
Сравнение аудио файлов


15-1146952922
algorithm
2006-05-07 02:02
2006.06.04
алгоритм торрент-клиентского приложения


6-1138785891
DmitryDEMON
2006-02-01 12:24
2006.06.04
Скрипты WebSnap


15-1147356788
Петр
2006-05-11 18:13
2006.06.04
Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский