0
我需要解析一個.csv文件,其中行之間的分隔符是'\ n',但任何值都可以包含任意數量的'\ n',如果它被包裹爲「」 。 所以我寫了這個函數,當我把它放到main中時它實際上起作用,但是當它與main分離時不會改變任何變量。在單獨的函數中使用getline()
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這樣到底發生了什麼?指針有什麼問題嗎?也許有更準確的方法來獲得我想要的? 在此先感謝您的幫助。
請使用調試器和看看[的std ::函數getline()](http://en.cppreference.com/w/cpp/string/basic_string的/函數getline)。提取的內容通過第二個參數返回,該參數是一個'std :: string&'。如果你想讓結果出現在'getWholeValue()'之外,你可以使'string l'成爲一個引用:'string&l'。 – Scheff
順便說一句。我看不到'Line * l = new Line;'和'delete l;'的動機。如果您將其更改爲「Line l;」並刪除「delete l;」,它也會起作用。由於這種變化,'l'將被存儲在棧中而不是堆上,我不會將其視爲缺點。 (當然,在這種情況下,您必須將'l-> customer'更改爲'l.customer'。) – Scheff
爲什麼不讓'getWholeValue'返回字符串?它將使API更清潔恕我直言。 'std :: string getWholeValue(ifstream&ip)' –