在单独的函数中使用 getline()
Using getline() in separate function
我需要解析一个 .csv 文件,其中行之间的分隔符是'\n',但任何值都可以包含任意数量的'\n',如果它被包装成“”。
所以我写了这个函数,当我把它放到main中时它实际上可以工作,但是当它从main中分离时不会改变任何变量。
void getWholeValue(ifstream &ip, string l) {
getline(ip, l, ',');
if (l[0] == '"') {
string s;
getline(ip, s, '"');
l = (l + s);
}}
这是我如何调用该函数的示例:
struct Line {string customer;};
int main(){
Line *l = new Line;
while (ip.good())
{getWholeValue(ip, l->customer);
}
delete l;
}
那么当我这样调用 getline 时到底发生了什么?指针有什么问题吗?也许有更准确的方法来获得我想要的东西?
在此先感谢您的帮助。
为了让您的函数正确更改参数 l 的值,您需要将参数设置为 std::string &
,以便通过引用传递变量,从而更改传递的原始变量而不是临时变量在函数范围内创建的变量。只需更改您的 getWholeValue(ifstream &ip, string l)
header 至:
getWholeValue(ifstream &ip, string &l)
我需要解析一个 .csv 文件,其中行之间的分隔符是'\n',但任何值都可以包含任意数量的'\n',如果它被包装成“”。 所以我写了这个函数,当我把它放到main中时它实际上可以工作,但是当它从main中分离时不会改变任何变量。
void getWholeValue(ifstream &ip, string l) {
getline(ip, l, ',');
if (l[0] == '"') {
string s;
getline(ip, s, '"');
l = (l + s);
}}
这是我如何调用该函数的示例:
struct Line {string customer;};
int main(){
Line *l = new Line;
while (ip.good())
{getWholeValue(ip, l->customer);
}
delete l;
}
那么当我这样调用 getline 时到底发生了什么?指针有什么问题吗?也许有更准确的方法来获得我想要的东西? 在此先感谢您的帮助。
为了让您的函数正确更改参数 l 的值,您需要将参数设置为 std::string &
,以便通过引用传递变量,从而更改传递的原始变量而不是临时变量在函数范围内创建的变量。只需更改您的 getWholeValue(ifstream &ip, string l)
header 至:
getWholeValue(ifstream &ip, string &l)