Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2009, 16:02   #1
B@R@B@$HK@
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 26
По умолчанию как сделать поиск по текстовому файлу

Подскажите как мне сделать поиск по файлу формата .txt и вывести на екрин только то что я искал?
пример моего файла:

1. Sdx = x + C

2. S(x^n)dx = x^(n+1) / (n+1) +C

3. S(dx/x) = ln|x| + C

4. S(ln(x))dx = x * ln(x) - x + C

5. S(log_b(x))dx = x * log_b(x) - x * log_b(e) + C

Модератор: давайте темам названия, отражающие суть темы

Последний раз редактировалось Sazary; 20.06.2009 в 16:05.
B@R@B@$HK@ вне форума Ответить с цитированием
Старый 20.06.2009, 16:08   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Читаете файл построчно и ищете в считанной строке введенную подстроку. Если нашли, то выводим всю строку.

Смотрите в сторону функций strstr() и find() (если будете использовать std::string)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 20.06.2009, 17:35   #3
B@R@B@$HK@
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 26
По умолчанию

Что не так?

Код:
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream.h>

void main()
 { clrscr(); char *a;
   FILE *f;char line[160];
   f=fopen("c:\\4.txt", "r+w");
   if(f)
    {   
      while(fgets(line,5,f)!=NULL)
       {
	 cout<<line;
       }
    }
   else
   cout<<"error!!! File not found";
   cin>>a;
   if(strstr(line, a)!=NULL)
   cout<<line;
   
   fclose(f);
   getch();
 }
B@R@B@$HK@ вне форума Ответить с цитированием
Старый 20.06.2009, 18:08   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Во-первых, не выделяете память под a.
Во-вторых, проверять на совпадение нужно сразу после считывания строки. А вы сначала выводите содержимое файла, а потом ищете подстроку в последней строке.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 20.06.2009, 23:53   #5
B@R@B@$HK@
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 26
По умолчанию

Почему когда в моем файле есть например (С)'=0, а в поиску я введу (C)
мне покажет просто (C)' , а то что после = не показывает?
Как ето исправить?


Код:
void main()
 { clrscr(); 
   char a[20];
   FILE *f;char line[160];
   f=fopen("c:\\4.txt", "r+w");

   if(f)
    { 
      gets(a);
      while(fgets(line,5,f)!=NULL)
       {
	 if(strncmp(line, a, 3)==NULL)
	 cout<<line;
       } 
    }
   else cout<<"file not found";
   fclose(f);
   getch();
 }
B@R@B@$HK@ вне форума Ответить с цитированием
Старый 21.06.2009, 01:13   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Исправьте:
Код:
while(fgets(line,160,f)!=NULL)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 21.06.2009, 14:11   #7
B@R@B@$HK@
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 26
По умолчанию

И еще 1 вопрос мне нужно теперь удалить заданную фразу. А оно записывает ток последнюю строчку второй раз и фраза остаетса:
Код:
void main()
{
 FILE *f; char a[30];
 char line[200];
 clrscr();
 f=fopen("c:\\4.txt","r+w");
if(f)
{
 cout<<"\n\nVvedite formyly:\n";
   gets(a);
      while(fgets(line,160 ,f)!=NULL)
	{
	  if(strncmp(line, a, 3)!=NULL)
	  cout<<line;
        }   fputs(line, f); 
}

 fclose(f);
 getch();
}

Последний раз редактировалось B@R@B@$HK@; 21.06.2009 в 14:40.
B@R@B@$HK@ вне форума Ответить с цитированием
Старый 21.06.2009, 15:14   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

fputs записывает строку в файл.
Если хотите что-то удалить, то придется перезаписывать файл.
Например, прочитать все в память, а потом слить все обратно, но без удаляемой строчки.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 21.06.2009, 15:24   #9
B@R@B@$HK@
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 26
По умолчанию

а можно какойто пример как ето сделать?
B@R@B@$HK@ вне форума Ответить с цитированием
Старый 21.06.2009, 15:33   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что-то вроде этого (писал прямо тут).

Код:
char mas[100][200]; // массив строк
char line[200];
int cnt=0;
while(fgets(line,160 ,f)!=NULL)
  if(strncmp(line, a, 3)!=0)
   strcpy(mas[cnt++],line);
fclose(f);

f=fopen("c:\\4.txt","w");
for(int i=0; i<cnt; i++)
 fputs(mas[i],f);
fclose(f);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать поиск по компоненту Tmemo?? photozaz Общие вопросы Delphi 4 16.04.2008 08:23
Как сделать поиск файлов в папке BETONOMESHALKA Общие вопросы Delphi 3 01.02.2008 22:43
необходимо осуществить поиск по файлу Antonio86 Общие вопросы Delphi 2 19.01.2008 00:29
как прикрепитить прогу к текстовому файлу? BLACK_KOT Общие вопросы Delphi 1 24.09.2007 17:33