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

Вниз

как правильно считать/записать такой типизированный файл?   Найти похожие ветки 

 
iat   (2004-06-07 18:57) [0]

Имеется такая конструкция

TMyRec = record
 p: PChar;
 s: string[255];
end;

...
var
 F: file of TMyRec;
 a: TMyRec;
begin
 AssignFile(F, FileName);
 Reset(F);
...
// со строкой s все ясно, но что делать с р.
// Как узнать сколько ей памяти надо выделить

end;


 
begin...end ©   (2004-06-07 19:01) [1]

А зачем записывать указатель?


 
iat   (2004-06-07 19:09) [2]

Не указатель, а содержимое по адресу - строку с #0 концом.

строка s не подходит, т.к. нужно записывать различные длины строк (от 1 до нескольких кил). Конечно, можно на все случаи жизни задать в s максимально возможную длину, но при этом теряется гибкость и впустую тратится место.


 
Тимохов ©   (2004-06-07 19:10) [3]


> Как узнать сколько ей памяти надо выделить

зачем указывать? и так понятно - 4 байта.


 
begin...end ©   (2004-06-07 19:10) [4]

А просто String нельзя?


 
begin...end ©   (2004-06-07 19:13) [5]


> Не указатель, а содержимое по адресу - строку с #0 концом.


A PChar is a pointer to a null-terminated string of characters of the type Char.


 
Тимохов ©   (2004-06-07 19:15) [6]

ручками все делайте, ручками.
явно записать p, явно s.
файл не типизированный.


 
Anatoly Podgoretsky ©   (2004-06-07 19:15) [7]

У тебя именно указатель.
Во вторых речь про различную длину несовместима типизироваными файлами.
В третьих тебе нужен просто текстовый файл.


 
iat   (2004-06-07 19:22) [8]

>А просто String нельзя?
нет, компилятор ругается, что
"Type TMyRec needs finalization - not allowed in file type"


 
iat   (2004-06-07 19:31) [9]

>Тимохов ©   (07.06.04 19:15) [6]

хорошо, изменим условие

TMyRec = record
i: integer;
p: PChar;
s: string[255];
end;

теперь это не простой текстовый файл, а типизированный.

Вообще меня интересует сама возможность записи/чтения подобных конструкций со строками переменной длины (в отличии от string[255]).


 
GuAV ©   (2004-06-07 19:34) [10]


> типизированный


> со строками переменной длины

не совместимые вещи

ЗЫ - я бы использовал НЕтипизированный


 
Тимохов ©   (2004-06-07 19:35) [11]


> Вообще меня интересует сама возможность записи/чтения подобных
> конструкций со строками переменной длины (в отличии от string[255]).

да полно методов.
пользуйтесь нетипизированныйми файлами.
пишите длину,
затем строку.
также читаете.
пользуетесь blockread/blockwrite


 
Anatoly Podgoretsky ©   (2004-06-07 19:36) [12]

А что то изменилось после добавления еще одного члена в запись, все равно типизированый файл нельзя, получишь туже ошибку not allowed in file type


 
Подкрадуха ©   (2004-06-07 23:01) [13]

http://delphimaster.net/view/9-1085024752/
смотри [30] там
думаю, подойдет тебе


 
sniknik ©   (2004-06-08 00:07) [14]

> Вообще меня интересует сама возможность записи/чтения подобных конструкций со строками переменной длины ...
такая конструкция уже есть! и называется она текстовый файл, со всеми его недостатками. ну напиши подобие с #0 терминатед, и с обязательным двустрочием/...или сколько в структуре надо, и получиш в наследство все недостатки текстового файла, плюс будет гораздо медленнее ...
забей и пользуйся стандартным.

(типизированный файл только для данных с определенной структурой - длинной. в твоем случае не продходит)



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

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

Наверх




Память: 0.5 MB
Время: 0.022 c
1-1086669113
Анатолий
2004-06-08 08:31
2004.06.20
BDE снесли без унинстала, как его удалить из реестра?


3-1085676104
JurMax
2004-05-27 20:41
2004.06.20
Компоненты для чтения DXF формата


8-1081104441
Xavier
2004-04-04 22:47
2004.06.20
Обработа цифрового звукового сигнала (сдвиг частоты).


3-1085742020
Alex_xxx
2004-05-28 15:00
2004.06.20
слить данные из 2 таблиц


3-1085637072
Draught
2004-05-27 09:51
2004.06.20
SQL запрос на вывод системной даты