Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с ini файлами

1.3K
16 ноября 2003 года
Dissident
73 / / 05.03.2003
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).
860
17 ноября 2003 года
Abell2000
138 / / 15.01.2003
Цитата:
Originally posted by Dissident
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).


Посмотри в хэлпе про TIniFile, там все просто.

314
17 ноября 2003 года
fanto
374 / / 15.02.2003
Цитата:
Originally posted by Dissident
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).


А почему нельзя как обычный файл????! Чем это ini отличается?!

348
17 ноября 2003 года
Saris
389 / / 14.03.2003
Цитата:
Originally posted by fanto

А почему нельзя как обычный файл????! Чем это ini отличается?!


Можно, но зачем заново писать то, что уже и так написано.

1.3K
17 ноября 2003 года
Dissident
73 / / 05.03.2003
Цитата:
Originally posted by Saris

Можно, но зачем заново писать то, что уже и так написано.



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

317
17 ноября 2003 года
Relax
573 / / 20.09.2000
в классе TStringList есть свойство Values, которое нужно именно для этого, читается значение после знака '=', писать типа так:

TStringList *Ini = new TStringList();
Ini->LoadFromFile("PrinterSpy.ini");
Left = Ini->Values["MainLeft"];
...
delete Ini;

ну и обратно:

TStringList *Ini = new TStringList();
Ini->Values["MainLeft"] = Left;
...
Ini->SaveToFile("PrinterSpy.ini");
delete Ini;
310
18 ноября 2003 года
fellow
853 / / 17.03.2003
А я для себя черкнул класс на С++ для работы с форматом ini, работает и с файлами, и в памяти, понимает русские ключи, игнорируя регистр символов. В основе лежит ассоциативный массив (std::map) имя-секция, которые представляют собой ассоциативные массивы ключ-значение. Легко, просто и непринуждённо, хотя и не вполне эстетично смотрится.
1.3K
18 ноября 2003 года
Dissident
73 / / 05.03.2003
А как можно числа читать? Так же как символы, ну типа написано в файле:

[Counter]
Counter=4

Как можно прочитать отсюдова Counter что-бы он был как число, а не как символ, я тут пытался применить ReadInteger("Counter","Couner",0);
но ничего не вышло он похожу куда-то в буфер пишет, а не читает из файла. Подскажите чем можно прочитать...
415
18 ноября 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by Dissident
А как можно числа читать? Так же как символы, ну типа написано в файле:

[Counter]
Counter=4



Очень просто. Читаешь его как строку (AnsiString), а потом переводишь в число функцией StrToInt().

int CounterValue;
CounterValue = StrToInt(Ini->Values["Counter"]);

1.3K
18 ноября 2003 года
Dissident
73 / / 05.03.2003
Ок, спасибо. еще такой вопрос, а если в файле будет например:

[Counter]
Counter=4
Name=один
Left=5
Right=6
ну и т.д.
короче несколько велечин, можно считать указать на считывания конкретной величины, а то как я понимаю ini->Values["Counter"] обращается непосредственно к [Сounter] в целом.
415
18 ноября 2003 года
SLA
274 / / 08.08.2003
Нет. Он ищет строку вида "Counter=Чтото"

MyCounter = Ini->Values["Counter"];
MyName = Ini->Values["Name"];
MyLeft = Ini->Values["Left"];
MyRight = Ini->Values["Right"];
1.3K
19 ноября 2003 года
Dissident
73 / / 05.03.2003
А нету функций, которые могли бы указывать на величину именно после определенной скобки, что-бы файл мог выглядить следующим образом:

[1]
one=1
Two=2

[2]
one=0
Two=100


Ну вобщем велечины с одинаковыми именами но находящиеся в разных отделениях (так что-ли назвать это можно). Вот можно каким-то образом обратиться именно к величине One находящейся после [2] и отдельно обратиться к One находящейся после [1]?
293
19 ноября 2003 года
SEDEGOFF
586 / / 06.10.2002
Да вы почитайте ХЕЛП - там все написано

TIniFile *ini;
ini = new TIniFile("C:\open.ini");
Top = ini->ReadInteger( "Form", "Top", 100 );
Left = ini->ReadInteger( "Form", "Left", 100 );
Caption = ini->ReadString( "Form", "Caption",
"Default Caption" );
delete ini;
первый параметр - имя секции, то есть это и есть [Form]
второй параметр - имя параметра, то есть Top
третий - значение в случе ошибки считываения - то есть если запросих несуществующий раздел или параметр, то функция тебе это вернет.

