matlab整理資料集
阿新 • • 發佈:2019-01-27
今天用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了。