Форум: "Начинающим";
Текущий архив: 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