[C++] Pliki tekstowe


(Sebikom) #1

Witam

Potrzebuje poleceń do zapisu i odczytu plików testowych, nazwy potrzebnych bibliotek i najlepiej wszystko co z tym związane.

Potrzebuje to do obiektowego c++.

Szczególnie chodzi mi o wczytanie pliku, podstawienie pod tablice kolejnych jego linijek i nadpisanie go.

Szukałem troche tego ale coś mi niewychodzi


(Krzkaczor) #2

Hmmm

http://www.google.pl/search?client=fire ... j+w+Google


(Sebikom) #3

fstream xxx("c:\xxx.txt"); - otwarcie pliku do odczytu/zapisu

i teraz jak mam tam cos zapisac wczytac?

xxx="1"; niedziala


(Fiołek) #4
xxx << "1";

...

http://www.cplusplus.com/reference/iostream/fstream/


(Sebikom) #5

Wiem ze jest jakieś polecenie getline do wczytywania linii

Chciałbym to zastosować do podstawiania kolejnych linii z pliku pod tablice i na odwrót z tablicy zapisywanie do pliku

Co tu jest zle?

int k;

String rekordzista[6];



void wyniki()

{


ifstream in("rekordzisci.txt");


k=1;


while(getline(in, rekordzista[k]))

{

        k++;

}

}

(Rafal M F) #6

Napisałeś String z duże litery.

Jeżeli dodałeś odpowiednie pliki nagłówkowe i deklaracje:

using namespace std;

to powinno działać.

Edit: jeszcze jedno, dlaczego zaczynasz od k=1? W c/c++ takie rzeczy zawsze numeruje się od 0 do rozmiar -1.


(Sebikom) #7

Zaczynam od 1 poniewaz pod 0 mam cos innego

Jak zamknac ifstream in, zeby moc wczytac dane z drugiego pliku?


(Sawyer47) #8

Odpowiedzi na większość pytań na temat C++ znajdziesz tutaj: http://www.cppreference.com/wiki/

Metoda close.


(Sebikom) #9

jakby infile.close(); dzialalo to bym niepisal


(Sawyer47) #10

W takim razie napisz co masz, to się zobaczy czemu nie działa u Ciebie, bo do zamykania uchwytu do pliku służy właśnie metoda close.


(Sebikom) #11
ifstream in("rekordy.txt");

k=1;

while(getline(in, rekord[k]))

{

        k++;

}

infile.close();

wyskakuje blad ze niewie co to jest infile


(Sawyer47) #12

No najpierw definiujesz obiekt klasy ifstream o nazwie in, więc pewnie chodziło Ci o wywołanie metody close na nim, to jest in.close(), czyż nie?


(Sebikom) #13

No dziala tylko ciagle wyskakuje multiple declaration for in przy

ifstream in("rekordy.txt", ifstream::in);

k=1;

while(getline(in, rekord[k]))

{

        k++;

}

in.close();





ifstream in("rekordzisci.txt");

k=1;

while(getline(in, rekord[k]))

{

        k++;

}

in.close();

(Sawyer47) #14

Bo dwukrotnie deklarujesz to się nie dziw. Chyba niezbyt dobrze znasz C++ / klasę fstream, i nie za bardzo potrafisz korzystać z dokumentacji. Chodzi Ci o metodę open - http://www.cppreference.com/wiki/io/open


(Sebikom) #15

teraz mam troblem z zamiana

integera na string /string na integer( zeby moc zapisac w piku zmienne typu int)

i ansistring na stringa (zeby dzialalo rekordzista[0]=InputBox("Rekordy","Podaj swoj nick",""); gdzie tablica jest string a inputbox ansistring)


(Rafal M F) #16

Nie niejesteś za wygodny? Co do zamiany int na string/string na int można użyć np:

http://www.cplusplus.com/reference/iost ... ingstream/

I zamieniać poprzez strumienie.

A co do zamiany napisów w stylu C na string to:

http://www.cplusplus.com/reference/string/string/

i metoda insert.


(Sebikom) #17

Wiesz ta strona dużo mi nie mówi ... w tym temacie ona padla juz 3 razy

tzn?


(Rafal M F) #18

Co znaczy padła? Strona jest dokumentajcją biblioteki języka wraz z przykładami.

Zamienić przez strumienie można tak(drobny przykład):

#include 

#include 

int main()

{

	std::stringstream ss (std::stringstream::in | std::stringstream::out);

	ss<<"321";

	int i;

	ss>>i;

	std::cout << i;

}

O czywiście po każdej takiej próbie konwersji nalęzy sprawdzić czy się udało metoda fail:

http://www.cplusplus.com/reference/iost ... /fail.html


(Sebikom) #19

Mam taki problem ze nic sie niewyswietla w showmessage

stringstream czas (stringstream::out | stringstream::in);

czas >> rekord[0];

ShowMessage(AnsiString(rekord[0].c_str()));

(Sawyer47) #20

Na podstawie tego co podałeś, to strumień jest pusty. Tworzysz strumień i od razu z niego wczytujesz dane (których w nim nie ma, bo skąd?). Czytałeś DOKUMENTACJĘ? Proszę przykład z niej:

stringstream s1;

    int i = 22;

    s1 << "Hello " << i << endl;

    string s2 = s1.str();

    cout << s2;

Ta strona pewnie też już padała: http://www.cppreference.com/wiki/io/sstream/start

Podpowiedź: jeśli ktoś podaje stronę to zazwyczaj dlatego, że tam jest rozwiązanie twojego problemu