![]() |
|
|
#1
|
|||
|
|||
|
Всем привет, работаю с одной программой, в ней стандартные функции делфи подобные, практически идентичные...
В общем у меня есть файл .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
|
|||
|
|||
|
сама разобралась, записала в файле по другому, как
слово=инфа и таскаю с помощью inf:=spisok.Values['слово'] все просто отлично работает но не пойму, что возвращается в infесли слова поискового нет, подскажите пожалуйста, нужно для проверки на Не пустую переменную ![]() |
|
#3
|
||||
|
||||
|
Цитата:
Код:
inf := TStringList.Create; // Создали пустой список inf.Values['Слово'] := 'Значение'; // Теперь в списке есть одна такая строка: "Слово=Значение" inf.Values['Слово'] := 'Другое значение'; // Теперь в списке одна такая строка: "Слово=Другое значение" inf.Values['Слово'] := ''; // Теперь в списке нет ни одной строки |
|
#4
|
||||
|
||||
|
На 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; |