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

Вниз

Запись Record в файл   Найти похожие ветки 

 
alik-os   (2004-04-06 09:35) [0]

имеется record в ввиде

TTheInfo = record
  FirstName: String;
  LastName:  String;
end;

или

TTheInfo = record
  FirstName: array[0..20] of Char;     или   string[20]
  LastName:  array[0..20] of Char;     или   string[20]
end;

Задача записать эту запись в файл.

В первом случае при записи Делфи ругается, что нет фиксированной длины строки.

Во втором случае меня не устраивает, что длина поле фиксированная.

Как можно сделать, что длина поле определялась динамически? может быть использовать Pchar? Пробовал и так, но у меня получается вместо символом мусор...

Если кто сталкивался с подобной проблемой при записи Record в файл, прошу откликнуться и помочь, желательно с примером.


 
Digitman ©   (2004-04-06 09:41) [1]


> Задача записать эту запись в файл


и все ? а дальше как собрался работать с этим файлом ?
ведь если "не мытьем - так катаньем" ты все же запишешь в файл N записей переменного размера, как ты намерен позиционироваться в файле для поиска/считывания опред.записи ? ты об этом подумал ?


 
alik-os   (2004-04-06 09:52) [2]

Вот и прошу помощи с примером...


 
Palladin ©   (2004-04-06 09:53) [3]

Наводка

f:file
l:integer
s:string

l:=length(s);
blockwrite(f,l,sizeof(l));
blockwrite(f,s[1],l);


> Если кто сталкивался с подобной проблемой

О какой проблеме идет речь? Задачу вижу, проблему нет.


 
Anatoly Podgoretsky ©   (2004-04-06 09:59) [4]

Никак, типизированые файлы имеют записи фиксированой длины


 
alik-os   (2004-04-06 10:00) [5]

спасибо за наводку, пробовал просто write а не blockwrite...
а проблема возникает, т.к. опыта еще маловато, к сожалению


 
Digitman ©   (2004-04-06 10:02) [6]


> alik-os   (06.04.04 09:52) [2]
> Вот и прошу помощи с примером...


примером чего ? вывода в файл записи с полями перем.длины ?

это не проблема, см., к примеру,  [3]

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


 
alik-os   (2004-04-06 10:04) [7]

как позиционировать? все запись при чтении считывать в массив, а необходимую запись найти в цикле по необходимому параметру


 
Digitman ©   (2004-04-06 10:16) [8]


> alik-os


все это замечательно, когда записей немного ..
а если их десятки или сотни тысяч ?


 
alik-os   (2004-04-06 10:18) [9]

Для Digitman: восклицать "в чем проблема?" или "это не проблема" все могут, если есть знания можно и поделиться, вот к примеру [3] взял да подсказал...

а много говорить да ничем не помочь - это многие так умеют, да и просто это фанфарство


 
alik-os   (2004-04-06 10:20) [10]

а мне много записей и не надо в пределах 500 штук мне будет достаточно...


 
Palladin ©   (2004-04-06 10:21) [11]


> alik-os   (06.04.04 10:04) [7]

Наводка примитивна, и указывает общий принцип записи данных в файл. Для случая приведенного Digitman, необходимо создавать таблицы размещения данных в файле. Индексы по определенному ключу. Или же воспользоватся давно написанным, использовать БД.


 
Digitman ©   (2004-04-06 10:23) [12]


> вот к примеру [3] взял да подсказал


а дальше ты своей головой уже думать должен !
организовав по образу и подобию уже последовательное считывание записанных таким образом записей


 
alik-os   (2004-04-06 10:29) [13]

сама система у меня написана и работает, позиционирует на необходимую запись...есть система поиска, но для текстового поля жестко закреплен размер. везде в учебниках, да и здесь писали, что типизированные файлы имеют только фиксированную длину. А если возникнет случай когда вводимая текстовая переменная будет больше чем предусмотренно? Вот в этом и есть вопрос - как с этим бороться?

Да можно использовать sql сервер - но это рационально для больших баз данных. В моем случае необходимо просто отвязаться от него.


 
Fay ©   (2004-04-06 10:33) [14]

>> как с этим бороться?
Предусматривать достаточно.


 
Плохиш   (2004-04-06 10:38) [15]

>alik-os   (06.04.04 10:29) [13]

> Да можно использовать sql сервер - но это рационально для
> больших баз данных. В моем случае необходимо просто отвязаться
> от него.

Есть достаточно много маленьких и локальных баз данных. Тот же Access, к примеру.


 
alik-os   (2004-04-06 10:38) [16]

да, это самый простой способ...


 
alik-os   (2004-04-06 10:42) [17]

> Есть достаточно много маленьких и локальных баз данных. Тот же Access, к примеру.

Можно и так (делал), но при переносе программы на другую машину, необходимо следить чтобы там был BDE или ODBC, следить за правильностью пути к "маленькой базе"...


 
Fay ©   (2004-04-06 10:48) [18]

А за правильностью пути к твоим файлам следить не надо?


 
Digitman ©   (2004-04-06 10:49) [19]


> можно использовать sql сервер - но это рационально для больших
> баз данных


никто тебя не заставляет использовать внешние промышленные сиквел-серверы

в конце-концов для многих серверных платформ есть их упрощенные внедряемые в кл.процесс движки ... можно воспользоваться и разного рода компонентами а-ля memory-table, clientdataset .. они унифицируют доступ к НД, предоставляя станд.интерфейс класса TDataSet для доступа к НД ... прежде чем изобретать велосипед с хранением НД в своем формате и считывании/работе с этим НД в памяти, следовало бы, наверно, изучить готовые алгоритмы



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

Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.049 c
14-1080808718
Rule
2004-04-01 12:38
2004.04.25
Пробелмма с установкой программ инсталлшеилда


1-1081159093
Checist [root]
2004-04-05 13:58
2004.04.25
Вытащить сылку из .lnk файла


14-1079467680
kamerad
2004-03-16 23:08
2004.04.25
Судьба Раскольникова в произведении Ф.М.Достоевского...


4-1077485242
Nick Denry
2004-02-23 00:27
2004.04.25
И снова Api. Суперклассинг.


1-1081330815
bhy
2004-04-07 13:40
2004.04.25
Как скрыть приложение с панели задач.





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