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

Вниз

текстовый файл или ini-файл   Найти похожие ветки 

 
Переяслов Григорий ©   (2003-04-09 10:26) [0]

Уважаемые мастера. Хочу посоветоваться.
Передо мной стоит задача хранения данных в некотором текстовом файле. Данные в нем будут в виде таблицы (количество столбцов ~40, количество строк ~300). Есть два варианта организации: текстовый файл в виде таблицы или ini-файл, в котором разделы - строки, а параметры - столбцы. Данные преимущественно целочисленные и TDateTime. Какой вариант по вашему мнению предпочтительнее, во первых, по быстодействию, и, во вторых, по удобству использования. Базу данных использовать не хочется.


 
DiamondShark ©   (2003-04-09 10:34) [1]

Можно посоветовать XML.
1) Текстовый, человекочитаемый формат
2) Структурированный, с возможностью контроля структуры и типов
3) Наличие объектов для создания/разбора/навигации


 
Дмитрий К.К. ©   (2003-04-09 11:00) [2]

У ini-файла известные ограничения на размер.


 
DiamondShark ©   (2003-04-09 11:08) [3]


> Дмитрий К.К. © (09.04.03 11:00)
> У ini-файла известные ограничения на размер.


Да, есть немножко.
Если не ошибаюсь, то файл ограничен 2 Гб в FAT32 и размером диска в NTFS.


 
Карелин Артем ©   (2003-04-09 11:10) [4]

Если в старых виндах сделать win.ini больше 64 кило, то вынь копыта откинет.


 
Переяслов Григорий ©   (2003-04-09 11:12) [5]

А по быстродействию разница есть?


 
Карелин Артем ©   (2003-04-09 11:13) [6]

На нормальном компе работа с такими файлами должна занять не более секунды.


 
Palladin ©   (2003-04-09 11:13) [7]


> DiamondShark © (09.04.03 11:08)

максимум 64 кб...


 
Danilka ©   (2003-04-09 11:25) [8]

вообще-то вариантов куча великая.
можно, например, сделать вот-так:

type
TProbaPera = record
x,y:integer;
s:string[50];
z:boolean;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
pp: TProbaPera;
fpp: file of TProbaPera;
begin
pp.x:=1;
pp.y:=-22;
pp.s:="Вот-такая вот ерунда!";
pp.z:=true;
AssignFile(fpp,"proba.xxx");
Rewrite(fpp);
Write(fpp,pp);
pp.x:=-14666546;
pp.y:=0;
pp.s:="Еще более ерундятее"#13#10"ерунда!";
pp.z:=false;
Write(fpp,pp);
CloseFile(fpp);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
vpp: array of TProbaPera;
fpp: file of TProbaPera;
i, length: integer;
begin
AssignFile(fpp,"proba.xxx");
Reset(fpp);
length:=FileSize(fpp);
SetLength(vpp, length);
for i:=0 to length-1 do Read(fpp,vpp[i]);
CloseFile(fpp);
end;


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


 
Max Zyuzin ©   (2003-04-09 11:28) [9]

Согласен с Danilka © (09.04.03 11:25) лучше использовать типизированые файлы, есди ты конечно не собираешься править из прямо в far(notepad,....)


 
Переяслов Григорий ©   (2003-04-09 11:35) [10]

Спасибо всем. Сейчас попробовал создать ini-файл с заданными в вопросе параметрами, получился 253 кБайт, но чем больше записываешь, тем больше тормозило


 
ShaggyDoc   (2003-04-09 12:26) [11]

Мне приходилось использовать и то, и другое.
"База данных" в INI нужна была из-за других программ. Работает, конечно, медленнее, но, для небольших объемов приемлемо. Размер файла не имеет значения при использовании своих классов. Например, всегда применяю agIniFile - нет ограничений и быстрее.

Для текстовой таблицы лучше всего использовать TkbmMemTable. Преимущества - обычный текст, но свойства tDataSet со всеми приятными последствиями.


 
DiamondShark ©   (2003-04-09 12:50) [12]


> Palladin © (09.04.03 11:13)
> максимум 64 кб...


Есть анекдот такой.
Был мужик в командировке в Кисловодске. Приехал, рассказывает: "Вот сразу как приехал -- пошёл на море и искупался!". Ему говорят, что в Кисловодске нет моря, а он: "Ну я сначала не знал, что в Кисловодске нет моря, пошёл и искупался".

Я, наверное, как тот мужик -- не знал, что "максимум 64 кб", поэтому работл иногда с файлами по сто с хвостиком кб.
Как теперь жить?


 
NickBat ©   (2003-04-09 12:55) [13]

> Palladin © (09.04.03 11:13)
> максимум 64 кб...

Да?? c:\winnt\system32\esentprf.ini - 462281
Если нет НТ можно в 98 поискать и найти.



 
malkolinge(fp)   (2003-04-09 12:58) [14]


> но свойства tDataSet со всеми приятными последствиями.

Например тащить БДЕ :)


 
ShaggyDoc   (2003-04-09 13:08) [15]

>malkolinge(fp) (09.04.03 12:58)
>Например тащить БДЕ :)
kbmMemTable не требует ни BDE, ни чего-нибудь подобного. Тем и хороша. Кстати, в своем ТЕКСТОВОМ файле может хранить любые данные, включая графику. Даже транзакции есть. При желании текстовый файл можно заменить на двоичный.

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


 
Игорь Шевченко ©   (2003-04-09 13:49) [16]

DiamondShark © (09.04.03 12:50)

Была написана небольшая программа:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
begin
Screen.Cursor := crHourGlass;
try
with TIniFile.Create("aaaatest.ini") do
try
for I:=0 to 20000 do begin
WriteString("test", Format("value%d", [I]), Format("%d", [I]));
Application.ProcessMessages();
end;
finally
Free();
end;
finally
Screen.Cursor := crDefault;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Key : String;
begin
with TIniFile.Create("aaaatest.ini") do
try
Key := Format("value%s", [Edit1.Text]);
Label1.Caption := ReadString("test", Key, "***");
finally
Free();
end;
end;



Под NT работает на ура, ini-file создается 337 с лишним кило, под потребительскими версиями windows, натурально выдает ошибку: Unable to write to ini-file.

:-)



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

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

Наверх




Память: 0.51 MB
Время: 0.022 c
14-91465
anbezr
2003-04-09 15:23
2003.04.28
Как искать по этому форуму


3-91186
Delphinium
2003-04-09 21:29
2003.04.28
Пароль в Access


14-91469
Top Gun
2003-03-31 00:19
2003.04.28
Обработка сообщений в Windows


14-91458
Жук
2003-04-08 15:52
2003.04.28
[503] Service Unavailable


14-91516
BEARD
2003-04-10 22:27
2003.04.28
Просьба к Мерлину...