Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;使用getLine_C++ - Fatal编程技术网

C++ 在C++;使用getLine

C++ 在C++;使用getLine,c++,C++,我有一个可以成功读取CSV文件的程序。所述CSV文件是由3列分隔的列表。每一列的每一行之间都有一个逗号。比如说 第1行——艺术家、流派、歌曲 第二行——迈克尔·杰克逊、流行音乐、惊悚片 等等。我想让我的程序做的是阅读第一行,并将艺术家、流派和歌曲作为选项打印给用户。比如说 “选择一个选项” 1.艺术家 2.体裁 3.歌 然后,当他们选择一个选项时,它会显示CSV文件中的所有艺术家、歌曲或流派 到目前为止,我有我的程序读取CSV并将每一行放入一个向量中。这是我到目前为止的代码 #include &

我有一个可以成功读取CSV文件的程序。所述CSV文件是由3列分隔的列表。每一列的每一行之间都有一个逗号。比如说

第1行——艺术家、流派、歌曲 第二行——迈克尔·杰克逊、流行音乐、惊悚片

等等。我想让我的程序做的是阅读第一行,并将艺术家、流派和歌曲作为选项打印给用户。比如说

“选择一个选项” 1.艺术家 2.体裁 3.歌

然后,当他们选择一个选项时,它会显示CSV文件中的所有艺术家、歌曲或流派

到目前为止,我有我的程序读取CSV并将每一行放入一个向量中。这是我到目前为止的代码

#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
    ifstream infile("music_list.csv");
    string line = "";
    vector<string> all_words;
    cout << "Hello";
    while (getline(infile, line))
    {
        stringstream strstr(line);
        string word = "";
        while (getline(strstr,word, ','))
        {
            all_words.push_back(word);
        }

        for (unsigned i = 0; i < all_words.size(); i++)
        {
            cout << all_words.at(i)<< "\n";
        }

    }
    system("pause");
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
ifstream infle(“music_list.csv”);
字符串行=”;
矢量所有_字;

cout首先,您必须读取csv文件并将行存储在向量中,您可以使用此函数来执行此操作

vector<string> readCsvFileContent(const string file)
{
        vector<string> buffer;
        ifstream configFile;
        configFile.exceptions(ifstream::badbit);
        try
        {
            configFile.open(file.c_str(),ifstream::in);
            if(configFile.is_open())
            {
                string line;                
                while (getline(configFile,line))
                {
                    buffer.push_back(line);
                }
                configFile.close();
            }           
        }
        catch (ifstream::failure e){            
            throw e;
        }
        return buffer;
}
vector readCsvFileContent(常量字符串文件)
{
向量缓冲区;
ifstream配置文件;
异常(ifstream::badbit);
尝试
{
打开(file.c_str(),ifstream::in);
if(configFile.is_open())
{
弦线;
while(getline(configFile,line))
{
缓冲器。推回(线路);
}
configFile.close();
}           
}
catch(ifstream::failure e){
投掷e;
}
返回缓冲区;
}
然后将每行条目拆分为2D向量。为此,您可以使用此函数

vector<vector<string>> processCsvList(vector<string> csvList)
{
    #define SINGER_CONFIG_COUNT 3 //number of comma separated data suppose to be in one line.
    #define DELIMITED_CHAR ","
    #define EMPTY_STRING "";

    vector<vector<string>> tempList;
    string configCell ="";
    for(vector<string>::iterator it = csvList.begin(); it != csvList.end(); ++it)
    {
        if(*it == EMPTY_STRING)
        {
            continue;
        }
        stringstream  configLine(*it);
        vector<string> tempDevice;
        for(int i=0; i<SINGER_CONFIG_COUNT; i++)
        {
            if(getline(configLine,configCell,DELIMITED_CHAR))
            {               
                tempDevice.push_back(configCell);
            }else
            {
            tempDevice.push_back(EMPTY_STRING);
            }
        }
        tempList.push_back(tempDevice);
    }
    return tempList;
}
向量进程csvList(向量csvList)
{
#定义SINGER_CONFIG_COUNT 3//假定在一行中的逗号分隔数据数。
#定义分隔字符“,”
#定义空字符串“”;
向量圣殿骑士;
字符串configCell=“”;
for(vector::iterator it=csvList.begin();it!=csvList.end();++it)
{
if(*it==空字符串)
{
继续;
}
stringstream配置行(*it);
矢量测速装置;

对于(int i=0;i,首先您必须读取csv文件并将行存储在向量中,您可以使用此函数来执行此操作

vector<string> readCsvFileContent(const string file)
{
        vector<string> buffer;
        ifstream configFile;
        configFile.exceptions(ifstream::badbit);
        try
        {
            configFile.open(file.c_str(),ifstream::in);
            if(configFile.is_open())
            {
                string line;                
                while (getline(configFile,line))
                {
                    buffer.push_back(line);
                }
                configFile.close();
            }           
        }
        catch (ifstream::failure e){            
            throw e;
        }
        return buffer;
}
vector readCsvFileContent(常量字符串文件)
{
向量缓冲区;
ifstream配置文件;
异常(ifstream::badbit);
尝试
{
打开(file.c_str(),ifstream::in);
if(configFile.is_open())
{
弦线;
while(getline(configFile,line))
{
缓冲器。推回(线路);
}
configFile.close();
}           
}
catch(ifstream::failure e){
投掷e;
}
返回缓冲区;
}
然后将每行条目拆分为2D向量。为此,您可以使用此函数

vector<vector<string>> processCsvList(vector<string> csvList)
{
    #define SINGER_CONFIG_COUNT 3 //number of comma separated data suppose to be in one line.
    #define DELIMITED_CHAR ","
    #define EMPTY_STRING "";

    vector<vector<string>> tempList;
    string configCell ="";
    for(vector<string>::iterator it = csvList.begin(); it != csvList.end(); ++it)
    {
        if(*it == EMPTY_STRING)
        {
            continue;
        }
        stringstream  configLine(*it);
        vector<string> tempDevice;
        for(int i=0; i<SINGER_CONFIG_COUNT; i++)
        {
            if(getline(configLine,configCell,DELIMITED_CHAR))
            {               
                tempDevice.push_back(configCell);
            }else
            {
            tempDevice.push_back(EMPTY_STRING);
            }
        }
        tempList.push_back(tempDevice);
    }
    return tempList;
}
向量进程csvList(向量csvList)
{
#定义SINGER_CONFIG_COUNT 3//假定在一行中的逗号分隔数据数。
#定义分隔字符“,”
#定义空字符串“”;
向量圣殿骑士;
字符串configCell=“”;
for(vector::iterator it=csvList.begin();it!=csvList.end();++it)
{
if(*it==空字符串)
{
继续;
}
stringstream配置行(*it);
矢量测速装置;

对于(int i=0;i您可以创建一个
std::map
,这样您就可以将CSV文件从第2行开始的每一列存储为字符串向量,由CSV文件第1行列中出现的文本设置键控

然后,您可以通过迭代
std::map
的键来显示字段的名称,这些键按字母顺序方便地存储


读取CSV文件第一行的任务可以由您已有的代码执行,也可以由考虑到全功能CSV文件中引用的字段等的更复杂的代码执行。

您可以创建一个
std::map
,以便从第2行开始存储CSV文件的每一列以字符串向量的形式显示在地图中,由CSV文件第1行列中显示的文本设置关键帧

然后,您可以通过迭代
std::map
的键来显示字段的名称,这些键按字母顺序方便地存储

读取CSV文件第一行的任务可以由您已有的代码执行,也可以由考虑到全功能CSV文件中引用字段等的更复杂的代码执行。

related:related: