Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 15:48   #1
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию Как из ini файла заполнить ComboBox?

Здравствуйте, уважаемые форумчане. По работе возникла необходимость написать небольшую программку. Не могли бы вы подсказать мне, как написать следующие процедуры:
1. Имеется файл, в нем такие значения
переменная=значение
переменная=значение
......
Собственно хочется процедуру, которая засунет список переменных в ComboBox ( именно самих переменных, без значений ).
2. Второе, необходима процедура, которая будет искать в этом файлике заданную переменную, и выдавать ее значение.
3. Ну и последнее, необходима процедурка, которая будет брать 2 переменных, вводимые юзером, ставить между ними знак "=", и дописывать в конец моего файлика.
Все, заранее, огромный респект, тому, кто выручит
alexusankov вне форума Ответить с цитированием
Старый 04.01.2011, 16:32   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Для ответа на все эти вопросы требуется ЭЛЕМЕНТАРНОЕ знание работы с ini-файлами.
Вот, собственно, вся инфа по ним и все вопросы отпадут...
Код:
//Процедуры чтения параметров из ini-файла:
function ReadString(const Section, Ident, Default: string): string;
function ReadInteger(const Section, Ident: string; Default: Longint): Longint;
function ReadBool(const Section, Ident: string; Default: Boolean): Boolean; 
function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadFloat(const Section, Name: string; Default: Double): Double;
function ReadBinaryStream(const Section, Name: string; Value: TStream): Integer; 

//Процедуры записи параметров в ini-файл:
procedure WriteString(const Section, Ident, Value: string);
procedure WriteInteger(const Section, Ident: string; Value: Longint);
procedure WriteBool(const Section, Ident: string; Value: Boolean); 
procedure WriteDate(const Section, Name: string; Value: TDateTime);
procedure WriteTime(const Section, Name: string; Value: TDateTime); 
procedure WriteDateTime(const Section, Name: string; Value: TDateTime);
procedure WriteFloat(const Section, Name: string; Value: Double); 
procedure WriteBinaryStream(const Section, Name: string;Value: TStream);  
--------------------------------------------------------------------------------
 //Основные процедуры и функции для работы с ini-файлами
 
 //Существует ли секция:
function SectionExists(const Section: string): Boolean;
//Чтение всей секции:
procedure ReadSection(const Section: string; Strings: TStrings);
//Чтение всего файла (все секции записываются в Strings):
procedure ReadSections(Strings: TStrings);
//Чтение всех значений в заданной секции:
procedure ReadSectionValues(const Section: string; Strings: TStrings);
//Удаление заданной секции со всеми её значениями:
procedure EraseSection(const Section: string);
//Удаление определённого ключа (и его значения) в секции:
procedure DeleteKey(const Section, Ident: String);
//Существует ли заданный ключ в указанной секции:
function ValueExists(const Section, Ident: string): Boolean;
_SERGEYX_ вне форума Ответить с цитированием
Старый 04.01.2011, 17:15   #3
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию ////////

Сорри, неосиляю))
Подалуйста, можно в примере готовых 3 процедуры, что я спрашивал. Они банальны в принципе
alexusankov вне форума Ответить с цитированием
Старый 04.01.2011, 17:42   #4
Slippy
Пользователь
 
Аватар для Slippy
 
Регистрация: 29.12.2010
Сообщений: 55
По умолчанию

Как вариант, можно загнать файл в TStringList

Код:
StringList.LoadFromFile('filename');
И если текст представлен в виде "переменная=значение", то StringList.Names[i] вернёт имя I-переменной, а StringList.ValueFromIndex[i] вернёт значение I-переменной. Остаётся только бегать по элементом стринг листа в цикле и записывать / читать что нужно и куда нужно =)

з.ы. хотя по сути это извращение, если работаете именно с ini-файлом, т.к. для него есть свой набор функций (читайте выше)
Теория – это когда все известно, но ничего не работает. Практика – это когда все работает, но никто не знает почему. Мы объединяем теорию и практику: ничего не работает и никто не знает почему ©
Slippy вне форума Ответить с цитированием
Старый 04.01.2011, 17:42   #5
Slippy
Пользователь
 
Аватар для Slippy
 
Регистрация: 29.12.2010
Сообщений: 55
По умолчанию

Как вариант, можно загнать файл в TStringList

