C++ wczytywanie pliku CSV

C++ wczytywanie pliku CSV
A9
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 2 lata
  • Postów:43
0

Cześć, od dłuższego czasu męczę się z prostym zadaniem, a mianowicie, wczytywaniem i zapisywaniem danych do pliku csv. Próbowałem własnymi siłami to zrobić, ale nie udało mi się, więc spróbowałem pomóc sobie internetem. W internecie znalazłem następujący kod:

Kopiuj
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

struct Matrix
{
    int k, w;
    float **M;
};

Matrix ReadCSV(string fileName)
{

	vector<vector<string>> content;
	vector<string> row;
	string line, word;

	fstream file (fileName, ios::in);
	if(file.is_open())
	{
		while(getline(file, line))
		{
			row.clear();

			stringstream str(line);

			while(getline(str, word, ','))
				row.push_back(word);
			content.push_back(row);
		}
	}
	else
		cout<<"Could not open the file\n";

	for(int i=0;i<content.size();i++)
	{
		for(int j=0;j<content[i].size();j++)
		{
			cout<<content[i][j]<<" ";
		}
		cout<<"\n";
	}
}

int main()
{
    ReadCSV("a.csv");
    return 0;
}

Jednak to również nie rozwiązało mojego problemu. Program zwraca komunikat "Could not open the file"
Proszę o pomoc, już któryś dzień siedzę nad tym problemem

Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około godziny
  • Postów:1605
0

Czy plik, który próbujesz otworzyć, nazywa się a.csv i znajduje się w folderze, w którym szuka go Twoja aplikacja? Spróbuj zastąpić to ścieżką bezwzględną, mniej rzeczy może pójść nie tak…

A9
To już sprawdzałem, plik znajduje się w katalogu wraz z plikiem exe, nazwa jest poprawna :(
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około godziny
  • Postów:1605
0

To już sprawdzałem, plik znajduje się w katalogu wraz z plikiem exe, nazwa jest poprawna :(

To masz źle skonfigurowane IDE, a program nie jest wykonywany z folderu w którym jest plik wykonywalny. Bo kod zasadniczo działa, jeśli pominiemy fakt, że funkcja Matrix ReadCSV(string fileName) nie zwraca niczego, a już w szczególności Matrixa.

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
1

Gdy poawia sie taki błąd najpeije skorzystać std::perror i odczytać na strumieniu błędów w czy problem.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
3
adrian95 napisał(a):

Cześć ... W internecie znalazłem następujący kod:

Kopiuj
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>


struct Matrix
{
    int k, w;
    float **M;
};

Mam złą wiadomość.

Do kopiowania z internetu trzeba wyższych kwalifikacji, niż do pisania samodzielnie.
Autor tej struktury coś czuł, że mu podwójny pointer nie pasuje, ale że był znafcom C++ jakim był, napisał (albo ukradł) jak umiał. To typowy wzorzec, ale w C.

Można to napisać (wszystko przykłady szkolne dalekie od ideału)
a)

Kopiuj
class Matrix {
   public:
     vector<vestor<float>> mat;
     int getXsize() const;
     int getYsize() const;

    float getValue(int x,y) const;
    void setValue(int x, int y, float v) ;

     // tak naprawdę to operator tablicowy, ale nie napiszę go bez IDE
          
}

https://blog.michalt.pl/article/wielowymiarowy-operator-tablicowy-w-c-23

b)

Kopiuj
class Matrix {
private:
     vector<vestor<float>> mat;
   public:
     int getXsize() const;
     int getYsize() const;

    float getValue(int x,y) const;
    void setValue(int x, int y, float v) ;
}

c) a nawet bardziej "manualnie"

Kopiuj
class Matrix {
private:
     float** mat;
     int k, w;
   public:
      Matrix(int, int);
     int getXsize() const;
     int getYsize() const;

    float getValue(int x,y) const;
    void setValue(int x, int y, float v) ;
}

Można na kilka spsoobów rozwiazać konstruktor Macierzy o nieznanym z góry rozmiarze ... wszystko można...

Tak, że uważajcie skąd kopiujecie (ty i twój kododawca), <sarkazm>patrzcie na to krytycznie</sarkazm>, i nade wszystko próbujcie sami, a nie kopiujcie


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 1x, ostatnio: ZrobieDobrze

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.