Работа с ini файлами
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).
Цитата:
Originally posted by Dissident
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).
Посмотри в хэлпе про TIniFile, там все просто.
Цитата:
Originally posted by Dissident
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).
Подскажите с помощью каких функций можно создать ini файл, ну и использовать его в дальнейшем (читать, записывать инфу).
А почему нельзя как обычный файл????! Чем это ini отличается?!
Цитата:
Originally posted by fanto
А почему нельзя как обычный файл????! Чем это ini отличается?!
А почему нельзя как обычный файл????! Чем это ini отличается?!
Можно, но зачем заново писать то, что уже и так написано.
Цитата:
Originally posted by Saris
Можно, но зачем заново писать то, что уже и так написано.
Можно, но зачем заново писать то, что уже и так написано.
А с помощью каких функций можно просто из файла читать, ну допустим до первого пробела?
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;
А я для себя черкнул класс на С++ для работы с форматом ini, работает и с файлами, и в памяти, понимает русские ключи, игнорируя регистр символов. В основе лежит ассоциативный массив (std::map) имя-секция, которые представляют собой ассоциативные массивы ключ-значение. Легко, просто и непринуждённо, хотя и не вполне эстетично смотрится.
[Counter]
Counter=4
Как можно прочитать отсюдова Counter что-бы он был как число, а не как символ, я тут пытался применить ReadInteger("Counter","Couner",0);
но ничего не вышло он похожу куда-то в буфер пишет, а не читает из файла. Подскажите чем можно прочитать...
Цитата:
Originally posted by Dissident
А как можно числа читать? Так же как символы, ну типа написано в файле:
[Counter]
Counter=4
А как можно числа читать? Так же как символы, ну типа написано в файле:
[Counter]
Counter=4
Очень просто. Читаешь его как строку (AnsiString), а потом переводишь в число функцией StrToInt().
int CounterValue;
CounterValue = StrToInt(Ini->Values["Counter"]);
[Counter]
Counter=4
Name=один
Left=5
Right=6
ну и т.д.
короче несколько велечин, можно считать указать на считывания конкретной величины, а то как я понимаю ini->Values["Counter"] обращается непосредственно к [Сounter] в целом.
MyCounter = Ini->Values["Counter"];
MyName = Ini->Values["Name"];
MyLeft = Ini->Values["Left"];
MyRight = Ini->Values["Right"];
[1]
one=1
Two=2
[2]
one=0
Two=100
Ну вобщем велечины с одинаковыми именами но находящиеся в разных отделениях (так что-ли назвать это можно). Вот можно каким-то образом обратиться именно к величине One находящейся после [2] и отдельно обратиться к One находящейся после [1]?
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), если такой есть - заменяеться, иначе создаеться
a=ini->ReadInteger("Counter","Counter",0);
а в файл допустим содержит
[Counter]
Counter=2
то переменная а у меня будет рано 0, в чем может быть проблемма?
А ты проверял - ИНИ то нормально загружаеться у тебя в объект. Покажи строки инициализации
Цитата:
Originally posted by Dissident
...а у меня будет рано 0 ...
...а у меня будет рано 0 ...
Проверь существует ли ИНИ.
C ini разобрался вобщем, все ок работает, спасибо. Появилась другая проблемма, немогу никак найти функцию которая возвращает Index выделенной строчке в ListBox-е, может подскажите чего-нибудь?
Цитата:
Originally posted by Dissident
C ini разобрался вобщем, все ок работает, спасибо. Появилась другая проблемма, немогу никак найти функцию которая возвращает Index выделенной строчке в ListBox-е, может подскажите чего-нибудь?
C ini разобрался вобщем, все ок работает, спасибо. Появилась другая проблемма, немогу никак найти функцию которая возвращает Index выделенной строчке в ListBox-е, может подскажите чего-нибудь?
__property int ItemIndex = {read=GetItemIndex, write=SetItemIndex, nodefault};
Считывает номер выделеной строки, или устанавливает выделение на строку.
фрагмент кода:
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);
}
}
}
}
а правильно
ini = new TIniFile("C:\\temp.ini");