在利用matlab在整理数据的过程中,我发现了一些容易出错的问题,以及在与马师兄沟通后获得的一些经验和指导,以及如何更有效地完成这些工作,所以我记录在这里提醒和分享。P.S 补充0504给敏杰师弟写的代码总结(搞笑)。
1、命名规则
尽量不要在文件名和代码名中使用-中横线,下划线可用作文件名标志。-通常用作代码等程序语言中的操作符号或其他功能符号,如-acsii,标识转化为acsii存储代码形式。
2、集合操作
避免重复操作错误,提取文件名后统一操作,命令:dir 搜索目录下的文件名。操作多个文件时,应注意使用循环来简化句子(for while所有句子都适合),否则在重复操作中容易出错。
3.搜索代码故障位置
写一个额外的基本点来提醒自己,a(:,4),表示第四列取整,a(1:3,4),表示取第四列1至3行,a([1 三、四),表示取第四列1、3行。
对于代码的故障位置(通常是多行或多列),一般的方法是遍历有序行列,提取故障点的特征进行区分。例如,如果时间缺失一段时间,可以采用下位减去上位,观察时差变化,设置阈值找出故障点。
4.搜索特定的行列位置
有时候,我们只需要数据文件中某些特定位置的数据,所以我们需要知道特定位置的特征。一般来说,我们可以通过阅读数据文件的形式获得特定的行列数。此时,我们可以通过阅读行语句来遍历所需的行列。
例子:
clc;clear all;
filename=dir(‘*.txt’); 提取文件名的%%
k=length(filename); 获得文件数量的%%
line=11; %目标行数
for i=1:k;
fidin=fopen(filename(i).name,’r’);
fidout=fopen(‘fout.txt’,’at ’);
nline=0;
while(nline~=line);
tline=fgetl(fidin); % 从文件读行
nline=nline 1;
end
fprintf(fidout,’%s\n’,tline);
i=i 1;
fclose(fidin);
fclose(fidout);
end
如果需要多行,可以while修改条件语句或嵌套一个for语句在外面,此时需要判断每一个需要通历line。如果只是不需要前面的注释,可以直接使用textread语句,用head跳过前几行。
这里还需要注意的一个问题是,问题是,当我们再次写入文件时,循环后面覆盖了以前的问题。我们在网上尝试了很多方法,但没有很好地解决它们。最后,我们找到了它们fopen在句子中加入at 以后可以写入文件续写。
5、统一修改txt文件的语句
若需修改txt可以使用文件中的数据,如数字部分的要求textread命令筛选。
[num]=textread(‘fout.txt’,’%*s %*s %*s %f’,k);
textread命令的一般格式是,textread(filename,format,number),这样可以把txt文件中前三个字符串略去,只保留最终浮点数据。textread命令还可以在后面加上筛选语句’delimiter略去分隔符等。
解释一下这里s是string字符串的意思,%f是浮点数,包括%d是双精度等。如有必要,救世%s,如果不需要,增加%*s,不要说这个数据。textread还有很多功能,需要进一步学习,这里推荐一个txt数据处理总结:www.ilovematlab.cn/thread-872-1-1.html,这里可以看到相关知识。
我很早就写了一部分。不幸的是,原来的电脑显示器坏了,打不开。我只放了最近的代码。如果我有时间,我会弥补它。我有错误和遗漏。我希望我能给你一些建议!