пишеться в ИНИ функциями начинающимися с Write (WriteString), если такой есть - заменяеться, иначе создаеться
1.3K
19 ноября 2003 года
Dissident
73 / / 05.03.2003
Почему-то всегда при использвание ReadInteger возвращается значения которая я прописываю для случая ошибки т.е. если я пишу
a=ini->ReadInteger("Counter","Counter",0);
а в файл допустим содержит

[Counter]
Counter=2

то переменная а у меня будет рано 0, в чем может быть проблемма?
293
20 ноября 2003 года
SEDEGOFF
586 / / 06.10.2002
А ты проверял - ИНИ то нормально загружаеться у тебя в объект. Покажи строки инициализации
357
20 ноября 2003 года
Тимофей
112 / / 20.02.2000
Цитата:
Originally posted by Dissident

...а у меня будет рано 0 ...



Проверь существует ли ИНИ.

1.3K
20 ноября 2003 года
Dissident
73 / / 05.03.2003
C ini разобрался вобщем, все ок работает, спасибо. Появилась другая проблемма, немогу никак найти функцию которая возвращает Index выделенной строчке в ListBox-е, может подскажите чего-нибудь?
451
20 ноября 2003 года
Gerret
51 / / 20.05.2000
Цитата:
Originally posted by Dissident
C ini разобрался вобщем, все ок работает, спасибо. Появилась другая проблемма, немогу никак найти функцию которая возвращает Index выделенной строчке в ListBox-е, может подскажите чего-нибудь?



__property int ItemIndex = {read=GetItemIndex, write=SetItemIndex, nodefault};

Считывает номер выделеной строки, или устанавливает выделение на строку.

1.3K
22 ноября 2003 года
Dissident
73 / / 05.03.2003
Как создать инифайл для записи, почему у меня не создается файл C:\temp.ini
фрагмент кода:
int result = Application->MessageBox("Вы уверены, что хотите удалить выбранного поставщика?","Внимание!", MB_YESNO | MB_ICONEXCLAMATION);
if (result == IDYES)
{
data_inf data;
data.index=ListBox_Post->ItemIndex;
data.a=ListBox_Post->Items->Strings[data.index];
TIniFile *ini, *ini_out;
ini = new TIniFile("C:/temp.ini");
ini_out = new TIniFile(Label_temp->Caption+"/"+OpenDialog_Post->FileName);
data.Counter=-ini_out->ReadInteger("Counter","Counter",0);
for (data.i=0;data.i<data.Counter;data.i++)
{
data.istr=data.conv(data.i);
if (ini_out->ReadString("user"+data.istr,"Post","пусто")==data.a)
{
data.k=1;
} else
{
if (data.k==1)
{
data.name=ini_out->ReadString("user"+data.istr,"Name","пусто");
data.kod=ini_out->ReadString("user"+data.istr,"Kod","пусто");
data.coststr=ini_out->ReadString("user"+data.istr,"Cost","пусто");
data.ed=ini_out->ReadString("user"+data.istr,"Ed","пусто");
data.postav=ini_out->ReadString("user"+data.istr,"Post","пусто");
data.kolstr=ini_out->ReadString("user"+data.istr,"Kol","пусто");

ini->WriteInteger("Counter","Counter",--data.Counter);
ini->WriteString("user"+data.istr-1,"Name",data.name);
ini->WriteString("user"+data.istr-1,"Post",data.postav);
ini->WriteString("user"+data.istr-1,"Ed",data.ed);
ini->WriteString("user"+data.istr-1,"Kol",data.kolstr);
ini->WriteString("user"+data.istr-1,"Cost",data.coststr);
ini->WriteString("user"+data.istr-1,"Kod",data.kod);
} else
{
data.name=ini_out->ReadString("user"+data.istr,"Name","пусто");
data.kod=ini_out->ReadString("user"+data.istr,"Kod","пусто");
data.coststr=ini_out->ReadString("user"+data.istr,"Cost","пусто");
data.ed=ini_out->ReadString("user"+data.istr,"Ed","пусто");
data.postav=ini_out->ReadString("user"+data.istr,"Post","пусто");
data.kolstr=ini_out->ReadString("user"+data.istr,"Kol","пусто");

ini->WriteInteger("Counter","Counter",--data.Counter);
ini->WriteString("user"+data.istr,"Name",data.name);
ini->WriteString("user"+data.istr,"Post",data.postav);
ini->WriteString("user"+data.istr,"Ed",data.ed);
ini->WriteString("user"+data.istr,"Kol",data.kolstr);
ini->WriteString("user"+data.istr,"Cost",data.coststr);
ini->WriteString("user"+data.istr,"Kod",data.kod);
}
}
}
}
293
24 ноября 2003 года
SEDEGOFF
586 / / 06.10.2002
Вот тебе и ошибка ini = new TIniFile("C:/temp.ini");

а правильно
ini = new TIniFile("C:\\temp.ini");
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог