最近剛考完六級,學習之心日漸衰落
室友看到我如此頹廢
於是給我找了個活,讓我幫他處理一些數據
...
(這是親舍友嗎?)
於是我經過了一下午的努力,終於完成了!
完成之餘,感覺就是
查資料查了99%的時間,寫程序只用了那麼一丟丟
(有人帶路走的才真的快)
所以直接總結一下這次遇到的問題和解決辦法,以供後續感興趣有需要的小夥伴查閱和參考ps:1. 建立一個空的cell
a = cell2mat(a); #得到的就是文本格式 也就是charQ1:如何遍歷文件夾下所有文件?
path=[]; #文件bai路徑 suffix='_new2.asc'; #文件後綴files=dir(['*',suffix]); #得到這個路du徑下所有的asc文件名dir得到的是一個包括:"文件名"、"路徑"、"創建時間"、"大小"等六個類別的信息。dircell=struct2cell(files); #對讀取信息的格式轉換filename=dircell(1,:); #提取文件名通過上述代碼就可以把file文件中的name列單獨取出來。這樣我們就得到了含有文件夾下含有所有文件名字了。Q2:如何對文件列表進行排序?
A:一般的只包含數字的文件名可以直接用官方的sort函數就可以進行排序了,但是我們在實際運用時總會遇到項目類含有很多字符中間帶有數字的項目文件。比如:"abcd_01_name.dat"。
在網上苦苦追尋,總算在matlab中文論壇上找到了解決辦法,已經有大佬只做了相應的子函數——sort_nat(既然有現成的還是白嫖舒服...如果好奇裡面的原理的可以下載他的函數哦)Matlab官方連結:https://www.mathworks.com/matlabcentral/fileexchange/10959-sort_nat-natural-order-sort
連結:https://pan.baidu.com/s/10Ia71ZrCvGaFrQ6i07D9aw例如,輸入
{'file1.txt','file2.txt','file10.txt'}
正常的排序會給你
{'file1.txt','file10.txt','file2.txt'}
而sort_nat會給你
{'file1.txt','file2.txt','file10.txt'}
Q3:如何讀取asc文件?
A:一般asc文件裡面字符串,數字混雜,直接讀取成cell的類型會非常的方便。1. dlmread
a = dlmread('filename')a = dlmread('filename', delimiter)a = dlmread('filename', delimiter, R, C)a = dlmread('filename', delimiter, range)這個方法讀取asc的時候(參考百度到的案例)只讀取含有數值類型的文件是沒問題的,如果遇到第一列比如是字符串的名稱類的就可能遇到報錯的問題。出的錯我也沒解決...a = textread( name,'%s', 'delimiter', '/n');這個方法就是目前解決的方法,通過改變後面的'/n'標誌符可以修改變量之間的判定邏輯,比如每遇到一個空格就當成一個變量的結尾:' ' ,之後就可以通過數據傳遞把數據弄成想要的模樣了。A:在寫入的時候要注意數據類型,如果是cell的話,要注意寫入方法
fid=fopen('test.asc','w');# out為已經寫好的數據for i=1:size(out,1) a = out(i); a = cell2mat(a); fprintf(fid,'%s \n',a);endfclose(fid);如果數據為常規數組,按照正常文件讀寫即可。
好了,通過以上四步相信在做進一步處理前,大家至少把數據都搞好了