Re: [問題] c語言 檔案內容比對與合併

看板C_and_CPP (C/C++)作者 (蜀中無大將)時間16年前 (2009/04/29 21:18), 編輯推噓2(2017)
留言19則, 2人參與, 最新討論串2/2 (看更多)
我使用fscanf(file, "%s", &arr[i]);的方式 將A和B檔案的偶數行的前三項依序抓入arr1[]和arr2[]中來比對 但是出現一個問題 以第二行為例 雖然arr1[0]=|,arr1[1]=NUM,arr1[2]=| 且 arr2[0]=|,arr2[1]=NUM,arr2[2]=| 但是用if來比對arr1[i]與arr2[i]時卻是"FALSE" 為什麼?? 我不太懂 希望大大能幫我解答 看可以用甚麼方式來比對 謝謝!! ※ 引述《KengiBon (蜀中無大將)》之銘言: : 想請問程設的大大一個問題 : (本人是C語言初學者) : 拜託大大給小弟解惑一下 : (不一定要給我程式解答 但希望能給我一個方向 感恩!!) : 想把一個A檔案(a.txt)中的第一個欄位(NUM)與B檔案(b.txt)的NUM欄位依序比對 : 比對成功 則在A檔案中之最後一欄位(MODE)後增加一B檔案中的欄位(12hr)內容 : A檔案內容如下: : ----------------------------------------------------- : | NUM | CHART | DATETM | MODE | : ----------------------------------------------------- : | 1 | 123 | 上午 10:45:00 | EPIDURAL MODE | : ----------------------------------------------------- : | 2 | 25 | 下午 02:55:00 | PCA MODE | : ----------------------------------------------------- : | 3 | 10017587 | 下午 11:23:10 | PCA MODE | : (以下省略) : B檔案內容如下:(PS:與A檔案中欄位長不全相同) : ----------------------------------------------- : | NUM | CHART | 12hr | : ----------------------------------------------- : | 1 | 123 | 20 | : ----------------------------------------------- : | 2 | 25 | 12.5 | : ----------------------------------------------- : | 3 | 10017587 | 125 | : (以下省略) : 以上 : 我也找過一些資料 : 但大都是介紹C++的方法 : (但是不清楚能否用於C中 因為我主要是要寫C的程式)^^" : 若有甚麼太蠢或是表達不好的地方 還請各位大大能見諒 : 謝謝各位! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.64.171.202

04/29 21:52, , 1F
請問你的arr1和arr2兩個array怎麼開的??看起來至少要先
04/29 21:52, 1F

04/29 21:53, , 2F
宣告兩個夠大的2維array, 照你這樣寫的話@_@"
04/29 21:53, 2F

04/29 22:14, , 3F
兩個都是[4][10240] 傳回值是int(不知跟char有甚麼差別
04/29 22:14, 3F

04/30 00:03, , 4F
請問您後面那句傳回值是int是什麼意思?_?
04/30 00:03, 4F

04/30 00:03, , 5F
您是 int arr1[4][10240]; 這樣嗎?? 那請改用char試試:)
04/30 00:03, 5F

04/30 00:04, , 6F
另外, char字串的compare應該用strcmp()這個function做
04/30 00:04, 6F

04/30 00:04, , 7F
推測您的寫法, arr1是一個2D array, arr2是另一個....
04/30 00:04, 7F

04/30 00:05, , 8F
arr1[i]拿到的是第i個第一維度裡, 第二維度10240的頭的
04/30 00:05, 8F

04/30 00:06, , 9F
位址; 很饒舌, 簡單說就是你拿來比較的是array的某一個
04/30 00:06, 9F

04/30 00:06, , 10F
address, 而不是裡面存的value, 這個case它們比較永遠
04/30 00:06, 10F

04/30 00:07, , 11F
不會成立的. 請照00:04那推, 用strcmp(arr1[i],arr2[i])
04/30 00:07, 11F

04/30 00:08, , 12F
這個function return 0代表字串相同, 但是你要確定你的
04/30 00:08, 12F

04/30 00:08, , 13F
兩個array都有'\0'結尾, 照理說你用fscanf應該就有了.
04/30 00:08, 13F

04/30 00:09, , 14F
最後還是那個建議, 只要不是太複雜或太機敏, 請貼code:)
04/30 00:09, 14F

04/30 00:10, , 15F
盡量別讓板友幫您找問題時還得先猜您可能是怎麼實作的XD
04/30 00:10, 15F

04/30 00:12, , 16F
補充一下, 如果您肯定file裡的data一定照個您的規定寫的
04/30 00:12, 16F

04/30 00:12, , 17F
'|'這個字元的判斷可以用 arr1[i][0] == arr2[i][0]
04/30 00:12, 17F

04/30 00:13, , 18F
保險一定要抓到'|', 還可以再 && arr1[i][0] == '|'
04/30 00:13, 18F

04/30 08:55, , 19F
感謝V大大的指導 我會試試看的(下次會把code也貼出來得:)
04/30 08:55, 19F
文章代碼(AID): #19-5EO7F (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19-5EO7F (C_and_CPP)