Главная страница
    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.064 c
4-1142414062
Std
2006-03-15 12:14
2006.06.04
Выполнение программы во время выключения или перезагрузки


15-1146987805
Nic
2006-05-07 11:43
2006.06.04
Никто не программировал MathCad?


2-1147859956
KyRo
2006-05-17 13:59
2006.06.04
Свойство фала


4-1142007288
Arazel
2006-03-10 19:14
2006.06.04
WinApi > PopupMenu: Как добавить панель сбоку?


15-1147191434
alex-drob
2006-05-09 20:17
2006.06.04
Прокси с помощью IdMappedPortTCP1





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский