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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2011, 10:37   #1
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию Поиск максимального числа

Содержимое ini файла:
Код:
[user info]
andrej=3
volodja=14
vasja=14
anja=5
Помогите пожалуйста сделать цикл который найдет и покажет 2 людей у которых больше всего число после =.
Строк с именами в файле может быть больше чем я показал.

Последний раз редактировалось celovec; 19.03.2011 в 10:41.
celovec вне форума Ответить с цитированием
Старый 19.03.2011, 17:58   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

В INI нельзя получать параметры, не зная их названия. Поэтому сравнивай через if
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 19.03.2011, 19:19   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

В справке по Tinifile Delpli Example
Цитата:
This example reads the Transfer section of the myapp.ini file into a memo and changes one of the strings in the INI file when Button1 is clicked. When Button2 is clicked, the myapp.ini file is restored to its initial state, using the values stored in the memo.
Before you run this example, you must add the IniFiles unit to the uses clause of your unit.

Warning: Do not click button2 before you have clicked button1!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyIniFile: TIniFile;
  begin
  MyIniFile := TIniFile.Create('myapp.ini');
  Memo1.Clear;
  MyIniFile.ReadSectionValues('Transfer', Memo1.Lines);
  if Memo1.Lines.Values['Title1'] <> 'Picture Painter' then
    MyIniFile.WriteString('Transfer', 'Title1', 'Picture Painter');
  MyIniFile.Free;
end;
+ F1 TStringList
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.03.2011, 20:09   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

позволю себе верный ответ evg_m проиллюстрировать работающим примером кода:
Код:
procedure TForm1.Button1Click(Sender: TObject);
Const
  SectionName = 'user info';
var
  TS : TstringList;
  MyIniFile: TIniFile;
  i, MaxIndex, CurValue, MaxValue : integer;
begin
  MyIniFile := TIniFile.Create(ExtractFilePath(ParamStr(0))+'myapp.ini');
  TS := TstringList.Create;
  MyIniFile.ReadSection(SectionName, TS);

  if TS.Count=0 then
        Application.MessageBox( PChar('Нет ни одной записи в секции "'+SectionName+'"!'+#13+#10+
        'Нечего тут искать!'), 'Ошибка', MB_ICONERROR or MB_OK)
  else begin
    MaxIndex := 0;
    MaxValue := MyIniFile.ReadInteger(SectionName, TS.Strings[MaxIndex],0);
    for i:=1 to TS.Count-1 do begin
       CurValue := MyIniFile.ReadInteger(SectionName, TS.Strings[i],0);
       if CurValue > MaxValue then begin
         MaxIndex := i;
         MaxValue := CurValue;
       end;
    end;
    Application.MessageBox(PChar('Максимальная величина равна '+IntToStr(MaxValue)
       +#13+#10+'Найдена у "'+TS.Strings[MaxIndex]+'"'),
       'Результат', MB_ICONINFORMATION or MB_OK);
   end;


  FreeAndNil(TS);
  FreeAndNil(MyIniFile);
end;
p.s. если несколько пользователей имеют максимум,
то выведется только первое имя с максимальной величиной. Абсолютно несложно чуть-чуть доработать программу так, чтобы выводились все имена. (если в этом есть необходимость, конечно!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2011, 21:37   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

F1 на ReadSectionValues (tinifile) :
procedure ReadSectionValues(const Section: String; Strings: TStrings); override;

потом только распарсить строки с учетом знака =

альтернативный ход вместо распарсивания - Strings property (TValueListEditor) , в который можно и передать получаемые строки из вышеназванной процедуры, т.е. Dainifile.ReadSectionValues('Sectio n_name', TValueListEditor.Strings);
в результате получим разделенные по колонкам строки ключей и значений, и обращаясь через стандартные свойства TValueListEditor'a к ним, получить все данные в простом виде, юзайте справку по оным, да и вообще, юзайте справку
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти числа левее максимального aank10 Общие вопросы C/C++ 1 13.02.2011 18:24
С++ поиск максимального числа в...... Bezo Помощь студентам 1 27.01.2011 21:09
C++ поиск максимального числа Donatello Общие вопросы Delphi 2 29.12.2010 02:30
поиск максимального элемента счастливая Помощь студентам 4 17.05.2010 21:31
TASM - нахождения максимального числа из трех положительных целых чисел и умножения максимального числа iggor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 24.05.2009 20:16