所以我有一些代码从文件中读取,并用文件中的逗号分隔。然而,文件中的某些内容通常在逗号后面或前面有空格,因此在执行代码时会引起一些问题。
这是我从文件中读取数据的代码。使用相同的格式,我想知道是否有一种方法来准备这个空间
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。