Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.04.2014, 22:32
Tirenta Tirenta вне форума
Прохожий
 
Регистрация: 29.04.2014
Сообщения: 2
Версия Delphi: Delphi
Репутация: 10
По умолчанию чтение из файла

Всем привет, работаю с одной программой, в ней стандартные функции делфи подобные, практически идентичные...

В общем у меня есть файл .txt, мне нужно реализовать поиск слова в этом файле и если например слово найдено, скопировать остальную нужную мне информацию на этой строке..

ну например в файле подобный формат:

нужная_инфа,слово
инфа_нужная,слово2
....

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

Знаю, примеров куча в инете, но там в основном примеры с вытаскиванием всех строк сразу циклом, либо примеры pos(....) функции со словом которое уже в буфере и т.д., в общем нет того, что нужно мне, без примеров мне сложно понять как это реализовать, так как я не очень понимаю в делфи и вообще в программировании

До меня дошла лишь такая реализация:
Код:
var
spisok: TStringList;
Clist,inf:string;
i: integer;

begin
                Clist:=spisok.Strings[i];                                                                           
                i:=pos('слово',Clist);
                inf:=copy(Clist,i-12,11);
end;

в таком виде копирует всегда только инфу из первой строки, не могу понять как объяснить ему, что копировать нужно именно с той строки, где находится слово. Я думала, что в i будет возвращаться индекс символа учитывая другие строки, а получается что нет надеюсь на подсказку...
Как вернуть в i номер символа во всем списке, а не только на первой строке? ( либо может я не туда копаю и есть способ легче/правильней? )
Ответить с цитированием
  #2  
Старый 29.04.2014, 23:38
Tirenta Tirenta вне форума
Прохожий
 
Регистрация: 29.04.2014
Сообщения: 2
Версия Delphi: Delphi
Репутация: 10
По умолчанию

сама разобралась, записала в файле по другому, как

слово=инфа

и таскаю с помощью inf:=spisok.Values['слово']

все просто отлично работает но не пойму, что возвращается в inf
если слова поискового нет, подскажите пожалуйста, нужно для проверки на
Не пустую переменную
Ответить с цитированием
  #3  
Старый 30.04.2014, 07:35
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Tirenta
сама разобралась, записала в файле по другому, как

слово=инфа

и таскаю с помощью inf:=spisok.Values['слово']

все просто отлично работает но не пойму, что возвращается в inf
если слова поискового нет, подскажите пожалуйста, нужно для проверки на
Не пустую переменную
Если такого слова нет - вернётся пустая строка. Более того, если в TStringList было какое-то слово с непустым значением, то присвоение этому слову пустого значения удалит это слово из списка:
Код:
inf := TStringList.Create; // Создали пустой список
inf.Values['Слово'] := 'Значение'; // Теперь в списке есть одна такая строка: "Слово=Значение"
inf.Values['Слово'] := 'Другое значение'; // Теперь в списке одна такая строка: "Слово=Другое значение"
inf.Values['Слово'] := ''; // Теперь в списке нет ни одной строки
Ответить с цитированием
  #4  
Старый 30.04.2014, 08:19
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

На Pos тоже можно
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 spisok: TStringList;
 Clist, inf:string;
 i: integer;
begin
 spisok:= TStringList.Create;
 spisok.Text:=
  'слово=нужная_инфа'   + #10 +
  'слово2=инфа_нужная'  + #10 +
  'слово3=нужа_инфная' + #10 +
  'слово4=инфная_нужа';

 //Edit1.Text:='слово3';
 Clist:= Edit1.Text;

 for i:= 0 to spisok.Count - 1 do
  if (Clist <> '') and
     (Clist = Copy(spisok[i], 1, Pos('=', spisok[i])-1)) then
        inf:= Copy(spisok[i], Pos('=', spisok[i])+1,Length(spisok[i]));

 Label1.Caption:= inf;

 spisok.Free;
end;
Бросьте только на форму баттон (туклик на него), едит и лейбл
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter