Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Немогу реализовать поиск

496
27 июня 2004 года
Jes
81 / / 28.03.2003
Привет всем...Народ подскажите как сделать поиск в файле(тоесть есть два файла, нужно сделать поиск в середине каждого файла по очереди и если слово совпало то добавить файл в TreeView и искать в следующем файле)................

За ранее благодарен............
621
27 июня 2004 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by Jes
Привет всем...Народ подскажите как сделать поиск в файле(тоесть есть два файла, нужно сделать поиск в середине каждого файла по очереди и если слово совпало то добавить файл в TreeView и искать в следующем файле)................

За ранее благодарен............



Э-э-э, ты бы пояснил - файлы у тебя какой-то определенной структуры? Или нет? Если второе, то боюсь, что метод поиска тут возможен только один -последовательный перебор. Или в чем был вопрос?

Чтобы не возиться, если файл текстовый, можешь грузить его в StringList и искать с помощью методов AnsiString.

496
28 июня 2004 года
Jes
81 / / 28.03.2003
Цитата:
Originally posted by Бешеный кролик


Э-э-э, ты бы пояснил - файлы у тебя какой-то определенной структуры? Или нет? Если второе, то боюсь, что метод поиска тут возможен только один -последовательный перебор. Или в чем был вопрос?

Чтобы не возиться, если файл текстовый, можешь грузить его в 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");
} }

проблема в следующем, мне нужно работать с допустим с сотней файлов, как прописать пути к каждому хтмл файлу(не копировать же мне сто раз этот код с разными путями).
А цель кода - искать слово заданое в эдите(как искомое) в хтмл файле, если находим, добавляем в тривиев и ищем в следующем штмл-файле, если нету такого слова, ничего не добавляем и ищем в следующем штмл-файле....
Желательно пояснения с кодом, с этой проблемой многие возятся поэтому думаю будет интересно узнать как или где порылась собака...:)

621
28 июня 2004 года
Бешеный кролик
151 / / 23.03.2004
Что значит, "копировать этот код с разными путями"?

У тебя где-то ведь хранятся имена этих 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);
}

Или я не понял задачу?
496
30 июня 2004 года
Jes
81 / / 28.03.2003
Цитата:
Originally posted by Бешеный кролик
Что значит, "копировать этот код с разными путями"?

У тебя где-то ведь хранятся имена этих 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]
своё мыло, а Я при дальнейших вопросах если что отпишу тебе сразу на мыло....

Благодарствую за помошь.......:}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог