Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Вниз
Поиск в StringList Найти похожие ветки
← →
Валет (2002-06-03 17:19) [0]Уважаемые мастера.
Передо мной встала следующая задача:
В выбранном текстовом файле необходимо произвести поиск по заданному в Edit-е слову.
После нахожденния данного слова его(заданное слово) и 25 символов идущих за ним необходимо добавить в листбокс.
Эту опирацию необходимо выполнять до тех пор пока не кончится файл.
Файл подгружается не в мемо или в ричь-эдит, а в стринглист.
Как такое реализовать ?
Буду очень признателен за любую оказанную помощь.
← →
Song (2002-06-03 17:22) [1]IndexOf()
← →
Валет (2002-06-03 17:25) [2]>Song © (03.06.02 17:22)
>IndexOf()
Как после нахожденния данного слова его(заданное слово) и 25 символов идущих за ним необходимо добавить в листбокс ?
← →
Yuri Btr (2002-06-03 17:26) [3]Yuri Btr © (03.06.02 16:46)
Наверное надо склеить все строки в стринглисте и затем определить вхождение (AnsiPos)текста из Edit в полученную строку, определим позицию первого символа, делаем Copy фрагмента строки - с длиной Length(Edit.text)+25, удаляем все символы до позиции первого символа, рекурсией ищем дальнейшие вхождения.
Наверно так.
MBo © (03.06.02 16:58)
stringlist.text содержит все строки в одной. Учти CRLF.
Валет (03.06.02 17:14)
А как в нём поиск-то осуществить (stringlist.text)?
Yuri Btr © (03.06.02 17:24)
Всё тем же способом, как я описал. Только пропускаешь склейку строк, и дополнительно ищешь #13 в полученном тексте и удаляешь его, а затем всё как я написал.
Удаляем символы через Delete.
← →
Валет (2002-06-03 17:26) [4]>Song © (03.06.02 17:22)
>Yuri Btr © (03.06.02 17:24)
А можно пример ?
Хотя-бы на скорую руку.
← →
Song (2002-06-03 17:34) [5]With TStringList Do ListBox1.Add(Strings[IndexOf("test")]+Copy(Text,Pos("test",Text),25));
← →
Song (2002-06-03 17:38) [6]Так надёжней:
With TStringList Do S:=Strings[IndexOf(#13#10+"test"+#13#10)]+Copy(Text+2,Pos("test",Text),27);
S:=StringReplace(S,#13#10,"",[rfReplaceAll]);
ListBox1.Add(S);
← →
Yuri Btr (2002-06-03 17:39) [7]Тьфу ты...
Пишу по памяти - ужасно глючно, но смысл ясен
var
s:WideString;
i:integer;
stringlist:TstringList;
-----------------------
s:="";
for i:=0 to StringList.Count-1
do
s:=s+StringList[i];
While AnsiPos(Edit.text,s)>0
do
begin
ListBox.AddItem(Copy(s,AnsiPos(Edit.text,s),Length(Edit.text)+25));
Delete(s,0,AnsiPos(Edit.text,s)+Length(Edit.text)+25))
end;
← →
Song (2002-06-03 17:42) [8]Sorry, не туда вставил перевод строки :))
Так надёжней:
With TStringList Do S:=Strings[IndexOf("test")]+Copy(Text,Pos(#13#10+"test"+#13#10,Text)+2,27);
S:=StringReplace(S,#13#10,"",[rfReplaceAll]);
ListBox1.Add(S);
← →
Валет (2002-06-03 18:04) [9]>Yuri Btr © (03.06.02 17:39)
Так ошибку выдаёт.
procedure TForm1.Button1Click(Sender: TObject);
var
s:WideString;
i:integer;
stringlist:TstringList;
begin
stringlist.Create;
stringlist.LoadFromFile("c:\demo.txt");
s:="";
for i:=0 to StringList.Count-1 do
s:=s+StringList[i];
While AnsiPos(Edit1.text,s)>0 do
begin
ListBox1.Items.add(Copy(s,AnsiPos(Edit1.text,s),Length(Edit1.text)+25));
Delete(s,0,AnsiPos(Edit1.text,s)+Length(Edit1.text)+25);
end;
end;
>Song © (03.06.02 17:42)
А так ничего не происходит.
procedure TForm1.Button1Click(Sender: TObject);
var
files: tstringlist;
s: string;
begin
files.Create;
files.LoadFromFile("c:\demo.txt");
With files Do S:=Strings[IndexOf(Edit1.text)]+Copy(Text,Pos(#13#10+Edit1.text+#13#10,Text)+2,27);
S:=StringReplace(S,#13#10,"",[rfReplaceAll]);
ListBox1.items.Add(S);
end;
???
← →
Song (2002-06-03 18:16) [10]:)) Сам понимаешь окончание рабочего дня
procedure TForm1.Button1Click(Sender: TObject);
Var S:String;
begin
With TStringList.Create Do
try
LoadFromFile("c:\demo.txt");
S:=Strings[IndexOf(Edit1.text)]+Copy(Text,Pos(#13#10+Edit1.Text+#13#10,Text)+4+Length(Edit1.Text),25+4+Length(Edit1.Text));
S:=StringReplace(S,#13#10,"",[rfReplaceAll]);
ListBox1.items.Add(S);
finally
Free;
end;
end;
← →
Song (2002-06-03 18:25) [11]Ступил и здесь, понял ошибку, пора выключать комп и отдыхать. :)) Вот правильный вариант:
procedure TForm1.Button1Click(Sender: TObject);
Var S:String;
begin
With TStringList.Create Do
try
LoadFromFile("c:\demo.txt");
S:=Strings[IndexOf(Edit1.text)]+Copy(Text,Pos(#13#10+Edit1.Text+#13#10,Text)+Length(Edit1.Text)+4,35);
S:=StringReplace(S,#13#10,"",[rfReplaceAll]);
ListBox1.items.Add(S);
finally
Free;
end;
end;
35 потому что нужно 25 символов и ещё плюс пять раз по 2 символа (ODOA) = 35
← →
DeMoN-777 (2002-06-03 18:44) [12]>Song © (03.06.02 18:25)
И вновь трабла =(
Error "List index out of bounds(-1)"
← →
Валет (2002-06-03 18:44) [13]>Song © (03.06.02 18:25)
И вновь трабла =(
Error "List index out of bounds(-1)"
← →
Song (2002-06-03 19:05) [14]2Валет (03.06.02 18:44)
Последний вариант я писал уже в Дельфи всё работало.
Edit1.Text был равен "test"
Файл demo.txt такой:
************************
kkk
test
12345
12345
12345
12345
12345
67891
***********************
← →
Song (2002-06-03 19:08) [15]Вполне возможно Вы написали не полностью так как я написал и запутались в With например IndexOf() у Вас применяетя к TListBox, а не TStringList. В какой строке ошибка ?
← →
Валет (2002-06-03 19:27) [16]Поясняю вопрос.
Например содержимое файла Demo.txt такое
*************************************************************
«Сертификат веб-узла» подтверждает подлинность данного веб-узла и гарантирует, что с ним безопасно работать. Благодаря этому другие веб-узлы не могут использовать идентификатор исходного защищенного узла. При отправке личных сведений через Интернет желательно проверить сертификат веб-узла, чтобы убедиться в безопасности отправляемых личных сведений. При загрузке программного обеспечения с веб-узла сертификаты можно использовать для проверки надежности источника программного обеспечения.
*************************************************************
Дык вот поиск по слову веб-узла должен добавить в ListBox следующее:
1.item - веб-узла + 25 символов после него ( и гарантирует, что с ним)
2.item - веб-узла + 25 символов после него (, чтобы убедиться в безоп)
3.item - веб-узла + 25 символов после него ( сертификаты можно исполь)
и т.д. если в файле ещё встречается слово "веб-узла".
← →
Song (2002-06-03 19:41) [17]Так бы сразу и объяснили.
procedure TForm1.Button1Click(Sender: TObject);
Var S:String;
begin
With TStringList.Create Do
try
LoadFromFile("c:\demo.txt");
While Pos(Edit1.Text,Text)>0 Do
Begin
ListBox1.items.Add(Copy(Text,Pos(Edit1.Text,Text),25+Length(Edit1.Text)));
S:=Text;
System.Delete(S,Pos(Edit1.Text,Text),25+Length(Edit1.Text));
Text:=S;
End;
finally
Free;
end;
end;
← →
Валет (2002-06-03 20:25) [18]>Song © (03.06.02 19:41)
Спасибо огогромадное, выручил.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c