Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.49 MB
Время: 0.008 c
3-91211
supersan
2003-04-09 08:37
2003.04.28
Правильное соединение с БД Interbase?


14-91453
Piero
2003-04-11 19:19
2003.04.28
Дополнительная математика в Delphi


1-91378
sashas
2003-04-16 12:29
2003.04.28
Помоготе разобраться в иерархии.


3-91221
Jao
2003-04-10 08:45
2003.04.28
День добрый. Комментарии в SQL-запросе при конекте через ADO


3-91190
denary
2003-04-10 02:18
2003.04.28
как программно создать пустой файл Excel?





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