【问题标题】:C++ - Read in file lines separated by a commaC++ - 读入用逗号分隔的文件行
【发布时间】:2013-03-25 17:58:55
【问题描述】:

我尝试查找我正在尝试做的事情,但我无法具体找到我正在尝试做的事情。我有一个包含多行的文本文件,如下所示:

12345,12345,12.34,12345,12345

每一行的格式都相同,我想获取每一行并将数字插入某些变量。像这样的:

file >> int1 >> int2 >> double1 >> int3 >> int4;

但这对我来说很难做到,因为每个数字都用逗号分隔。当有一个“空格”时,我曾经能够做到这一点,但逗号真的让我失望。有什么想法吗?

【问题讨论】:

  • 将文件读入int,然后读入char
  • 抱歉,我看到了那个,但我认为它不同,因为我在逗号后面看到了空格。

标签: c++ ifstream getline comma


【解决方案1】:
char ch;
file >> int1 >> ch >> int2 >> ch >> dbl >> ch >> int3 >> ch >> int4;

【讨论】:

  • @gongzhitaao: 可以是任何字符...这是不健壮的。
  • @LightnessRacesinOrbit 是的。但是 OP 假设 每一行的格式都相同
  • @gongzhitaao: ...并且依赖于所有输入的假设是不可靠的。
【解决方案2】:

你可能想试试fscanf

这样的?

 fscanf(filepointer, "%d,%d,%f,%d,%d\n", &int1, &int2, &double1, &int3, &int4);

【讨论】:

  • 我是个白痴。所以等等,我是新手,但由于我使用的是 C++,那么 C 中的所有内容都应该可以正常工作吗?
  • @Arubix:是的。不过,关于您是否应该使用任何 C 库函数,这是一个有争议的问题。至少,尽量减少对它们的使用。但对于 I/O,它们通常更好。
  • @LightnessRacesinOrbit:或者更糟。例如,scanf 应该从不(我的意思是几乎从不)与 %s 一起使用。
【解决方案3】:

前面的建议效果很好。但是,如果您可以使用 c++11 并且需要更强大的解决方案,我建议您使用 c++11 正则表达式库:http://en.cppreference.com/w/cpp/regex

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多