gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:12:31 25 4
gpt4 key购买 nike

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

最佳答案

有很多方法可以做到这一点,但也许您会喜欢这种方式 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) 和第二个中,读取每个记录的八个连续浮点值。

关于matlab - 如何以fortran方式在Matlab中读取一个简单的txt文件(即我想在换行后继续阅读),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14716775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com