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“我只想去掉空格”请检查一下。