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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.035 c
1-1086270348
Alexis
2004-06-03 17:45
2004.06.20
Обращение к отдельным битам в DWORD


1-1086757602
sapsi
2004-06-09 09:06
2004.06.20
Попап меню


3-1085727739
Tomkat
2004-05-28 11:02
2004.06.20
Fastreport 2.52


14-1085986415
Unicode
2004-05-31 10:53
2004.06.20
PHP


6-1083211206
FatBase
2004-04-29 08:00
2004.06.20
Не приходят письма





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