我有一個文本文件中的文本文件,內容是閱讀帶分隔符
Point1, [5, 6]
Line2, [1, 2, 3], [-5, 55, 33]
Point2, [5, 3, 1]
Line1, [1, 2], [5, 7]
我會做comparisions,像第一個變量(點1,2號線,點2,一號線)
如果是point1,它將被存儲到點1陣列中,5被設置爲x,並且y被設置爲6.
如何將分隔符設置爲逗號以及'['和']'。我只需要變量Point1,5和6來相應地存儲它們。
我有一個文本文件中的文本文件,內容是閱讀帶分隔符
Point1, [5, 6]
Line2, [1, 2, 3], [-5, 55, 33]
Point2, [5, 3, 1]
Line1, [1, 2], [5, 7]
我會做comparisions,像第一個變量(點1,2號線,點2,一號線)
如果是point1,它將被存儲到點1陣列中,5被設置爲x,並且y被設置爲6.
如何將分隔符設置爲逗號以及'['和']'。我只需要變量Point1,5和6來相應地存儲它們。
我會用最簡單的方法解決這個問題 - 使用getline讀取文件,然後用空格替換所有出現的,
,[
和]
。然後您可以使用<sstream>
中的std::istringstream
來讀取所有輸入。你也可以使用正則表達式(如果你使用boost或C++ - 11),但我相信我建議應該完成這項工作。
編輯:這裏是一個例子如何做我建議。我只會告訴你如何輸入點,以處理線,你將不得不添加一個基於名稱的if語句。你
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string line;
while (getline(cin, line)) {
for (unsigned i = 0; i < line.size(); ++i) {
if (line[i] == '[' || line[i] == ']' || line[i] == ',') {
line[i] = ' ';
}
}
istringstream in(line);
string name;
double x,y;
in >> name >> x >> y; // Point1 <x> <y>
... do something with the point...
}
return 0;
}
也可以使用replace_if
從<algorithm>
更換符號,但我還是決定它會更容易讓你瞭解這個解決方案。
您可以使用json-cpp庫。它有類似的語法:
{
"Point1" : [5, 6],
"Line2": {
"param1" : [1, 2, 3],
"param2" : [-5, 55, 33]
},
"Point2" : [5, 3, 1],
"Line1" : {
"param1" : [1, 2],
"param2" : [5, 7]
}
}
http://jsoncpp.sourceforge.net/ – DemiDroL
我目前正在處理C++。使用昆西2005年 –
我可以參考的任何網站?需要一些例子 –
我會給我的回答添加一個例子 –
'code' \t ifstream myfile(「messy.txt」); \t如果(myfile.is_open()) \t { \t \t而(myfile.good()) \t \t { \t \t \t串線; \t \t \t而(函數getline(CIN,線)) \t \t \t { \t \t \t \t爲(無符號I = 0; I <線。尺寸(); ++ⅰ) \t \t \t \t { \t \t \t \t \t如果(行[I] == '[' ||線[I] == ']' ||線[I] == '') \t \t \t \t \t { \t \t \t \t \t線[I] ='「; \t \t \t} \t \t \t \t \t \t \t \t \t \t istringstream中(線); \t \t \t \t \t字符串名稱; \t \t \t \t \t double x,y; \t \t \t \t in >> name >> x >> y; \t \t \t \t \t cout << name; \t \t \t \t \t} \t \t \t} \t \t \t返回0; \t \t} \t \t myfile.close(); \t} \t else cout <<「無法打開文件」; \t return 0; –