Форум: "Потрепаться";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Внизтекстовый файл или 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c