1. 程式人生 > >matlab整理資料集

matlab整理資料集

今天用matlab整理了一天的資料集,心好累。
原始資料是這樣的,(152.0, 115.0, 167.0, 135.0), (221.0, 127.0, 240.0, 152.0)。
我需要把每個數字字元分出來。
關鍵程式碼如下:

 tline=fgets(fidin); %從檔案讀行
 s=regexp(tline,'\([^)]*)','match');  %正則表示式,提取出每個括號中的內容。
 %s{1}是一個字串,為(152.0, 115.0, 167.0, 135.0)
 %s{2}是一個字串,為(221.0, 127.0, 240.0, 152.0)
 m=numel(s);%s中字串的個數,此處等於2
 for
i=1:m s2=(regexp(s{i},'\d*\.\d*', 'match')); %這也是個正則表示式,作用是提取s{i}字串中的數字部分。 for j=1:4 fprintf('%s',s2{j}); fprintf('\n'); end end %打印出來的s2{j}就是分拆出來的數字 152.0 115.0 167.0 135.0 221.0 127.0 240.0 152.0

由上可以看出,正則表示式非常強大。
之後還經歷了檔案的刪除,
delete([path,filename]);
以及檔案的重新命名。
eval([‘!rename’ 32 strcat(path,filesname) 32 newname]);
需要注意的是,原始檔名前面要加路徑,而目標檔名前面則不用。以及32和前後面都要有空格。(忍不住吐槽matlab改檔名為什麼這麼奇怪的寫法)
最後涉及到的問題就是讀寫xml檔案。xml檔案讀寫有兩種方法,一種是matlab自帶的函式,即xmlread,xmlwrite,這個用法感覺非常複雜。
第二種方法是使用工具包。

http://download.csdn.net/search?keywords=xml_io_tools
其提供的 xml_read和xml_write函式非常方便。程式碼如下:

annotation = xml_read(strcat(path_label,label_name));
annotation.filename=files_all(i).name;
xml_write([strcat(path_label,label_name)],annotation);

即通過xml_read讀出來,然後修改節點內容,最後通過xml_write寫進去,就OK了。