Re: [問題] 關於檔案讀取已回收
不跳行的寫法 (我不知道怎麼跳行 orz,不過三四百行算小檔,全讀進來無妨)
TextFile = textread( FileName, '%s', 'delimiter', '\n', 'whitespace', '' );
Iwant356 = regexp(TextFile{356},'([+-]?\d+\.\d+|[+-]?\d+)$','tokens','once');
Iwant361 = regexp(TextFile{361},'([+-]?\d+\.\d+|[+-]?\d+)$','tokens','once');
Iwant356 = eval(Iwant356{1}); %%% string to double
Iwant361 = eval(Iwant361{1}); %%% string to double
我用 regular expression 來抓取數字的部份
[+-]?\d+\.\d+ 會抓取有小數點的數字串,同時含蓋數字前方的正負號
[+-]?\d+ 會抓取沒小數點的數字串,同時含蓋數字前方的正負號
最後的$代表只比對在字串尾巴的數字串。
如果您的字串比較規律,例如冒號":"跟數字中間一定有空白
那麼用 sscanf 寫起來比較容易懂
Iwant356 = sscanf( TextFile{356}, '%*s %*s %*s %f' );
前面三個 %*s 代表跳過三個字串,也就是 "PSNR", "Y(dB)", ":" 這三個字串
所以 %f 比對到的結果才會回傳到 Iwant356 之中,也就是 34.56。
但這招在第361行無法直接使用,因為冒號":"和150.00連在一起,
若是分開的,那麼就可以用 sscanf 來讀取,也就是用6個%*s和1個%f
※ 引述《Vancloud (悶)》之銘言:
: 小弟不才,爬了很多文
: 看到好幾個方法,但我就是不太會用
: 精華區也去查過了,但看到的推文都解答一半
: 我想請教的是
: 今天我有一個檔案有三、四百行
: 我想要的只有其中的兩行
: ex:
: ... (前面的三百多行)
: PSNR Y(dB) : 34.56 (第三百五十六行)
: ... (又跳了幾行)
: Bit rate (kbit/s) @ 30.00Hz :150.00 (第三百六十一行)
: 如上面的範例,我想要的只有 34.56 跟 150.00 這兩個數字
: 我該怎麼樣讀取?
: 我有看到有寫到要跳行的話可以利用fgetl跳行,但又有大大說效率不好
: 可以直接用textread跳行(但這個方法我一直試不出來)
: 而利用fgetl跳到我要的行數之後我又試不出只把34.56讀出來的方法
: 希望有高手能夠為我解答
: 問題一:textread怎麼跳到我想讀的那行?
: 問題二:如果textread跳到我想要的那行之後,我該怎麼只取出我要的數值?
: 問題三:利用fgetl跳到我想要的行數之後,我該怎麼只取出我要的數值?
: 謝謝各位高手,一個問題願以200P來回饋,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.27.3
推
06/08 22:01, , 1F
06/08 22:01, 1F
推
06/08 22:12, , 2F
06/08 22:12, 2F
※ 編輯: banco 來自: 140.114.27.3 (06/08 23:11)
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章