Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение и запись INI-файла 
V
    Опции темы
Vladimir_K
Дата 6.1.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Подскажите, как правильно читать и записывать данные в INI-файлы.
Использую в своем модуле U_MA (имя формы F_MA) такую процедуру чтения:
Код

procedure TGraph.FormCreate(Sender: TObject);
const CNOTFOUND = -1;
var sAppPath: String;
    iniSettings: TINIFile;
    liValue: Longint;
begin
 sAppPath:= ExtractFilePath(Application.ExeName);          //Получаем путь к EXE - файлу приложения
 iniSettings:= TINIFile.Create(sAppPath + 'SET_MA.INI');  //Создаем объект TINIFile
 try
  liValue:= iniSettings.ReadInteger(Name,'Col_MA1',CNOTFOUND);//Пытаемся считать значение
  if liValue = CNOTFOUND then                                          //Проверяем, считано ли значение
   begin
                  // Свойства в  INI-файле не найдены
   end
   else
    begin
     MA_YN1:=iniSettings.ReadBool(Name,'ON_OF_MA1',MA_YN1);// Данные
    end;
 finally
  iniSettings.Free;
 end;
end;

Содержимое INI-файла:

[F_MA]
ON_OF_MA1=1
ON_OF_MA2=0
ON_OF_MA3=0
ON_OF_MA4=0
ON_OF_MA5=0
ON_OF_MA6=0
ON_OF_MA7=0
ON_OF_MA8=0
ON_OF_MA9=0
ON_OF_MA10=0

Все работает нормально. Но когда пытаюсь прочитать данные из этого INI-файла, но из другого модуля - ничего не выходит: переменная liValue = -1 и данные не читаются.
Может быть надо как-то указывать адрес или еще что... Подскажите, пожалуйста!

Это сообщение отредактировал(а) Vladimir_K - 6.1.2007, 20:26
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Guedda
Дата 6.1.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78





--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Romikgy
Дата 6.1.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Vladimir_K @  6.1.2007,  19:24 Найти цитируемый пост)
sAppPath + 'SET_MA.INI'

что дает эта сумма?
Цитата(Vladimir_K @  6.1.2007,  19:24 Найти цитируемый пост)
iniSettings

что здесь?
Цитата(Vladimir_K @  6.1.2007,  19:24 Найти цитируемый пост)
Col_MA1

и чет этого не видно в этом
Цитата(Vladimir_K @  6.1.2007,  19:24 Найти цитируемый пост)
[F_MA]
ON_OF_MA1=1
ON_OF_MA2=0
ON_OF_MA3=0
ON_OF_MA4=0
ON_OF_MA5=0
ON_OF_MA6=0
ON_OF_MA7=0
ON_OF_MA8=0
ON_OF_MA9=0
ON_OF_MA10=0

или это не полный список?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Vladimir_K
Дата 6.1.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Эта функция не читает мой INI-файл
Код

function ReadIniDataBool(Section, Ident : string; Default : boolean = false) : boolean;
begin
  IniFile := TIniFile.Create(Path + 'SET_MA.INI');
  ON_OF_MA1 := IniFile.ReadBool(Section, 'ON_OF_MA1', ON_OF_MA1);
  IniFile.Free;
end;

Как указать адрес INI-файла, откуда нужно читать данные?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Sunvas
Дата 6.1.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Vladimir_K @  6.1.2007,  23:38 Найти цитируемый пост)
Как указать адрес INI-файла, откуда нужно читать данные?

Полным путем к твоему файлу.

Добавлено @ 23:45 
Возможно в сумме
Цитата(Vladimir_K @  6.1.2007,  23:38 Найти цитируемый пост)
Path + 'SET_MA.INI'

ты пропустил "/" поэтому и не читается.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Vladimir_K
Дата 6.1.2007, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(Romikgy @  6.1.2007,  22:55 Найти цитируемый пост)
sAppPath + 'SET_MA.INI'

что дает эта сумма?

Не знаю, этот код я нашел в Инете, частично работает...


Цитата(Romikgy @  6.1.2007,  22:55 Найти цитируемый пост)
iniSettings

что здесь?

iniSettings: TINIFile;

