读取以逗号分隔的数字,并将它们写入由制表符分隔的文件

时间:2018-01-28 17:23:20

标签: c++

给定输入文件,例如:

 5,6
 3,4
 4,7

我想将其转换为以下输出,其中数字由制表符分隔:

 5  6
 3  4
 4  7

我有以下代码读取输入文件并尝试写入输出文件:

std::ofstream outputFile("test.txt");

if (outputFile.is_open()) {

    while(std::getline(infile, line, ',')) {
        std::stringstream   linestream(line);
        int val1;
        int val2;

        linestream >> val1 >> val2;
        outputFile << val1 << "\t" << val2 << "\n";
    }
}

问题是我的输出文件包含:

 1       -1431507824
 3       5
 6       6
 2       6

有人可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

因为你添加&#39;,&#39;作为显式分隔字符。

以及你想要的

int main(){
        std::ofstream outputFile("test.txt");
        std::istringstream input;
        input.str("5,6\n3,4\n4,7\n");
        string line;
        stringstream linestream;
            while(getline(input, line)) {
                std::stringstream   linestream(line);
                int val1;
                int val2;
                char comma;         
                linestream >> val1>> comma >> val2;
                outputFile << val1 << "\t" << val2 << "\n";
        }
}

输出:

5   6
3   4
4   7

答案 1 :(得分:1)

您使用逗号分隔,因此只读取第一个调用中的一个值。一种可能的解决方法是读取一行到换行符,然后显式读入两个值之间的逗号:

while(std::getline(infile, line)) {
    std::stringstream   linestream(line);
    int val1;
    int val2;
    char comma;
    linestream >> val1 >> comma >> val2;
    outputFile << val1 << "\t" << val2 << "\n";
}

答案 2 :(得分:1)

使用

std::getline(linestream, data, ',');

你读到了流中第一个逗号的所有内容。您将丢弃此数据。

然后当你做

linestream >> val1 >> val2;

您将剩余的值读入val1,然后val2的提取失败,因为没有其他内容可供阅读。这会导致val2 未初始化并且不确定值。

一个简单的解决方案是简单地转换data中的字符串(使用std::stoi)并分配给val1(因为这是它包含的值),然后将剩余的值读入val2。像

这样的东西
std::getline(linestream, data, ',');
val1 = std::stoi(data);
linestream >> val2;

通过编辑,上述答案仅部分有效。解决方案基本相同。