看板 C_and_CPP 關於我們 聯絡資訊
檔案有兩種,文字檔案和 二進位檔案。 文字檔案的 每一行,採用 0x0d + 0x0a 來分隔, 或者--不一定,但是一定會有 分行的控制字元。 文字檔案的每一行文字,長度不一, 所以,很難能夠在 不要讀檔之前,就判定行數。 如果是 二進位檔案,而且檔案格式固定, 就可以使用檔案的大小,除以每一筆資料的長度, 得到檔案裡面所存放的資料比數。 ※ 引述《meimiao (美妙)》之銘言: : 想要讀檔的時候已經malloc好記憶體空間 : 由於想要 malloc二維的矩陣空間 : 所以 想要先得知file的總行數 : 不知道有沒有已經有的函式可以使用呢?(使用c語言) : 不好意思 如果是個蠢問題的話 先謝謝大家>"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.245.110.241
meimiao:我要讀的就是每行不固定的文字檔>"< 因為不想要每次讀一行 08/21 09:25
meimiao:就malloc一次 這樣似乎會變成不同的陣列 而且一直讀檔感覺 08/21 09:26
meimiao:比較沒有效率 所以才想要一次做到好:( 08/21 09:26
VictorTom:每行不固定, 你要怎麼malloc一次就解決?? 算行數順便計 08/21 09:51
VictorTom:算找出最長字數, 然後都malloc成最大的那個?? 08/21 09:52
VictorTom:基本上先用fseek+ftell算出檔案大小, 然後用binary mode 08/21 09:53
VictorTom:全讀回來在scan裡面的換行, 反正你確定是文字檔的話. 08/21 09:54
VictorTom:不然就是先用get整行用的函數loop算行數, 然後開完陣列 08/21 09:55
VictorTom:再重讀一遍XD PS. 文字檔不是一定用0d0a換行喔, Linux 08/21 09:56
VictorTom:下記得只有0d(還是只有0a)而已, 所以用bin那招要注意:) 08/21 09:57
ledia:0a 08/21 09:59
VictorTom:對不起....Orz 我老搞不清楚哪個是return哪個是newline 08/21 10:00
VictorTom:只知道對應\r\n....Orz 08/21 10:00
ledia:沒關係.. 我也沒記起來過 Orz 08/21 10:03
meimiao:本來是想要malloc二維 先malloc出行再用迴圈malloc出個別 08/21 10:06
meimiao:的長度...二維陣列可以是不同長度嗎???@@ 08/21 10:07
VictorTom:你分兩維動態要來的每個維度想多長都是你自己決定的, 08/21 10:18
VictorTom:只是比較少見這樣用的, 不小心很容易存取超過吧我猜. 08/21 10:18
kaichan:開buffer,讀檔進buffer,自己做一個表示行的結構, 08/21 10:22
kaichan:掃過buffer,把每一行的address抓出來,存在你的行結構 08/21 10:23
meimiao:意思是 一維陣列看待成兩維嗎?利用strstr找尋\n之類的?? 08/21 10:25
kaichan:每一個行結構串起來,你就得到一整個文件的每個行的位置 08/21 10:25
adrianshum:要搞這麼 dynamic 的話, 我覺得不如用 linked-list 吧 08/21 10:40
adrianshum:那麼第一維就不必預先 malloc 了 08/21 10:40
adrianshum:其實樓上的做法也不錯. 為了方便處理, 也可以找出所有 08/21 10:41
adrianshum:newline 換成 null, 這麼每行就變成完整的 string 了 08/21 10:42
meimiao:謝謝 kaichan的方法好像蠻易了解的 感謝大家的幫忙!!!:D 08/21 10:51
VictorTom:a大的方法不錯:) 要另外把string頭記起來就是了, 再看怎 08/21 11:00
VictorTom:樣轉存array方便取用, 或者就這樣存著吧XD 08/21 11:00
DBoyX:\r回車 \n換行,你把\r想像成印字頭回到要打第一個符的位置 08/22 13:47
VictorTom:小弟知道\r\n是return/換行啦, 只是分別是0d0a哪一個, 08/22 18:54
VictorTom:還有順序到底是什麼, 每次都搞不清楚....XD 08/22 18:54