Отсюда:
[F_MA]
ON_OF_MA1=1
ON_OF_MA2=0
ON_OF_MA3=0
ON_OF_MA4=0
ON_OF_MA5=0
ON_OF_MA6=0
ON_OF_MA7=0
ON_OF_MA8=0
ON_OF_MA9=0
ON_OF_MA10=0

берутся данные, и записываются в переменные MA_YN1...MA_YN10(см. код в самом начале):

Код

MA_YN1:=iniSettings.ReadBool(Name,'ON_OF_MA1',MA_YN1);// Данные


'Col_MA1' - это тоже данные в INI-файле, я использую эту строку
Код

liValue:= iniSettings.ReadInteger(Name,'Col_MA1',CNOTFOUND);

для проверки, что INI-файл не пустой.

Это сообщение отредактировал(а) Vladimir_K - 7.1.2007, 00:29
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Sunvas
Дата 6.1.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Кажется нашел ошибку, почему из другого модуля не читается:
Цитата(Vladimir_K @  6.1.2007,  20:24 Найти цитируемый пост)
liValue:= iniSettings.ReadInteger(Name,'Col_MA1',CNOTFOUND);

Ведь глобальная перемення name в разных модулях разная.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Vladimir_K
Дата 6.1.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(Sunvas @  6.1.2007,  23:44 Найти цитируемый пост)
Как указать адрес INI-файла, откуда нужно читать данные?

Полным путем к твоему файлу.

Указывал и полный путь - не работает.

Добавлено @ 23:53 
Цитата(Sunvas @  6.1.2007,  23:49 Найти цитируемый пост)
liValue:= iniSettings.ReadInteger(Name,'Col_MA1',CNOTFOUND);

Ведь глобальная перемення name в разных модулях разная. 

Но эта переменная явно не объявлена. Как быть?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Sunvas
Дата 6.1.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Vladimir_K @  6.1.2007,  23:38 Найти цитируемый пост)
Эта функция не читает мой INI-файл

Это какая-то полу-функция. Ведь переменные IniFile, ON_OF_MA1 в ней не прописаны.

Добавлено @ 23:55 
Цитата(Vladimir_K @  6.1.2007,  23:50 Найти цитируемый пост)
Но эта переменная явно не объявлена

Это переменная относиться к класу формы. Т.е. чтобы она стала глобально пропиши перед ней из какого класса она берется.

Добавлено @ 23:56 
Код

TGraph.name



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Vladimir_K
Дата 7.1.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Вот так?
Код

MA_YN1:=iniSettings.ReadBool(TGraph.name,'ON_OF_MA1',MA_YN1);

вылетает ошибка:
Method identifier expected
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
VICTAR
Дата 7.1.2007, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Цитата(Sunvas @  6.1.2007,  23:44 Найти цитируемый пост)
ты пропустил "/" поэтому и не читается. 

ну уж тоды не "/", а "\"

PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(VICTAR @  7.1.2007,  00:28 Найти цитируемый пост)
ну уж тоды не "/", а "\"

Точно. Вот что делает с людьми Интернет и постоянное написание длинных ЮРЛов..


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Vladimir_K
Дата 7.1.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(Sunvas @  7.1.2007,  00:24 Найти цитируемый пост)
Я тебе за самый первый код говорю.

Код

liValue:= iniSettings.ReadInteger(TF_MA.Name,'Col_MA1',CNOTFOUND);

Так - ошибка при компиляции;

Код

liValue:= iniSettings.ReadInteger(F_MA.Name,'Col_MA1',CNOTFOUND);

Так - во время выполнения программы, при обработке данной строки.

Добавлено @ 00:40 
Да у меня вообще без слэша, и работает, но только в одном модуле...
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
VICTAR
Дата 7.1.2007, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



А что непонятного? Для твоего IniFile
 
Код

MA_YN1:=iniSettings.ReadBool('F_MA','ON_OF_MA1',MA_YN1);

Или я что-то не понял?
PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Vladimir_K @  7.1.2007,  00:38 Найти цитируемый пост)
liValue:= iniSettings.ReadInteger(F_MA.Name,'Col_MA1',CNOTFOUND);

А ты так сделай:
Код

liValue:= iniSettings.ReadInteger(TGraph.name,'Col_MA1',CNOTFOUND);



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.