Stránka 1 z 1

C++ načtení libovolného řádku z CSV

Napsal: ned 23. říj 2011, 13:15
od Shadow2334
Ahoj, potřeboval bych poradit, jak v Céčku docílit toho, abych mohl načíst třeba druhý řádek z CSV souboru, bez toho aby program načetl všechny ostatní.

Díky za pomoc :)

EDIT:
Napadlo mne, že by se celý CSV dal načíst do pole a pak z toho zobrazit pouze ty a ty prvky.. ale jak to CSV načíst do toho pole? :-D

Re: C++ načtení libovolného řádku z CSV

Napsal: úte 25. říj 2011, 15:12
od Maranov
Blbě. Pokud vím, existuje jen seek fungující po byte, ne po řádcích, ten by fungoval jen v případě, že by byly všechny řádky stejné.

Řešením tedy je načítat pom. getline(), dokud nenarazíš na správný řádek (podle jeho formátu nebo podle pořadového čísla, jak je libo).

Pro nějaké složitější náhodné úpravy by nebylo od věci načíst soubor celý, otázka je, co děláš. Samozřejmě, ideální by pak bylo načíst to CSV jako dvourozměrné pole, s řádky a sloupci, jak se CSV interpretuje.

Re: C++ načtení libovolného řádku z CSV

Napsal: úte 25. říj 2011, 17:27
od Shadow2334
díky za reakci, už jsem to vyřešil následovně, ale s tím načením do toho pole by to bylo dobré.. musím to ještě nějak prokoumat.

Kód: Vybrat vše

int main ()
{
    ifstream inFile ("vyrobky.csv");
    string line;
	ofstream myfile;
	myfile.open ("nakup.csv", ios::out | ios::app);
    int linenum = 0;
	int cislo;
	cout << "Zadejte cislo polozky, kterou chcete objednat: ";
	cin >> cislo;
	cout << "\nKod\tNazev\t\tCena za kus"<< endl;
	while (getline (inFile, line) && cislo!=2)
    {
		
		cislo--;
        linenum++;
        istringstream linestream(line);
        string item;
        int itemnum = 0;
        while (getline (linestream, item, ';'))
        {
            itemnum++;
        }
    }
    while (getline (inFile, line) && cislo!=1)
    {
		cout << "";
		myfile << "";
		cislo--;
        linenum++;
        cout << "";
		myfile << "\n";
        istringstream linestream(line);
        string item;
        int itemnum = 0;
        while (getline (linestream, item, ';'))
        {
            itemnum++;
            cout <<item << "\t";
			myfile << item << ";";
        }
    }
	myfile.close();
	inFile.close();
	flushall();
	getchar();
    return 0;
}