wczytanie pliku - co sie dzieje z tekstem?

0

Witam

Prosze o male nakierowanie petla niby przechodzi przez wszystkie linie pliku ale wynik jest troszke zastanawiajacy

funkcja:

int load(){
    std::fstream plik;
    plik.open( "plik.txt", std::ios::in | std::ios::out );
  if( plik.good() == true ){
    std::cout << "Uzyskano dostep do pliku!" << std::endl;
    string napis;
    cout << "Zawartosc pliku:" << endl;
    while( !plik.eof() ) {
        cout << "napis   " <<  napis << "  koniec napisu '\n'";
        napis = "";
        getline( plik, napis );
    }
    plik.close();
}

plik tekstowy:

linia 1 tekst jakis
linia 2 tekst jakis
linia 3 tekst jakis
linia 500 tekst jakis
linia 90000 tekst jakis
linia 12212121 tekst jakis
linia 12121221 tekst jakis

wynik:

Uzyskano dostep do pliku!
Zawartosc pliku:
napis     koniec napisu '
  koniec napisu 'tekst jakis
  koniec napisu 'tekst jakis
  koniec napisu 'tekst jakis
  koniec napisu '0 tekst jakis
  koniec napisu '000 tekst jakis
  koniec napisu '212121 tekst jakis
'
RUN SUCCESSFUL (total time: 1s)
0

może ten getline( plik, napis ) powinien być przed cout << "napis " << napis << " koniec napisu '\n'"; bo na początku to ty wypisujesz pusty string "napis"

0

Wypisujesz "napis" ZANIM coś do niego wczytasz, ergo akurat tutaj czyta ci coś ze stosu stąd jakieś dziwne rzeczy.

0

hmm chyba nie ma to znaczenia? bo zmienna "napis" jest zewnetrzna ale i zamienilem kolejnosc by sie upewnic i nie zmienia to niczego... nawet w petli tworze stringa

int load(){
    std::fstream plik;
    plik.open( "plik.txt", std::ios::in | std::ios::out );
  if( plik.good() == true ){
    std::cout << "Uzyskano dostep do pliku!" << std::endl;
    cout << "Zawartosc pliku:" << endl;
    while( !plik.eof() ) {
        string napis;
        napis = "";
        getline( plik, napis );
        cout << "napis   " <<  napis << "  koniec napisu '\n'";
    }
    plik.close();
}

wynik:

Uzyskano dostep do pliku!
Zawartosc pliku:
  koniec napisu 'ekst jakis
  koniec napisu 'tekst jakis
  koniec napisu 'tekst jakis
  koniec napisu '0 tekst jakis
  koniec napisu '000 tekst jakis
  koniec napisu '212121 tekst jakis
'napis   linia 12121221 tekst jakis  koniec napisu '
'
RUN SUCCESSFUL (total time: 1s)

0

A to przejście do nowej linii dlaczego jest w apostrofach?

0
int load(){
    std::fstream plik;
    plik.open( "plik.txt", std::ios::in | std::ios::out );
  if( plik.good() == true ){
    std::cout << "Uzyskano dostep do pliku!" << std::endl;
    cout << "Zawartosc pliku:" << endl;
    while( !plik.eof() ) {
        string napis;
        napis = "";
        getline( plik, napis );
        cout << "napis   " <<  napis << "  koniec napisu" << endl;
    }
    plik.close();
}

wynik:

Uzyskano dostep do pliku!
Zawartosc pliku:
  koniec napisu tekst jakis
  koniec napisu tekst jakis
  koniec napisu tekst jakis
  koniec napisu00 tekst jakis
  koniec napisu0000 tekst jakis
  koniec napisu2212121 tekst jakis
napis   linia 12121221 tekst jakis  koniec napisu
RUN SUCCESSFUL (total time: 6s)
2

Jeżeli wydrukujesz:

cout << "napis   " <<  "linia 1 tekst jakis\r" << "  koniec napisu" << endl;

to na ekranie dostaniesz:

  koniec napisu tekst jakis

Problem polega na tym że masz skopany plik. Albo to robisz pod linuksem a masz plik zrobiony w windows albo to robisz pod windows zaś plik masz zrobiony jakimś twoim programem w którym pomylona kolejność \n\r zamiast \r\n.
Jeżeli to linux to użyj na pliku dos2unix.
Jeżeli windowsy to popraw tamten program lub zrób plik w normalnym notepadzie.

0

kod dziala poprawnie w "dev C++" V 5.2.0.3
a w Netbensie z dalaczonym GCC dzieja sie takie anomalie

1 użytkowników online, w tym zalogowanych: 0, gości: 1