学习任务要求根据眼动信息画图,之前测试只能通过一张图片的对应信息画一张图,但由于眼动数据过多,且存储在一个txt文件中,故需要方法实现对txt文件的批量切割,每一份分到一个单独的txt文件中,对其进行重新命名。
切割txt文件的函数如下:
function splitFile(txtFile)
fid = fopen(txtFile, 'r');
global start;%global声明全局变量
start = 0;
trialCount = 1;
while ~feof(fid)%若未读到文件尾
tline = fgetl(fid);%从文件中读取一行数据
atomCell = strsplit(tline);%分割字符串得到元胞数组,默认按照空白字符分割
atomString = strings(size(atomCell));%得到元胞数组大小并创建不包含字符的字符串数组
[atomString{:}] = atomCell{:};%{:}表示显示元胞数组的所有内容
n = size(atomString,2);%atomString的块数(第二个维度的长度)
first = 0;
if n == 4
if start == 0 && strncmpi(atomString(1),'Start',5)%比较字符串的前5个字符是否为Start
start = 1;
first = 1;
Number = atomString(2);
Image = atomString(3);
PP=atomString(4);
wfid = fopen(strcat('C:/Users/Louise喵/Desktop/drawdata/FOV20/', PP, '/',Number,'%',Image,'%',PP,'.txt'), 'w');%打开对应txt文件并准备写入,没有则直接创建并写入
end
end
if start == 1
fprintf(wfid, '%s ', atomCell{:});%一行的信息全部写入
fprintf(wfid,'\n');%换行
if n == 4
if strncmpi(atomString(1),'Done',4) && first == 0 %即扫描到结束的一行
start = 0;
fclose(wfid);
trialCount = trialCount + 1;
%break;
end
end
end
end
fclose(fid);
end
调用函数即可。
txtFile = 'C:/Users/Louise喵/Desktop/dataFOV20.txt';
splitFile(txtFile);
我的文件形式如下:
代码通过Start行和Done行对文件进行分割,即得到每一份都是Start和Done中间的内容。
切割结果如下:
速度很快,跑一次就可以全部切分完成啦。