我必须阅读我在这篇文章末尾写的简单文本文件(它只是一个结构化的网格)。在Fortran中,这样做非常容易,你只需这样做:
read(fileunit,*)
read(fileunit,*) mc,nc
do j = 1, nc
read (fileunit, *) dummy, dummy, (xcor(j,i), i=1,mc)
enddo
在matlab中是否有一个等效的函数,它逐个元素地读取并在新行之后继续阅读,就像在fortran中一样?我找不到它,所有函数如fscanf,textscan等逐行读取然后我必须解析每一行。这是文件。感谢任何帮助A.
Gridfile version 8.675.44
8 3
eta= 1 0.00000000000000000E+00 1.50000000000000000E+02
4.50000000000000000E+02 6.00000000000000000E+02
4.50000000000000000E+02 6.00000000000000000E+02
4.50000000000000000E+02 6.00000000000000000E+02
eta= 2 0.00000000000000000E+00 1.50000000000000000E+02
3.00000000000000000E+02 4.50000000000000000E+02
7.50000000000000000E+02 9.00000000000000000E+02
4.50000000000000000E+02 6.00000000000000000E+02
eta= 3 0.00000000000000000E+00 1.50000000000000000E+02
3.00000000000000000E+02 4.50000000000000000E+02
7.50000000000000000E+02 9.00000000000000000E+02
4.50000000000000000E+02 6.00000000000000000E+02
答案 0 :(得分:3)
有很多方法可以做到这一点,但也许你会喜欢fscanf
的工作方式,就像在这个例子中一样。通过fin = fopen('gridfile.txt')
之类的内容打开文件并吞下标题后,您可以使用fscanf(f, 'x= %d')
,然后使用fscanf(f, '%f')
,它将读取整个块。如果没有指示,fscanf
不会在行尾停止。总之,解决方案看起来像
fin = fopen('gridfile.txt');
fgetl(fin);
% read data counts
cnt = fscanf(fin, '%d %d', 2);
mc = cnt(1);
nc = cnt(2);
xcor = zeros(nc, mc);
% read blocks of data
for j = 1 : nc
fscanf(fin, '%s %s', 2);
xcor(j, :) = fscanf(fin, '%f', mc)';
end
fclose(fin);
fscanf
尽可能长时间地匹配格式说明符,并且只有在找不到更多连续匹配时才返回。以上示例在两个地方使用它。首先,在您的示例(8,3)和第二个中提取维度cnt
,以读取每个记录的八个连续浮点值。