读取一个文件,多个delimeter



所以我有一些代码从文件中读取,并用文件中的逗号分隔。然而,文件中的某些内容通常在逗号后面或前面有空格,因此在执行代码时会引起一些问题。

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

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。

最新更新