Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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++ 从文件中读取,多个Delimeter_C++_C++11 - Fatal编程技术网

C++ 从文件中读取,多个Delimeter

C++ 从文件中读取,多个Delimeter,c++,c++11,C++,C++11,所以我有一些代码,它从一个文件中读取,并用文件中的逗号分隔。但是,文件中的某些内容通常在逗号之后或之前有空格,因此在执行代码时会产生一些问题 这是我从文件中读取数据的代码。使用同样的格式,我想知道是否有一种方法来准备这个空间 while(getline(inFile, line)){ stringstream linestream(line); // each field of the inventory file string type;

所以我有一些代码,它从一个文件中读取,并用文件中的逗号分隔。但是,文件中的某些内容通常在逗号之后或之前有空格,因此在执行代码时会产生一些问题

这是我从文件中读取数据的代码。使用同样的格式,我想知道是否有一种方法来准备这个空间

while(getline(inFile, line)){
        stringstream linestream(line);
        // each field of the inventory file 
        string type;
        string code;
        string countRaw;
        int count;
        string priceRaw;
        int price;
        string other;
        // 
        if(getline(linestream,type,',') && getline(linestream,code,',')
        && getline(linestream,countRaw,',')&& getline(linestream,priceRaw,',')){
            // optional other
            getline(linestream,other,',');
            count = atoi(countRaw.c_str());
            price = atoi(priceRaw.c_str());
            StockItem *t = factoryFunction(code, count, price, other, type);
            list.tailAppend(t);
       }
    }

解决这类问题的更好方法是使用状态机。你得到的每个角色都应该以一种简单的方式行动。您没有说明是否需要在不以逗号分隔的单词之间使用空格,所以我想您需要它们。我不知道你需要用双空格做什么,我想你需要保持原样。因此,开始一次读取一个字符,有两个变量:起始位置和极限位置。启动时,您正在确定启动位置(状态1)。如果发现任何字符与空格字符不同,请将起始位置设置为该字符,然后将状态更改为(状态2)。当处于状态2时,当您找到一个非空格字符时,您将限制位置设置为比您找到的字符的下一个位置。如果你找到一个逗号字符,你会得到一个从开始到限制的字符串,然后你会再次变为状态1。

实际上比表面上显示的更难解析,而且可能有很多奇怪的角点,很难处理。我的建议是,你应该试着找一个库来处理文件的解析。你想问什么还不清楚。你期望得到什么样的输出?你到底遇到了什么问题?我得到了一些像这个“数据”这样保存的数据,还有一些像这个“数据”这样保存的数据,还有一些像这个“数据”这样保存的数据,正如你所看到的,我只是想去掉这些空格@bkVnet@Hidden“我只想去掉空格”请检查一下。