Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-40005
BaDeVlad
2002-06-03 15:30
2002.06.13
Проблемы с RxRichEdit.SelText


1-39999
Dimedrol
2002-05-31 17:12
2002.06.13
Пишу наследника TMemo...


14-40153
kaif
2002-05-09 04:52
2002.06.13
Как спасти данные с винча?


1-40027
Gavrish_Dmitry
2002-05-31 13:29
2002.06.13
Как сделать ScrollBar нестандартным?


6-40137
daos
2002-04-05 13:18
2002.06.13
Ну скажитеж ПОЖАЛУЙСТА!!!!!!!!!!!!!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский