在MATLAB中传递指定长度的文件名

时间:2016-02-09 05:11:25

标签: bash matlab plot

生成文件名时出现问题

我有大约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脚本等效的东西,以便适当地加载文件然后只有我将从它们中读取

1 个答案:

答案 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