我有这样的功能(我发现它在某个地方,它适用于\t
分隔符)。
vector<string> delimited_str_to_vector(string& str, string delimiter)
{
vector<string> retVect;
size_t pos = 0;
while(str.substr(pos).find(delimiter) != string::npos)
{
retVect.push_back(str.substr(pos, str.substr(pos).find(delimiter)));
pos += str.substr(pos).find(delimiter) + delimiter.size();
}
retVect.push_back(str.substr(pos));
return retVect;
}
我遇到了将字符串拆分为&#34; \ r \ n&#34;分隔符。我做错了什么?
string data = get_file_contents("csvfile.txt");
vector<string> csvRows = delimited_str_to_vector(data, "\r\n");
我确定,我的文件使用CRLF
表示新行。
答案 0 :(得分:2)
您可以使用getline逐行读取文件,其中包含:
从is中提取字符并将它们存储到str中,直到找到分隔字符delim(或换行符,'\ n'...)如果找到分隔符,则将其提取并丢弃,即不存储并且下一个输入操作将在它之后开始。
也许您已经通过删除行结尾的函数读取文件。
答案 1 :(得分:1)
如果您以文本模式打开文件,即您没有提及std::ios_base::binary
(或其中一个备用拼写),系统特定的行结束序列可能会被{{1}替换}字符。也就是说,即使您的源文件使用\n
,您在阅读文件时也可能看不到此字符序列。如果您真的想要处理这些序列,请在打开文件时添加\r\n
标志。