Вопрос Поиск слов в ini файле

AtotIK

Новичок
Всем привет!
Прошу помощи . Дано слово (идентификатор компонента), необходимо найти его в файле и, если поиск успешен, то отметить компонент.

Формат файла - стандартный ini, идентификаторы находятся в отдельных строках для каждой страницы в виде одной строки с разделением через пробелы.
Вид:
Код:
Step1=St1\FirstComp St1\FirstComp\4 St1\SecondComp
Step2=St2\FirstComp St2\FirstComp\2
Никак не получается. Ох уж эта "Пятница, 13-е"...:mad:
 

AtotIK

Новичок
Номер компонента передаю без проблем, отмечаю тоже. А вот с "проверкой" не лады.
 

nik1967

Old Men
Проверенный
Выложи файл .ini и какое слово конкретно в нём нужно найти.
 

AtotIK

Новичок
Выложи файл .ini и какое слово конкретно в нём нужно найти.
Ну тут не совсем ini-файл, просто текст с нужным порядком строк. Решил изменить вид, теперь каждый компонент находится на отдельной строке.

Нужно прогонять файл на соответствие данных в строках и, если они есть, отмечать соответственный компонент.
 

Вложения

  • 103 байт Просмотры: 8

AtotIK

Новичок
Неправильно работающий набросок:
Код:
function SetupConfigLoad_1(const TagName, CompNo: String): Boolean;
var
  I, CompDigit, TagPos: Integer;
  SetupConfig: TStringList;
  SetupConfigDir, Tmp, Tag, Line, FilePath: String;
begin
  Result:=False;
  FilePath:=ExpandConstant('C:\Setup.ini');
  If FileExists(FilePath) then
begin

  Tag:=TagName;
  SetupConfigDir:=ExpandConstant('C:\');
  SetupConfig:=TStringList.Create;
  try
  SetupConfig.LoadFromFile(SetupConfigDir + '\Setup.ini');
  for I:=0 to SetupConfig.Count - 1 do
  begin
  Line:=SetupConfig[I];
  TagPos:=Pos(Tag, Line);
  if TagPos > 0 then
  begin
  Result:=True;
  CompDigit:=StrToInt(CompNo);
  CustomPage_1ComponentsList.CheckItem(CompDigit, coCheck);
  end;
  Log(Line);
  end;
  finally
  SetupConfig.Free;
end;
end;
end;
.......
SetupConfigLoad_1('St1\Comp4', '5');
Возможно я и не в ту сторону пошёл вообще...:(
 

Shegorat

Lord of Madness
Администратор
AtotIK
Довольно грубый пример.
Код:
[setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[components]
name: comp1; description: comp1;
name: comp1\1; description: comp1_1;
name: comp2; description: comp2;
name: comp1\1; description: comp2_1;
name: comp3; description: comp3;
name: comp3\1; description: comp3_1;
name: comp4; description: comp4;

[code]
var
  ConfigList: TStringList;

function CheckConfigName(CompName: String): Longint;
var
  i: Integer;
begin
  Result:= -1;
  if (ConfigList.Count <= 0) then
    Exit;

  if ConfigList.Find(CompName, i) then
    Result:= i;
end;


procedure InitializeWizard();
begin
  ConfigList:= TStringList.Create();
  ConfigList.LoadFromFile('E:\Setup.ini');

  if (CheckConfigName('St1\Comp1') >= 0) then
    WizardForm.ComponentsList.CheckItem(0, coCheckWithChildren);
  
  if (CheckConfigName('St1\Comp3\3') >= 0) then
    WizardForm.ComponentsList.CheckItem(5, coCheckWithChildren);
end;

procedure DeinitializeSetup();
begin
  ConfigList.Free();
end;

Если в файл сохранять элементы в формате
Код:
comp1_0
comp1\comp1_1
comp2_2
comp2\comp2_3
comp3_4
Т.е. чтобы индекс компонента находился в конце названия, то индексы можно будет парсить прямо из файла.
Правда я не знаю как и зачем вы сохраняете данный файл, возможно что моё предложение вам и не подходит.
 

Snoopak96

Старожил
AtotIK,
Код:
function SearchValues(file,sValue:Ansistring): Boolean;
var
  ss: TArrayOfString;
  i: Integer;
begin
  LoadStringsFromFile(file, ss);
  for i:=0 to GetArrayLength(ss)-1 do begin
  if Pos(sValue, ss[i])>0 then begin
  Result := true;
  Exit;
  end else Result := false;
  end;
end;

procedure InitializeWizard();
begin
 WizardForm.ComponentsList.Checked[0]:= SearchValues(ExpandConstant('{src}\1.txt'),'тополя ля ля ля');
end;
 
Сверху