Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение значений из ini файла


ходячий вопросник ©   (2001-12-15 08:50:00) 

Доброе время суток...

ReadSectionValues: он читает значения ключей в секциях, или значения ключей в секциях вместе с ключами?

Если второе то как сотворить первое?...

Спасибо.


Digitman   (2001-12-17 15:01:00) [1]

Прошу прощения за искажение истины. ReadSectionValues() действительно читает строку "Key = Value" целиком. Для работы отдельно со значениями ключей можно воспользоваться объектом класса TMemo. Его метод Lines.Values() позаоляет получить значение ключа по его имени (т.е. TMemo реализует ф-цию простейшего парсера записей а-ля ключ INI-файла)


Дмитрий Д.   (2001-12-17 14:42:00) [2]

готовое решение:
//пример использования
//edit1.Text:=ReadIni("my.ini","section 1", "value1");

function ReadIni(FName, ASection, AString: string): string;
var
sIniFile: TIniFile;
sPath: string[60];
const
S = "не могу прочитать файл";
begin
GetDir(0, sPath);
sIniFile := TIniFile.Create(FName);
Result := sIniFile.ReadString(ASection, AString, S);
sIniFile.Free;
end;


Digitman   (2001-12-17 13:57:00) [3]

>ходячий вопросник

"Так вот мне считывает значения С ключами, а мне надо БЕЗ ключей."

структура INI-файла :

[section]

Key1 = Value1
Key2 = Value2
...
KeyN = ValueN

слева от знака "=" - имена ключей, справа - значения ключей. Не будет знака "=" - получишь как раз то, что ты получаешь (имена ключей в секции и их значения считываются вместе). А иначе как системе определить, где кончается имя ключа и начинается строковое представление его значения ?
При соблюдении формата INI-файла ф-ция ReadSectionValues() ДОЛЖНА прочитать в заранее подготовленный объект TSringList ТОЛЬКО значения ключей в указанной секции ! А для чтения списка ключей в секции предусмотрена совсем другая ф-ция - ReadSection(). И, если нет разделителей между ключами и значениями, ReadSection() вернет тебе тот же "бред", что и при вызове ReadSectionValues()


stasev   (2001-12-16 11:32:00) [4]

v samom nachale zabil :)

procedure TfmMainEdit.OpenLog(LogName: string);
var
i, j: integer;
TempString: string;
DataStrings: TStrings;
//////////////////
a potom vse ostalnoe


stasev   (2001-12-16 11:29:00) [5]

Ne znay kak vse,a ia delay tak:


procedure CorrectStrings(var Data: TMemo);
begin
i:= 0;
while i < Data.Lines.Count do begin
Data.Lines[i]:= Data.Lines.Values[Data.Lines.Names[i]];
Inc(i);
end;
end;

begin
try
LogFile := TIniFile.Create(LogName);
with LogFile as TIniFile do begin
ReadSectionValues("Section Name", Memo1.Lines);
CorrectStrings(Memo1.Lines);
except
MessageDlg("Error reading MAP file !", mtError, [mbOk], 0);
end;
end;


ходячий вопросник   (2001-12-15 17:47:00) [6]

to evgeg:
Вообще то обычно D5 Enterprise юзаю, редко D3.


evgeg   (2001-12-15 15:49:00) [7]

Applies to

TIniFile object

Declaration

procedure ReadSectionValues(const Section: string; Strings: TStrings);

Description

The ReadSectionValues method reads all the variables and their valuesof an entire section of an .INI file into a string object. You can then use the Values property of string and string list objects to access a specific string in the list of strings.

Это выдержка из help-а для Дельфи 2. В ней содержатся ответы на все твои вопросы.
А у тебя какая версия Дельфи?


Anatoly Podgoretsky   (2001-12-15 15:43:00) [8]

Значит очень плохо смотрел, достаточно одной табулетки


ходячий вопросник   (2001-12-15 15:14:00) [9]

Анатолий, так получается, что я эту волшебную кнопку не помню?!
Функцию я где по-ващему вытащил?
Наверняка перлопатил пол-хелпа!


Anatoly Podgoretsky   (2001-12-15 15:10:00) [10]

TStrings help (F1 ведь советовал же)
Names, Values

"Толя, миленький, шибко умным себя считаете?!" это потому что помню волшебную кнопку F1


ходячий вопросник   (2001-12-15 14:47:00) [11]

Просто глянь в мое цитирование HELP"a: там же черным по белому (в HELP"e) написано: значения ключей, а не строки секций???

Может другая функция есть?


ходячий вопросник   (2001-12-15 14:46:00) [12]

Eduard,что С КЛЮЧАМИ -говорю - третий день бьюсь, а БЕЗ КЛЮЧЕЙ???


Eduard   (2001-12-15 14:42:00) [13]

А я вот за 3 минуты попробовал, и сделал вывод, что ReadSectionValues читает значения вместе с ключами:)


ходячий вопросник   (2001-12-15 14:41:00) [14]

Мастера!

Чего на такой вопрос ответить не можете?


ходячий вопросник   (2001-12-15 12:32:00) [15]

evgeg в каком смысле?
Третий день пробую...


evgeg   (2001-12-15 12:24:00) [16]

А попробовать и посмотреть, что получится, слабо?


ходячий вопросник   (2001-12-15 12:18:00) [17]

Толя, миленький, шибко умным себя считаете?!

1. Мож я не так вопрос задал... Перезадам: Что именно читает ReadSectionValues???

2. Выдержка из хелпа:

Reads the values from all keys within a section of an INI file into a string list.

procedure ReadSectionValues(const Section: string; Strings: TStrings); override;

Поясняю: Читает значения ВСЕХ КЛЮЧЕЙ в секции из файла типа INI в String List.

Так вот мне считывает значения С ключами, а мне надо БЕЗ ключей.


Anatoly Podgoretsky   (2001-12-15 11:59:00) [18]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо