我需要決議這個文本檔案,它基本上有四個由制表符分隔的字串。我一直在研究和嘗試不同的方法,但我不知道該怎么做。
例如,我需要決議這些資料:
三明治(標簽) 火腿三明治(標簽) 經典火腿三明治(標簽) 可用(換行)
三明治(標簽) 芝士漢堡(標簽) 經典芝士漢堡(標簽) 不可用(換行符)
我會將“三明治”、“火腿三明治”、“經典火腿三明治”和“可用”全部讀入 .txt 檔案中每一行的單獨變數中。
我嘗試使用 string.find() 和 string.substr() 來查找制表符分隔符,然后讀取字符直到該分隔符,但這一切都出錯了,要么拋出超出范圍的錯誤,不列印,要么只列印整行變成一個變數。
任何幫助,將不勝感激。
編輯:
所以我用基本方法嘗試了@john 的想法來測驗它是否可行。我只列印了類別以查看它是否已將正確的變數讀入其中,而是列印整個檔案。
我的代碼:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
ifstream inFS;
string category, name, desc, avail;
inFS.open("food.txt");
if (!inFS.is_open()) {
cout << "food.txt." << endl;
}
getline(inFS, category, '\t');
getline(inFS, name, '\t');
getline(inFS, desc, '\t');
getline(inFS, avail, '\n');
cout << category;
//cout << name << " (" << category << ") " << " -- " << desc << " -- " <<
//avail << endl;
inFS.close();
return 0;
}
列印“類別”的結果:

uj5u.com熱心網友回復:
簡單的方法是
getline(in, a, '\t');
getline(in, b, '\t');
getline(in, c, '\t');
getline(in, d, '\n');
其中a、b、c和d是std::string變數,in是您的輸入流。
最好是一些基本的錯誤處理
if (getline(in, a, '\t') && getline(in, b, '\t') && getline(in, c, '\t') &&
getline(in, d, '\n'))
{
// ok
}
else
{
// something went wrong
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512211.html
標籤:C 细绳解析文本分隔符
上一篇:如何使用BeautifulSoup在類中查找類的資料
下一篇:決議具有不確定欄位數的文本
