0

在我的程序中,我使用以下代码从命令行参数中获取两个文件名:

ifstream routesFile (arv[1]);
ifstream citiesFile (arv[2]);

然后我继续阅读文件并获取数据。这两个文件都是 CSV:

while(citiesFile.good()){
        string city;
        string country;
        string xString;
        string yString;
        getline(citiesFile, country, ',');
        getline(citiesFile, city, ',');
        getline(citiesFile, xString, ',');
        getline(citiesFile, yString);
...
}

当我在 Visual Studio 中使用硬编码的文件名执行此操作时,它工作正常。当我在使用 g++ 后在 linux 中使用命令行参数时,它可以正确打开文件,但之后会出现很多错误。为了测试文件读取,我打印了一些导致的读取值

terminate called after throwing an instance of 'std::out_of_range'
  what():  map::at
hereELF
Òœc½Å¹jn!ýô (EÕL˜C

的出现here是由于实际上是在程序中打印出来的。它不是由错误引起的,我手动打印它来测试代码。

似乎无法正确读取数据。在城市文件的文件中,每行总是有 4 个值,每个值由单个命令分隔,没有空格,并且文件中的行分隔符是换行符。正如我上面所说,它在 Visual Studio 中运行良好,所以我认为实际数据没有问题,只是阅读它。

4

2 回答 2

0

Linux 和 window 有不同的换行符。Linux '\n',Windows '\r\n'。如果您只是将文件复制到 linux 中,则需要在程序中处理这些文件。你可以看看在Linux 和 Windows 下混合 cin 和 getline作为参考。

于 2013-04-20T02:56:56.310 回答
0

如果您只是将 Windows 文件移动到 Linux,请查看工具dos2unix来转换文件并修复行尾。输出中的“EOL”表示结尾可能有问题。

http://www.linuxcommand.org/man_pages/dos2unix1.html

于 2013-04-20T02:58:57.177 回答