Ĺadny brzuch
Witam
Mam mały problem w programowaniu w C++ chce z pliku txt wyszukać fragment i wyświetlić go na ekran (np. Od „ jakiegoś tekstu ” Do „ . ”).
Zatrzymałem się na wyszukiwaniu może ktoś z was troszkę nakierować z jakiej funkcji mam skorzystać ?
Użytkownik migajek edytował ten post 17 luty 2006, 23:42
1. Jeśli plik nie jest bardzo duży możesz wczytać go do zmiennej typu string i użyć string::find, ale nie jest to zbyt optymalna metoda.
2. Możesz napisać własną funkcję, która będzie robić coś takiego.
Jej schemat działania może być na przykład taki:
1. Pobiera znak z pliku, zapisuje który to znak i wchodzi w pętlę, w której pobiera kolejne znaki dopóki są one takie jak kolejnke znaki szukanego tekstu. 2. Jeśli przejdzie przez cały szukany tekst to zwraca numer początkowego znaku i wychodzi z funkcji. Jesli nie to zaczyna ponownie szukać od ostatnio zapisanego numeru znaku, przy którym wszedł w pętlę.
Oczywiście to też nie jest optymalne raczej, ale powinno działać.
Napisałem coś takiego ale nie działa :( może ktoś mi poprawi ten kod ???
Od niedawna zainteresowałem się programowanie i jeszcze jestem w tym zielony jestem ;)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
fstream plik_otworz;
char znak,otworz[25];
string ch;
raz:
system("cls");
cout << "Podaj nazwe pliku: ";
cin >> otworz;
plik_otworz.open(otworz,ios::in);
if (!plik_otworz)
{
cout << "Pliku nie mozna otworzyc" << endl;
cout << "Czy chcesz wczytajć plik jeszczeraz (T/N): ";
cin >> znak;
if(znak=='t')
{
goto raz;
}
else if(znak=='n');
{
cout << "Koniec" << endl;
}
}
else
{
while (!plik_otworz.eof())
{
ch = plik_otworz.get();
}
string tekst;
string od="Tak";
string doo=".";
tekst = ch.substr(ch.find(od)+od.length(),ch.find(doo)-doo.length());
cout << tekst << endl;
plik_otworz.close();
system("PAUSE");
return EXIT_SUCCESS;
}
}
while (!plik_otworz.eof()) { Â Â Â Â Â ch = plik_otworz.get(); Â Â Â }
Zauważ, że w ten sposób za każdym razem przypisujesz ch jeden znak odczytany z pliku. Powinieneś zamiast tego dodawać ten znak do ch, czyli "+=" zamiast "=".
Użytkownik Chmurek edytował ten post 17 luty 2006, 23:53
Super ! :) działa dzieki.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam mały problem w programowaniu w C++ chce z pliku txt wyszukać fragment i wyświetlić go na ekran (np. Od „ jakiegoś tekstu ” Do „ . ”).
Zatrzymałem się na wyszukiwaniu może ktoś z was troszkę nakierować z jakiej funkcji mam skorzystać ?
Użytkownik migajek edytował ten post 17 luty 2006, 23:42
1. Jeśli plik nie jest bardzo duży możesz wczytać go do zmiennej typu string i użyć string::find, ale nie jest to zbyt optymalna metoda.
2. Możesz napisać własną funkcję, która będzie robić coś takiego.
Jej schemat działania może być na przykład taki:
1. Pobiera znak z pliku, zapisuje który to znak i wchodzi w pętlę, w której pobiera kolejne znaki dopóki są one takie jak kolejnke znaki szukanego tekstu. 2. Jeśli przejdzie przez cały szukany tekst to zwraca numer początkowego znaku i wychodzi z funkcji. Jesli nie to zaczyna ponownie szukać od ostatnio zapisanego numeru znaku, przy którym wszedł w pętlę.
Oczywiście to też nie jest optymalne raczej, ale powinno działać.
Napisałem coś takiego ale nie działa :( może ktoś mi poprawi ten kod ???
Od niedawna zainteresowałem się programowanie i jeszcze jestem w tym zielony jestem ;)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
fstream plik_otworz;
char znak,otworz[25];
string ch;
raz:
system("cls");
cout << "Podaj nazwe pliku: ";
cin >> otworz;
plik_otworz.open(otworz,ios::in);
if (!plik_otworz)
{
cout << "Pliku nie mozna otworzyc" << endl;
cout << "Czy chcesz wczytajć plik jeszczeraz (T/N): ";
cin >> znak;
if(znak=='t')
{
goto raz;
}
else if(znak=='n');
{
cout << "Koniec" << endl;
}
}
else
{
while (!plik_otworz.eof())
{
ch = plik_otworz.get();
}
string tekst;
string od="Tak";
string doo=".";
tekst = ch.substr(ch.find(od)+od.length(),ch.find(doo)-doo.length());
cout << tekst << endl;
plik_otworz.close();
system("PAUSE");
return EXIT_SUCCESS;
}
}
while (!plik_otworz.eof()) { Â Â Â Â Â ch = plik_otworz.get(); Â Â Â }
Zauważ, że w ten sposób za każdym razem przypisujesz ch jeden znak odczytany z pliku. Powinieneś zamiast tego dodawać ten znak do ch, czyli "+=" zamiast "=".
Użytkownik Chmurek edytował ten post 17 luty 2006, 23:53
Super ! :) działa dzieki.