[問題]讀txt檔裡的數值轉成mat

看板MATLAB作者 (翊玥)時間14年前 (2011/10/31 14:03), 編輯推噓1(1027)
留言28則, 3人參與, 最新討論串1/1
請問如果我的txt檔開頭有一些文字,下面是表格式的數值 我只想要把數值存成mat,但skip掉上面的文字該怎麼做呢 例如: ?分??(微秒): 100000 (USB2+H04873) 平均次?: 1 (USB2+H04873) 平滑度: 0 (USB2+H04873) 去除暗噪?: 否 (USB2+H04873) 使用??信?/?: 否 (USB2+H04873) ?子暗噪?校正: 否 (USB2+H04873) ?散光校正: 否 (USB2+H04873) >>>>>Begin Processed Spectral Data<<<<< 339.27 571.74 339.65 571.74 340.03 571.74 340.41 456.49 340.79 402.25 341.18 399.99 341.56 445.19 341.94 393.21 342.32 372.87 >>>>>End Processed Spectral Data<<<<< 就是我只要黃色的數值被讀成mat檔,可以做到嗎? 因為要把好幾筆這種file的data結合做運算,一個一個複製到excel太麻煩了 想看看MATLAB能不能直接把數值挑出來 謝謝回答> < -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.27.164

10/31 14:21, , 1F
我都用 fgetl這個指令跳到下一行 再用fscanf這種白癡方法
10/31 14:21, 1F

10/31 14:22, , 2F
要跳幾行就fgetl幾次
10/31 14:22, 2F

10/31 14:44, , 3F
對不起,可以再說詳細一點嗎,不太會用@@
10/31 14:44, 3F

10/31 15:12, , 4F
我從前面的文章找到一個方法了! 先把所有的data存在cell裡
10/31 15:12, 4F

10/31 15:14, , 5F
type再把cell裡的string轉回number
10/31 15:14, 5F

10/31 15:14, , 6F
↑多打了type
10/31 15:14, 6F

10/31 15:15, , 7F
CellText = textread('r2_rr00.txt','%s','whitespace','\
10/31 15:15, 7F

10/31 15:15, , 8F
t\n');
10/31 15:15, 8F

10/31 15:16, , 9F
values = CellText(18:4113,:);
10/31 15:16, 9F

10/31 15:16, , 10F
cellfun(@str2num,values);
10/31 15:16, 10F

10/31 15:18, , 11F
還是謝謝youmu大大哦 :)
10/31 15:18, 11F

10/31 15:19, , 12F
如果你要再教我怎麼用你的寫法 我也很還是想知道哦:)
10/31 15:19, 12F

10/31 17:34, , 13F
[x y] = textread('xx.txt','%f %f','headerlines',7);
10/31 17:34, 13F

10/31 17:34, , 14F
不知道這樣可不可以達成
10/31 17:34, 14F

10/31 17:35, , 15F
只是讀出來 兩排會分別到 x y 加個 data=[x y]; 就OK了
10/31 17:35, 15F

10/31 20:19, , 16F
abc01251大大,這樣前面的文字會無法讀取而error
10/31 20:19, 16F

10/31 20:20, , 17F
youmu大大提供的方法我懂了!! 滿簡單的
10/31 20:20, 17F

10/31 20:22, , 18F
fid = fopen(filename);
10/31 20:22, 18F

10/31 20:22, , 19F
for k = 1:17
10/31 20:22, 19F

10/31 20:22, , 20F
fgetl(fid); % 捨去列
10/31 20:22, 20F

10/31 20:22, , 21F
end
10/31 20:22, 21F

10/31 20:23, , 22F
values = fscanf(fid,'%f %f');
10/31 20:23, 22F

10/31 20:24, , 23F
不過要自己重新排列就是了
10/31 20:24, 23F

10/31 20:35, , 24F
我不太懂fscanf寫幾個%f有什麼差別,也不會變成兩欄呀@@
10/31 20:35, 24F

10/31 23:10, , 25F
所以 >><< 這個也在文件內容囉!?
10/31 23:10, 25F

10/31 23:11, , 26F
兩個 %f 是因為 你一行裡面有兩個數字
10/31 23:11, 26F

11/01 21:00, , 27F
fscanf(fid,'%f %f',[x y]); 最後面填上你的矩陣大小,就會
11/01 21:00, 27F

11/01 21:00, , 28F
幫你排好了,不用再重排!
11/01 21:00, 28F
文章代碼(AID): #1EhZeb1M (MATLAB)
文章代碼(AID): #1EhZeb1M (MATLAB)