• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Plik csv map

0 głosów
151 wizyt
pytanie zadane 6 listopada 2018 w C i C++ przez inform Nowicjusz (120 p.)

Witam, mam program który ma wyświetlać z pliku csv dane: id, imie,nazwisko. Program kompiluje się, ale nie działa jak powinien. Ktoś może pomóc z tym?

Wyświetla coś takiego:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <iterator>
#include <map>

using namespace std;

int main()
{
    string nazwisko;
    string imie;
    string id;

    map<int,string>::iterator it;
    map<int,string>mapa;

    fstream plik;

    plik.open("plik.csv",ios::in);
    if(plik.good()==true)
    {
        while(!plik.eof())
        {
            getline(plik,id,';');
            getline(plik,imie,';');
            getline(plik,nazwisko,';');

            int numer=atoi(id.c_str());
            mapa.insert(pair<int,string>(numer,imie+ ' ' +nazwisko));

            for(it=mapa.begin(); it != mapa.end(); ++it)
            {
                cout<<'\t'<<it->first<<'\t'<<it->second<<endl;
            }
        }
        plik.close();
    }
    system("PAUSE");
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 6 listopada 2018 przez criss Mędrzec (172,640 p.)
Nie przeskakujesz znaku nowej linii. Po linii z getlinem wczutujacym nazwisko daj plik.get(); albo plik.seekg(1, ios_base::cur);
komentarz 6 listopada 2018 przez inform Nowicjusz (120 p.)
Teraz pokazuje imie, nazwisko, tylko nie zatrzymuje się program, i dwa razy pokazuje id, coś chyba muszę w kodzie zmienić
komentarz 6 listopada 2018 przez criss Mędrzec (172,640 p.)
wrzuć jeszcze ten csv to ci lepiej pomogę może
komentarz 6 listopada 2018 przez inform Nowicjusz (120 p.)
0 głosów
odpowiedź 6 listopada 2018 przez j23 Mędrzec (169,680 p.)
edycja 6 listopada 2018 przez j23
int main()
{
	const std::streamsize max_strsize = std::numeric_limits<std::streamsize>::max();
	std::map<int, std::string> mapa;
	std::ifstream plik("plik.csv");

	std::string line;

	while(std::getline(plik, line))	
	{
		std::istringstream iss(line);
		std::string nazwisko;
		std::string imie;
		int id;	

		if(iss >> id 
			&& iss.ignore(max_strsize,';')
			&& std::getline(iss, imie, ';')
			&& std::getline(iss, nazwisko, '\n'))
		{
			mapa.insert(std::make_pair(id, imie + ' ' + nazwisko));
		}
		else
		{
			std::clog << "SKIPPING LINE: " << line << '\n';
		}
	}

	for(auto &it : mapa)
	{
		std::cout << '\t' << it.first << '\t' << it.second << '\n';
	}

	system("PAUSE");
	return 0;
}

 

Podobne pytania

+1 głos
1 odpowiedź 26 wizyt
pytanie zadane 16 grudnia 2021 w C# przez disaster Bywalec (2,020 p.)
+1 głos
1 odpowiedź 39 wizyt
pytanie zadane 23 listopada 2021 w SQL, bazy danych przez KonDZIKs Bywalec (2,060 p.)
0 głosów
2 odpowiedzi 220 wizyt
pytanie zadane 22 marca 2021 w C# przez disaster Bywalec (2,020 p.)

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...