Как игнорировать первую запятую в строке, чтобы getline получал полную строку - PullRequest
0 голосов
/ 23 сентября 2018

Я читаю в Netflix шоу из файла CSV в массив моего объекта с помощью getline.Некоторые строки имеют две запятые, поэтому, когда getline встречает первую, она останавливается на половине строки, разделяющей ее.Например, «грубый и сексуальный юмор, язык и содержание некоторых наркотиков» можно разделить на «грубый и сексуальный юмор» и «язык и содержание некоторых наркотиков».Это влияет на остальные данные, так как getline запускается снова с неправильной точки в файле.Есть ли способ, которым я могу игнорировать первую запятую, чтобы полная строка сохранялась в соответствующей переменной в массиве?

Это первые три строки в файле csv:

White Chicks,PG-13, грубый и сексуальный юмор, язык и содержание некоторых наркотиков, 80,2004,82,80

Lucky Number Slevin, R, сильное насилие, сексуальное содержание и язык взрослых, 100,2006, NA, 82

Анатомия Грея, TV-14, родители настоятельно предупреждают.Может быть неподходящим для детей в возрасте 14 лет и младше. 90,2016,98,80

Это код в main.cpp

#include <iostream>
#include "Video.h"
using namespace std;

int main() {
    Video playlist;
    Video Netflixplaylist[1000];//Declare Video array
    playlist.CreatePlaylist(Netflixplaylist);
    cout << Netflixplaylist[0].media1.title << endl;
    cout << Netflixplaylist[1].media1.title << endl;//Test if data was properly stored
    return 0;
}

Это код в Video.cpp

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

#include "Video.h"//Inlcude Video.h file
void Video::CreatePlaylist(Video playlist[1000]){
    ifstream myfile;
    int row = 0;
    myfile.open("/Users/Auditore/Desktop/Netflix_Shows.csv");
    while(!myfile.eof()){
        for(row; row < 1000; row++){
            getline(myfile, playlist[row].media1.title, ',');
            getline(myfile, playlist[row].media1.rating, ',');
            getline(myfile, playlist[row].media1.rating_lv, ',');
            getline(myfile, playlist[row].media1.description, ',');
            getline(myfile, playlist[row].media1.release_year, ',');
            getline(myfile, playlist[row].media1.user_rate, ',');
            getline(myfile, playlist[row].media1.user_rate_size, '\n');
        }
    }
}

Это код в Video.h

#ifndef Video_h
#define Video_h
#include <fstream>
using namespace std;
struct MediaInfo{
    string title;
    string rating;
    string description;
    string rating_lv;
    string release_year;
    string user_rate;
    string user_rate_size;
};
class Video {//Video class
private:
    ifstream myfile;
public:
    std::string playlistname = "My Bored Playlist";//Set playlistname to Boring Playlist
    MediaInfo media1;
    void CreatePlaylist(Video playlist[1000]);
};

#endif
...