|
#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; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |