今天用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了。