Немогу реализовать поиск
За ранее благодарен............
Привет всем...Народ подскажите как сделать поиск в файле(тоесть есть два файла, нужно сделать поиск в середине каждого файла по очереди и если слово совпало то добавить файл в TreeView и искать в следующем файле)................
За ранее благодарен............
Э-э-э, ты бы пояснил - файлы у тебя какой-то определенной структуры? Или нет? Если второе, то боюсь, что метод поиска тут возможен только один -последовательный перебор. Или в чем был вопрос?
Чтобы не возиться, если файл текстовый, можешь грузить его в StringList и искать с помощью методов AnsiString.
Э-э-э, ты бы пояснил - файлы у тебя какой-то определенной структуры? Или нет? Если второе, то боюсь, что метод поиска тут возможен только один -последовательный перебор. Или в чем был вопрос?
Чтобы не возиться, если файл текстовый, можешь грузить его в StringList и искать с помощью методов AnsiString.
Значит ситуация такая:
AnsiString FName;
char *str1;
FName = Edit1->Text;
str1 = FName.c_str();
char buff[800];
FILE *infile;
if(Edit1->Text == "")
ShowMessage("Ничего НЕ введено");
else{
infile = fopen("file.htm", "r");
do
{
fgets(buff,800,infile);
}
while(!feof(infile)&&(strstr(buff,str1) == NULL));
if(strstr(buff,str1) == NULL)
{
fclose(infile);
}
else
{
TreeView1->Items->Add(NULL, "Html_file");
} }
проблема в следующем, мне нужно работать с допустим с сотней файлов, как прописать пути к каждому хтмл файлу(не копировать же мне сто раз этот код с разными путями).
А цель кода - искать слово заданое в эдите(как искомое) в хтмл файле, если находим, добавляем в тривиев и ищем в следующем штмл-файле, если нету такого слова, ничего не добавляем и ищем в следующем штмл-файле....
Желательно пояснения с кодом, с этой проблемой многие возятся поэтому думаю будет интересно узнать как или где порылась собака...:)
У тебя где-то ведь хранятся имена этих 100 файлов?
Делаешь процедуру:
void LookInFile(AnsiString FileName, AnsiString Text, TTreeView *tv)
{
//твой код, немного исправленный:
char *str1;
str1 = Text.c_str();
char buff[800];
FILE *infile;
if(Text == "") {ShowMessage("Ничего НЕ введено");return;}
else{
infile = fopen(FileName, "r");
do
{
fgets(buff,800,infile);
}
while(!feof(infile)&&(strstr(buff,str1) == NULL));
if(strstr(buff,str1) == NULL)
{
fclose(infile); return;
}
tv->Items->Add(NULL, FileName);
fclose(infile);
}
А затем вызываешь эту процедуру 100 раз следующим образом: LookInFile("file1.html",Edit1->Text,TreeView1)...LookInFile("file100.html",Edit1->Text,TreeView1).
Или, чтобы вручную не писать 100 строчек кода, сначала заносишь имена всех ста файлов, например, в TStringList и вызываешь процедуру в цикле.
Т.е.:
for (i=0;i<StringList1->Count;i++)
{
LookInFile(StringList1->Strings,Edit1->Text,TreeView1);
}
Или я не понял задачу?
Что значит, "копировать этот код с разными путями"?
У тебя где-то ведь хранятся имена этих 100 файлов?
Делаешь процедуру:
void LookInFile(AnsiString FileName, AnsiString Text, TTreeView *tv)
{
//твой код, немного исправленный:
char *str1;
str1 = Text.c_str();
char buff[800];
FILE *infile;
if(Text == "") {ShowMessage("Ничего НЕ введено");return;}
else{
infile = fopen(FileName, "r");
do
{
fgets(buff,800,infile);
}
while(!feof(infile)&&(strstr(buff,str1) == NULL));
if(strstr(buff,str1) == NULL)
{
fclose(infile); return;
}
tv->Items->Add(NULL, FileName);
fclose(infile);
}
А затем вызываешь эту процедуру 100 раз следующим образом: LookInFile("file1.html",Edit1->Text,TreeView1)...LookInFile("file100.html",Edit1->Text,TreeView1).
Или, чтобы вручную не писать 100 строчек кода, сначала заносишь имена всех ста файлов, например, в TStringList и вызываешь процедуру в цикле.
Т.е.:
for (i=0;i<StringList1->Count;i++)
{
LookInFile(StringList1->Strings,Edit1->Text,TreeView1);
}
Или я не понял задачу?
Лады Я поэкспериментирую...
Если не сложно скинь на [email]cybavat@yahoo.co.uk[/email]
своё мыло, а Я при дальнейших вопросах если что отпишу тебе сразу на мыло....
Благодарствую за помошь.......:}