[問題] 如何讀取用逗號分隔的文字檔資料?

看板C_and_CPP作者 (藍迪克)時間10年前 (2015/10/04 16:09), 10年前編輯推噓3(307)
留言10則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS 2010 問題(Question): 想請問大家 我想要讀取一個txt檔,不同的資料用逗號隔開 內容如下 S1,Sam,20,London S2,Jay,30,Paris S3,Kate,20,London S4,May,10,Taipei 要把每筆資料指定到不同的變數中 可是我用下列程式片段讀取 第一列的資料會全部跑到S[i].S裡面去,之後就開始出現亂碼 i=0; while(!feof(fptr_s)) { fscanf(fptr_s ,"%s,%s,%d,%s\n", S[i].S, S[i].SNAME, &S[i].STATUS, S[i].CITY) ; i++; } fclose(fptr_s); 但如果把txt檔裡面的逗號改成空格 fscanf改成: fscanf(fptr_s ,"%s %s %d %s", S[i].S, S[i].SNAME, &S[i].STATUS, S[i].CITY); 資料就會存到對應的變數中 所以我覺得是逗號處理的問題 請問要怎麼修改呢? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.148.187 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1443946182.A.6F6.html

10/04 17:01, , 1F
改用strtok?
10/04 17:01, 1F
謝謝 我會試試看,不過希望有更直覺的做法^^

10/04 17:07, , 2F
改成fscanf(fptr_s,"%[^,],%[^,],%d,%s\n",S[i].S,...);
10/04 17:07, 2F
謝謝大大 改了之後真的可以把資料存入變數了 想請問一下%[^,]是什麼意思? 剛剛只查到^是XOR ※ 編輯: Bluedicker (59.126.130.188), 10/04/2015 17:38:17

10/04 17:46, , 3F
%[^,]是指只讀到','之前 詳細可以查sscanf、regex的用法
10/04 17:46, 3F

10/04 17:47, , 4F
%[^,] 將逗號前的字串做斷句,存到 S[i].s
10/04 17:47, 4F
瞭解了 第一次看到這樣的用法 謝謝你們^_^ ※ 編輯: Bluedicker (39.10.160.31), 10/04/2015 17:55:05

10/04 23:26, , 5F
我是算符號位和刪除已取得的單字跑回圈讀全部,你goog
10/04 23:26, 5F

10/04 23:26, , 6F
le看看讀.csv檔,可能會有你要的
10/04 23:26, 6F
好哦 謝謝^_^

10/05 11:41, , 7F
遇到這種我都直接土炮寫迴圈自己分開
10/05 11:41, 7F
這樣有點累吧XD

10/05 21:31, , 8F
strtok萬用
10/05 21:31, 8F
朋友也都覺得用strtok比較好 我要多學學了... ※ 編輯: Bluedicker (39.10.68.48), 10/06/2015 10:52:57

10/06 14:53, , 9F
strtok() 的問題在於, 連寫的多個分隔符號, 只當做一次分隔.
10/06 14:53, 9F

10/06 14:58, , 10F
若是可能存在空欄位, 那 strtok() 也許就不適合使用了.
10/06 14:58, 10F
文章代碼(AID): #1M4Dx6Rs (C_and_CPP)