2013-02-05 81 views
2

我必須閱讀我寫在這篇文章的末尾的簡單文本文件(它只是一個sctructured格)。在FORTRAN它是那麼容易做到這一點,你就必須做到:我如何在fortran的方式閱讀Matlab中的簡單txt文件(即我想繼續閱讀後換行)

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

你的目標不明白誰不能閱讀fortran,包括我自己。 – jerad

+3

他想要使用一個語句或過程來讀取文件,該語句或過程在當前沒有足夠內容的情況下繼續閱讀後續行。 –

+1

我添加了「並像fortran一樣在換行符之後繼續閱讀」以使其更清晰,但它已經在標題中。 – Lupocci

回答

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,然後讀取每個記錄的八個連續浮點值。

+0

謝謝,但這不起作用。即使用「fin」替換錯字「f」,它在結束語句之前的行上也會出現「Subscripted assignment dimension mismatch」的錯誤。 – Lupocci

+0

有兩種這樣的拼寫錯誤。只是修正了這些。我知道它是有效的,所以讓我知道你是否仍然有這個問題。今天晚些時候我可以仔細觀察一下。 –

+0

它一般不起作用。我剛剛發佈了一個使用x =的例子,但實際上我的大多數網格文件都是曲線座標,它們顯示的是eta =而不是x =。我編輯了上面的文件。在這種情況下,它不起作用,行「fscanf(fin,'x =%d');」沒有做適當的工作,指針不動(用position = ftell(fin)檢查)我不知道爲什麼。 – Lupocci