[C++]Wczytywanie pliku tekstowego do tablicy


(Magda Foks) #1

Witam,

piszę program który wczytuje dwa pliki tekstowe do programu. Napisałam funkcję readFile, której zadaniem jest otworzenie tych plików i zapisanie do stalych tablic. Jednak, pliki nie wczytują się.

Biblioteki z których korzystam to string.h, fstream oraz conio.h. Używam Visual Studio 2012. Windows7.

int readFile (char * t, char dane [][KOLUMNA]) //wczytuje plik

{


	fstream plik(t , ios::in | ios::out | ios::ate);

	plik.close();


	plik.open(t);


		if( plik.good() == true )

		{

			int suma_line = 0;

				while(!plik.eof())

				{

					plik.getline(dane[suma_line],KOLUMNA);

					++suma_line;		

				}

			return suma_line;

		} 

		else return -1;

}

Kod działa jeśli w linijce

plik.getline(dane[suma_line],KOLUMNA);

zamiast dane[suma_line] napiszę tablica[suma_line] bądź tablica2[suma_line] = to moje dwie const tablice. Jednak wtedy wczytuje się tylko jedna z nich (sprawdzam w drugiej funkcji która wyświetla obie tablice.

Nie wiem, jak poprawić ten kod, próbowałam już chyba wszystkiego :slight_smile:

Z góry dziękuje za pomoc.


(dobryteddy) #2
int readFile (char *t, char dane [][KOLUMNA]) //wczytuje plik

{

   fstream plik;

   plik.open(t ,ios::in);


   if(plik.good())

   {

	   int suma_line = 0;

	   while(!plik.eof())

	   {

		   plik.getline(dane[suma_line],KOLUMNA);

		   ++suma_line;      

	   }


	   plik.close();

	   return suma_line;

   }

   else return -1;

}

(etam) #3

Widzę, że lubicie masochizm.

Ansi C++

#include 

#include 

#include 

#include 


std::vector read_file(const char* filename)

{

    std::vector contents;

    std::ifstream file(filename);

    while (file) {

        std::string line_buffer;

        std::getline(file, line_buffer);

        contents.push_back(line_buffer);

    }

    return contents;

}


int main()

{

    const std::vector bla_txt = read_file("bla.txt");

    for (std::vector::const_iterator line = bla_txt.begin(); line != bla_txt.end(); ++line)

        std::cout << *line << std::endl;

    return 0;

}

C++11

#include 

#include 

#include 

#include 


std::vector read_file(const char* filename)

{

    std::vector contents;

    std::ifstream file(filename);

    while (file) {

        std::string line_buffer;

        std::getline(file, line_buffer);

        contents.push_back(std::move(line_buffer));

    }

    return contents;

}


int main()

{

    const auto bla_txt = read_file("bla.txt");

    for (const auto& line : bla_txt)

        std::cout << line << std::endl;

    return 0;

}

A nagłówki string.h i conio.h możesz wywalić.