2

我必须阅读我在这篇文章末尾写的简单文本文件(它只是一个结构化的网格)。在 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 等逐行读取,然后我必须解析每一行。这是文件。感谢您的任何帮助。

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 
4

1 回答 1

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尽可能长时间地匹配格式说明符,并且仅在找不到进一步的连续匹配时返回。上面的例子在两个地方使用了这个。首先,cnt在您的示例中提取维度 (8, 3),其次,读取每条记录的八个连续浮点值。

于 2013-02-05T23:10:07.407 回答