Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проверка совпадений


Автор: georgan1982 9.10.2004, 19:45
Здравствуйте.
У меня назрел такой вопросик.
Текст из ComboBox записывается в INI файл. Нужно создать проверку: если такой текст в INI файле есть - не записывать его, а если нет - записать. Помогите это реализовать. Желательно, чтобы проверка была быстрой.

sample.gif

Автор: Kesh 9.10.2004, 19:48
Опиши подробнее, как именно текст сохраняется в INI-файле... Для каждого значения своя переменная, или текст с разделителями...

Автор: Pakshin A. S. 9.10.2004, 20:05
Код

function InFile(str:string; filename:string):boolean;
var
f:textfile;
s:string;
begin
AssignFile(f, filename);
reset(f);
result:=false;
while not Eof(f) and not result do
 begin
  readln(f, s);
  if Pos('=', s) <> -1
   then
    begin
     delete(s, 1, pos('=', s));
     Result:=Pos(UpperCase(str), UpperCase(s)) <> -1;
    end;
  end;
CloseFile(f);
end;

Автор: Kesh 9.10.2004, 20:32
Это проверка существования строки в файле... А как же запись?..

Автор: georgan1982 9.10.2004, 20:40
Секция INI файла выглядит примерно так:

Код
[aa]
200=
201=
202=


qstn.gif

Автор: Pakshin A. S. 10.10.2004, 10:49
Цитата(Kesh @ 9.10.2004, 21:32)
Это проверка существования строки в файле... А как же запись?..

Вот в том и фишка: если файл состоит из одной секции и в этой секции есть значение компонетта, то эту штуку как раз можно использовать...

georgan1982:
Код

uses IniFiles;

function InFile(str:string; filename:string):boolean;
var
f:TIniFile;
i:integer;
begin
f:=TIniFile.Create(fileName);
i:=200;
Result:=false;
while ValueExists('aa', IntToStr(i)) and not Result do
 begin
  Result:=Pos(str, f.ReadString('aa', IntToStr(i), '')) <> -1;
  inc(i);
 end;
f.Free;
end;


Код

if not InFile('asd', 'Strings.ini')
 then
  {Записываем}

Главное условие - подряд идущие индексы!

К вечеру будет код, которому не будут нужны подряд идущеи индексы...

Автор: Pakshin A. S. 10.10.2004, 11:45
Sorry, написал сейчас:
Код

function InFile(const Str, Section, FileName: string): boolean;
var
 f: textfile;
 s, d: string;
begin
 AssignFile(f, FileName);
 reset(f);
 readln(f, s);
 while s <> Section do
   readln(f, s);
 readln(f, s);
 Result:=false;
 while not Eof(f) and (s[1] <> '[') and not Result do
   begin
     d:=s;
     Delete(d, 1, Pos('=', d));
     Result:=d = str;
     readln(f, s);
   end;
 CloseFile(f);
end;

Автор: georgan1982 10.10.2004, 12:36
Сенкс!

Автор: Pakshin A. S. 10.10.2004, 12:59
Рад помочь! colgate.gif

Обращайтесь на форум еще - всегда найдете ответ (кстати, зарегистрируйтесь, для более удобного пользования форумом) biggrin.gif cool.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)