[問題] 讀txt檔中的陣列,想略過開頭的"["
開發平台(Platform): C++
問題(Question):
如標題,讀txt檔中的陣列存到陣列中
但一開始的"["第一個值連在一起,會讓我第一個讀的值變0
餵入的資料(Input):
txt檔的內容如下
[108.684, 19.9082, 0.316327, 0.193878, 0.867347;
64.1389, 59.4167, 14.1111, 11.2222, 7.63889;
17.8065, 6.12345, 3.29032, 12.5161, 106.226]
預期的正確結果(Expected Output):
將所讀的值正確的設給陣列model儲存
108.684, 19.9082, 0.316327, 0.193878, 0.867347
64.1389, 59.4167, 14.1111, 11.2222, 7.63889
17.8065, 6.12345, 3.29032, 12.5161, 106.226
錯誤結果(Wrong Output):
矩陣中的其他元都正確,但就是第一元會變0
0, 19.9082, 0.316327, 0.193878, 0.867347
64.1389, 59.4167, 14.1111, 11.2222, 7.63889
17.8065, 6.12345, 3.29032, 12.5161, 106.226
程式碼(Code):(請善用置底文網頁, 記得排版)
Mat model = Mat::zeros(keyt, 128, CV_32F);
char opline[1000];
int col, row = 0;
fp.open("abc.txt", ios::in);
while (fp.getline(opline, 1000, ';')){
col = 0;
char *p1 = strtok(op_line, ","); // 以","為分隔號分割字串,
// 分割結果存入p1陣列
while (p1 != NULL) {
model.at<float>(row, col) = atof(p1); // model矩陣存取讀值
col++;
p1 = strtok(NULL, ","); // 類似"進到陣列下一個元素"的概念
}
row++;
}
補充說明(Supplement):
我對指標不太熟悉
不然這問題,應該可以用我用的strtok函式就能解決
不過這問題應該很多人都很常遇到
想問一下有沒有甚麼經典的漂亮解法?
先感謝各位大大了 <m(.)m>
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429868904.A.961.html
似乎之前爬文爬得不夠詳細
最後加上
if (op_line2[0] == '[')
for (int i = 0; i < 1000; i++)
op_line2[i] = op_line2[i + 1];
就達到我要的功能了
不過還是想看看有沒有更漂亮的方法@@
→
04/24 18:15, , 1F
04/24 18:15, 1F
sorryT.T
我coding超弱XDD
請教更簡潔的寫法~
→
04/24 20:39, , 2F
04/24 20:39, 2F
→
04/24 20:41, , 3F
04/24 20:41, 3F
→
04/24 20:43, , 4F
04/24 20:43, 4F
→
04/24 20:46, , 5F
04/24 20:46, 5F
→
04/24 21:08, , 6F
04/24 21:08, 6F
→
04/24 21:09, , 7F
04/24 21:09, 7F
→
04/24 21:10, , 8F
04/24 21:10, 8F
推
04/24 21:13, , 9F
04/24 21:13, 9F
推
04/24 21:57, , 10F
04/24 21:57, 10F
→
04/24 21:59, , 11F
04/24 21:59, 11F
推
04/24 22:16, , 12F
04/24 22:16, 12F
→
04/25 13:13, , 13F
04/25 13:13, 13F
→
04/25 13:15, , 14F
04/25 13:15, 14F
→
04/25 23:40, , 15F
04/25 23:40, 15F
→
04/26 00:36, , 16F
04/26 00:36, 16F
→
04/26 02:01, , 17F
04/26 02:01, 17F
感謝各位不吝大方指教!!實在受益良多!
現在才知道原來strtok第二個輸出可以是多個字符 =.=
其實txt檔中是多個陣列輸入所得,如下列所示 (各陣列行數相同,列數不一定)
[ 1.8463, 86.4531, 31.245, 648.8432, 12.479;
841.123, 97.1, 2.7971, 14, 55.6782;
11.756, 38.4786, 947.348, 61.207, 64.9301]
[ 12.498, 648.108, 314.8219, 51,692, 37.6815;
77.314, 69.0214, 71.1, 36.78, 90.001;
321.028, 349.1, 4.308, 61.819, 66;
41.86., 14.9231, 20, 974.2, 34.947]
所以參考各位給的方法,我覺得最好&最簡單的解法應該是下面這樣?
fp.open("abc.txt", ios::in);
while (fp.getline(opline, 1000, '\n')){
col = 0;
char *p1 = strtok(op_line, ",[];"); // 以","為分隔號分割字串,
// 分割結果存入p1陣列
while (p1 != NULL) {
model.at<float>(row, col) = atof(p1); // model矩陣存取讀值
col++;
p1 = strtok(NULL, ","); // 類似"進到陣列下一個元素"的概念
}
row++;
}
不知道是否有理解錯誤@@
有謬誤的話還請各位前輩指點
※ 編輯: UCboy (140.112.25.105), 04/26/2015 14:56:50
→
04/28 00:21, , 18F
04/28 00:21, 18F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章