簡體   English   中英

在Fortran中讀取ASCII文件

[英]Reading an ASCII File in Fortran

我有個問題。 我的桌面上有一個充滿數字的ASCII文件,但是我需要知道如何使用FORTRAN讀取ASCII文件。 您能給我看一個例子,說明它是如何完成的或者是什么命令?

您沒有提供很多細節,因此在這里我將做一些假設。 假設您的文件包含3列浮點數,即

1.2345 -4.222e7 2.229
77.222 77e7     50
...

如果您只想讀取這些數字而不將其存儲在數組中,則可以直接完成以下操作:

    integer :: unit
    real    :: a,b,c
    unit = 20
    open(unit,"foo.txt",status="old",action="read")
    do
        read(unit,*,end=1) a, b, c
        write(*,*) "I got", a, b, c
    end do
    1 close(unit)

但是,如果要將這些數字存儲為數組,則首先需要分配適當的空間量,為此您需要知道行數。 遺憾的是,這需要對文件進行初步檢查,因為Fortran不會提供不斷增長的陣列,而且自己實施替換操作很不方便。 假設您使用的是fortran 90或更高版本,則看起來像這樣:

    integer :: unit, i, n
    real, allocatable :: data(:,:)
    unit = 20
    open(unit,"foo.txt",status="old",action="read")
    n = 0
    do
        read(unit,*,end=1)
        n = n+1
    end do
    1 rewind(unit)
    allocate(data(n,3))
    do i = 1, n
        read(unit,*) data(i,:)
    end do
    close(unit)

單位編號只是一些用戶選擇的唯一編號。 當心一些低數字具有預定義的含義。 定義類似getlun()的函數很常見,該函數將為您提供一個免費的單元號。 快速的Google搜索產生了以下內容: http : //ftp.cac.psu.edu/pub/ger/fortran/hdk/getlun.f90 如果您有足夠新的編譯器,則可以使用open(newunit = unit,...),它將自動為變量“ unit”分配一個空閑的單元號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM