如何以fortran方式在Matlab中读取一个简单的txt文件(即我想在换行后继续阅读)

时间:2013-02-05 20:59:58

标签: matlab fortran

我必须阅读我在这篇文章末尾写的简单文本文件(它只是一个结构化的网格)。在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 

1 个答案:

答案 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,以读取每个记录的八个连续浮点值。