生成文件名时出现问题
我有大约4000个.txt文件,每个文件包含三列数据。我想一次一个地从单个文件中读取所有3列,然后在等高线图上绘制对应于x,y,z值的三个值。
这些文件是在不同的时间步骤创建的。因此,一个文件中的绘图将是一个水平曲线,所有这些绘图将给出一个等高线图。
但问题是我想做一些我可以用bash做的事情:
for n in `seq -f "%09g" 30001 200 830001`; do
./someFile$n.whateverFileFormat
done
如何在matlab中执行此操作,以便我可以说:
t-000030001.txt
1 2 3
......
......
......
t-0000320001.txt
2 4 5
. . .
. . .
. . .
and so on to
t-0008300001.txt
3 5 6
. . .
. . .
然后就可以了。
我想一次加载所有这些文件,将值存储在infx3数组中,将它们绘制在等高线图上,并对所有文件一次又一次地执行此操作,以便我可以将所有这些文件放在一个图上。
P.S。我需要重现与上面提到的bash脚本等效的东西,以便适当地加载文件然后只有我将从它们中读取
答案 0 :(得分:3)
获取文件名列表的一种方法是:
fnames = arrayfun(@(num)sprintf('t-%09g.txt', num), 30001:200:830001, 'Uniformoutput', 0);
让我们仔细看看:30001:200:830001
生成一个数组,从30001开始,递增200,结束于830001. sprintf
生成格式化字符串,arrayfun
将作为其第一个参数传递的匿名函数应用于其第二个参数(序列)中数组的每个元素。输出是包含文件名的cell
数组。
修改强>
上述解决方案等同于以下代码:
ind = 30001:200:830001;
fnames = cell(numel(ind), 1);
for i = 1:numel(ind)
fnames{i} = sprintf('t-%09g.txt',ind(i));
end
这会将所有值存储在单元格数组中。
撰写@(num)sprintf('t-%09g.txt', num)
会创建anonymous function。循环发生在arrayfun
。