[C++]Odczytywanie określonej treści z pliku.

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
zenzee
-
Posty: 75
Rejestracja: 25 lip 2008, 10:41
Lokalizacja: Samoa Zachodnie

[C++]Odczytywanie określonej treści z pliku.

Post autor: zenzee » 15 maja 2009, 0:55

Witam.
Chciałem napisać taki prosty programik,który odczyta z pliku tylko określony tekst
pomiędzy parą takich nawiasów.
Teraz pytanie,czy to trzyma się kupy :grin:
Wielkie dzięki wszystkim za słowa krytyki.

Kod: Zaznacz cały

//---------------------------------------------------------------------------
#include<iostream>
#include<fstream>
#include<string>
//---------------------------------------------------------------------------
int main()
{
std::ifstream plik_odczytywany("Tekst.dat");//otworz plik "Tekst.dat" do odczytu

 if(plik_odczytywany)//jesli jest taki plik to idz dalej
 {
 std::ofstream plik_zapisywany("Tekst.txt"); //otworz plik "Tekst.txt" do zapisu

 std::string tresc_znaleziona;//deklaracja zmiennej typu string
 int Licznik = 0;//deklaracja zmiennej typu int

  //Teraz odczytaj tylko tresci pliku zawarte pomiedzy parą nawiasów < >
  
   while((getline(plik_odczytywany,tresc_znaleziona,'<')&&
       (getline(plik_odczytywany,tresc_znaleziona,'>'))))
     {
    ++Licznik;//preinkrementuj licznik,jak cos znajdziesz
    std::cout<<tresc_znaleziona<<'\n';//wyswietl znalezione tresci
    plik_zapisywany<<Licznik<<") "<<tresc_znaleziona<<'\n';//i zapisz je do pliku Tekst.txt w kolejnosci:
     //wartosc zmiennej Licznik->nawias ")"->zawartosc zmiennej tresc_znaleziona->
     //znak nowej linii '\n'
     }
    plik_odczytywany.close();//zamknij plik "Tekst.dat"
    plik_zapisywany.close();//zamknij plik "Tekst.txt"
 }
    else
    {
    return 0; //jezeli plik Tekst.dat nie istnieje to zakoncz prace
    }

     std::cin.get();//poczekaj na wcisniecie klawisza ENTER

return 0;
}
//---------------------------------------------------------------------------

Plik Tekst.dat wygląda tak:

Kod: Zaznacz cały

11<tekst>11111111111
22222222222222
444444444444<A>9999999
{{{{{{{}}}}}}}}}}}
////////<B>\\\\\\<C>\\\\
Plik Tekst.txt po wpisaniu danych wygląda tak:

Kod: Zaznacz cały

1) tekst
2) A
3) B
4) C

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 15 maja 2009, 8:08

Zamiast umieszczać cały kod w warunku sprawdzającym istnienie pliku lepiej (ze względu na czytelność przynajmniej) napisać:

Kod: Zaznacz cały

if(!plik_odczytywany) return 0;
A resztę programu po prostu umieścić po tym.

Awatar użytkownika
zenzee
-
Posty: 75
Rejestracja: 25 lip 2008, 10:41
Lokalizacja: Samoa Zachodnie

Post autor: zenzee » 15 maja 2009, 11:44

Aha,jak zwykle :???:
Czy tutaj:

Kod: Zaznacz cały

while((getline(plik_odczytywany,tresc_znaleziona,'<')&& 
       (getline(plik_odczytywany,tresc_znaleziona,'>')))) 
     { 
    ++Licznik;//preinkrementuj licznik,jak cos znajdziesz 
    std::cout<<tresc_znaleziona<<'\n';//wyswietl znalezione tresci 
    plik_zapisywany<<Licznik<<") "<<tresc_znaleziona<<'\n';//i zapisz je do pliku Tekst.txt w kolejnosci: 
     //wartosc zmiennej Licznik->nawias ")"->zawartosc zmiennej tresc_znaleziona-> 
     //znak nowej linii '\n' 
     }
w warunku nie pominąłem znaku końca linii/pliku?

MiW
Użytkownik
Posty: 226
Rejestracja: 28 sty 2007, 11:32
Lokalizacja: Kraków
Kontakt:

Post autor: MiW » 16 maja 2009, 20:53

Wygląda na to, że niczego nie zapomniałeś. Całkiem ładny program.

Awatar użytkownika
zenzee
-
Posty: 75
Rejestracja: 25 lip 2008, 10:41
Lokalizacja: Samoa Zachodnie

Post autor: zenzee » 16 maja 2009, 22:15

Tak,to fajnie. :wink:
Pozdro.

ODPOWIEDZ