Код:
StringList.LoadFromFile('filename');
И если текст представлен в виде "переменная=значение", то StringList.Names[i] вернёт имя I-переменной, а StringList.ValueFromIndex[i] вернёт значение I-переменной. Остаётся только бегать по элементом стринг листа в цикле и записывать / читать что нужно и куда нужно =)

з.ы. хотя по сути это извращение, если работаете именно с ini-файлом, т.к. для него есть свой набор функций (читайте выше)
Теория – это когда все известно, но ничего не работает. Практика – это когда все работает, но никто не знает почему. Мы объединяем теорию и практику: ничего не работает и никто не знает почему ©
Slippy вне форума Ответить с цитированием
Старый 04.01.2011, 18:03   #6
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию ////////////

Я пытался осилить работу с INI, но что то, кодинг это не мое. Просто безысходная нужда заставила писать меня эту программулину.
Забыл упомянуть -
переменная=значение
всегда разные. и переменные и значения. заранее узнать их никак.
Помогите тремя готовыми процедурами, кто в состоянии это написать
alexusankov вне форума Ответить с цитированием
Старый 05.01.2011, 11:56   #7
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию

Ау, народ, что никто не сможет помочь?
alexusankov вне форума Ответить с цитированием
Старый 05.01.2011, 12:23   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Все просто:

Сохранение:
Код:
procedure TSmthType.Save;
var
  i: Integer; //счётчик
begin
  Ini := TIniFile.Create({ВАШ ФАЙЛ}); //грузим файл
  try
    ini.EraseSection({СЕКЦИЯ}); //Чистим секцию
    for i := 0 to ComboBox.Items.Count {- 1 - надо ли?} do //Цикл пересчёта элемнтов combobox
    begin
      ini.Write{ТИП}({СЕКЦИЯ}, IntToStr(i) + {Параметр}, ComboBox.Items.Strings[i]); //записываем
    end;
  finally
    Ini.Free; //Освобождаем
  end;
end;
загрузка:
Код:
procedure TSmthType.Load;
var
  i:integer; //Счётчик
begin
  Ini := TIniFile.Create({ВАШ ФАЙЛ});
  try
    i := 0; //Ставим 0
    while true do //Бесконечный цикл
    begin
      if ini.ValueExists({Секция}, IntToStr(i) + {Параметр}) then //Если существует
      begin
        ComboBox.Items.Strings[i] := Ini.ReadString({СЕКЦИЯ}, IntToStr(i) + {Параметр}, ''); //Записываем в combobox
      end
      else
        Break; //Иначе Выход из бесконечного цикла
      Inc(i); //Увеличиваем i на 1-о значение(Было 0 стало 1, читаем хелп ;))
    end;
  finally
    ini.Free; //Отваливаем 
  end;
end;
Надеюсь усё ясно=)
Человек_Борща вне форума Ответить с цитированием
Старый 05.01.2011, 13:41   #9
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию

Все, ок, спасибо за четкий и конкретный ответ, уважаю. Однако, промучаышись всю ночь, я отказался от
переменная=значение, а просто храню лист значений
listbox1.item.loadfromfile();
Остался только 1 вопрос:
1. Имеется переменная, тип String.
Нужно, открыть файл,стереть все что в нем было, и записать туда значение этой переменной. Битый час бьюсь, ничего не выходит. Пробую так:
var f : file;
var testing : string;
begin
testing := 'sdfs';
AssignFile (F, 'realmlist.wtf');
Rewrite (f);
BlockWrite(f;testing;1);
Closefile ( F );
end;
++++++++++++++
Подскажите как правильно?
alexusankov вне форума Ответить с цитированием
Старый 05.01.2011, 13:46   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Открой TiniFile класс и смотри как парсится файл. Вырви это и переделай под себя.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из INI в Combobox iskurt Помощь студентам 6 30.01.2010 01:20
Как считывать данные из файла для инициализации (не INI-файл) Smagulov85 Общие вопросы Delphi 6 04.12.2009 09:08
Как можно извлечь все имена разделов Ini файла в юникоде? SkAndrew Общие вопросы Delphi 5 11.06.2009 09:03
Можно ли заполнить Combobox в коде программы?! Anna_new Помощь студентам 6 18.04.2008 11:09
ComboBox как заполнить из БД scrazy БД в Delphi 2 28.05.2007 14:49