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


Автор: DenisTv 21.12.2007, 19:30
Доброго времени суток!
Помогите пожалуйста в решении следующей задачи:
Мне нужно в текстовом файле найти некоторое слово(ключ), затем считать его значение, следующее на ним.
Причем количество знаков значения неизвестено(вещественный тип).
Заранее спасибо! 

Автор: Poseidon 22.12.2007, 14:51
Цитата(DenisTv @  21.12.2007,  19:30 Найти цитируемый пост)
Мне нужно в текстовом файле найти некоторое слово(ключ)

pos('слово')

Цитата(DenisTv @  21.12.2007,  19:30 Найти цитируемый пост)
затем считать его значение, следующее на ним.Причем количество знаков значения неизвестено(вещественный тип).
Зато известно общее число знаков: Length, позиция начала ключа (опясано выше) и длина ключа. Так что поличество знаков после ключа вычесляется математически. В общем виде что-то вроди такого будет:

Код
function GetTxt(fl, key: string): string;
var
f: TStringList;
p: integer;
begin
f:= TStringList.Create;
f.LoadFromFile(fl);
p:= pos(key, f.Text);
Result:= copy(f.Text, p+Length(key), Length(f.Text)-Length(key)-p+1);
f.Free
end;


Автор: Letov 29.12.2007, 12:57
А какой символ является разделителем пар параметр-значение?
Вот, посмотри, может поможет) http://forum.vingrad.ru/forum/topic-189408/kw-загрузка-настроек-файла.html

Автор: DenisTv 16.1.2008, 19:13
Благодарю за ответы)
Уточню,  там файл набит всяким хламом. Ключ - Значение разделяются ","(запятой).

И ещё, там в файле куча этих ключей, есть ли возможность их поочерёдного выдёргивания или 
только удалением уже найденого? 

Файл такого вида(вдруг поможет, выдергиваем значение ключа SDDPT):
Код

2: GPGLL,6318.5765,N,08731.9688,E,052858.00,A,A*64
3: GPGSV,3,1,11,01,30,130,50,02,14,352,44,04,17,315,41,06,24,067,44*7C
4: SDDPT,0007.9,0000.0*59
5: PFEC,Alarm,0,0*6F
6: PFEC,xdr,FORE,200*7E
7: GPGSV,3,2,11,07,24,074,46,13,26,292,46,16,41,163,49,20,39,226,49*7D
8: GPGSV,3,3,11,23,53,278,52,30,11,040,43,31,54,091,53*49
9: GPHDT,113.7,T*31
10: GPVTG,115.2,T,,M,004.7,N,008.6,K,A*07
11: GPZDA,052858.00,16,08,2007,,*6E

Автор: Akella 17.1.2008, 10:54
Цитата(DenisTv @  16.1.2008,  19:13 Найти цитируемый пост)
И ещё, там в файле куча этих ключей, есть ли возможность их поочерёдного выдёргивания 

есть, щас дам

Добавлено @ 11:08
Код

Var
  sl, sl1:TStringList;
  i, k:integer;
begin
 

  sl:TStringList.create;
  sl1:TStringList.create;
  try
    sl.loadfromfile(загружаем файл полностью);
    for i := 0 to sl.count do begin
      sl1.text := StringReplase(sl.text, ',', #13, []);//загружаем строки файла поочереди - запятую меняем на перенос строки
      for k := sl1.count -1 do
        ShowMessage(sl1[k]);//показываем все значения ключей поочереди, но первым будет идти сам ключ

    end;//for

  

  finally
    FreeAndNil(sl);
    FreeAndNil(sl1);
  end;


писал на вскидку, так что если будут ошибки, звыняй smile 

Автор: DenisTv 20.1.2008, 14:55
Синтезировав все ответы, получил что хотел.   smile 

Всем большое спасибо за помощь  smile 

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