gpt4 book ai didi

c++ - CSV 解析器适用于 Windows,不适用于 Linux

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:13 24 4
gpt4 key购买 nike

我正在解析如下所示的 CSV 文件:

E1,E2,E7,E8,,,
E2,E1,E3,,,,
E3,E2,E8,,,
E4,E5,E8,E11,,,

我将每行中的第一个条目存储在一个字符串中,其余的存储在一个字符串 vector 中:

while (getline(file_input, line)) {
stringstream tokenizer;
tokenizer << line;
getline(tokenizer, roomID, ',');
vector<string> aVector;
while (getline(tokenizer, adjRoomID, ',')) {
if (!adjRoomID.empty()) {
aVector.push_back(adjRoomID);
}
}
Room aRoom(roomID, aVector);
rooms.addToTail(aRoom);
}

在 Windows 中,这工作正常,但在 Linux 中,每个 vector 的第一个条目神秘地丢失了第一个字符。例如,在 while 循环的第一次迭代中:

roomID 将是 E1aVector 将是 2 E7 E8

然后是第二次迭代:roomID 将是 E2aVector 将是 1 E3

注意 aVector 的第一个条目中缺少的 E。

当我输入一些调试代码时,它似乎最初被正确地存储在 vector 中,但后来被某些东西覆盖了。感谢任何解决这个问题的人。我觉得很奇怪。

编辑:谢谢埃里克。我终于明白了。在 Windows 上,所有行都以\n 结尾。但是,当我切换到 Unix\Linux 时,这些行以\r\n 结尾。因此,当 getline 读取一行时,它会将所有内容读入字符串,包括\r。我没有考虑这个\r,它把我搞砸了。问题不在于 E 不见了。那是我在 vector 中有一个额外的条目,其中有一个\r 字符。我的其他类(class)无法处理其中包含单个\r 的条目。

最佳答案

糟糕:误读了您的问题,以为它是在谈论不能在 Windows 上工作。我在这里留下答案,以防有人偶然发现这个需要它,但我认为在这种情况下它不会帮助你(提问者)。

如果您使用的是 MSVC6,您可能会遇到 this bug使用 getline 函数。链接中有一个修复程序。

为了后代,这里是链接中的信息:

SYMPTOM: "The Standard C++ Library template getline function reads an extra character after encountering the delimiter. Please refer to the sample program in the More Information section for details."

Modify the getline member function, which can be found in the following system header file string, as follows:

else if (_Tr::eq((_E)_C, _D))
{_Chg = true;
// _I.rdbuf()->snextc(); /* Remove this line and add the line below.*/
_I.rdbuf()->sbumpc();
break; }

Note: Because the resolution involves modifying a system header file, extreme care should be taken to ensure that nothing else is changed in the header file. Microsoft is not responsible for any problems resulting from unwanted changes to the system header file

关于c++ - CSV 解析器适用于 Windows,不适用于 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com