2012-06-29 85 views
1

fortran具有最大'string'長度嗎?fortran中最大'string'長度

我將從可能有很長行的文件中讀取行。我現在看到的那一行每行大約有1.3k個字符,但它們可能有更多。我正在從文件讀取每行到一個字符* 5000變量,但如果我在將來得到更多,它是不好使它成爲一個字符* 5000000變量?有最大值嗎?有沒有比解決這個問題更好的方法來製作一個非常大的字符變量?

+1

我認爲最大長度是所謂的'具體實現'中的一種。你需要檢查它的編譯器文檔。在開始處理內容之前,您是否確實需要閱讀整行內容? – eriktous

+0

這是不完全相同的,我知道如何聲明可分配數組,我想知道是否有我可以分配它的最大大小。 – drjrm3

+0

對於可分配數組,通常可以分配內存可以容納的任何內容。它可能會或可能不會相同的字符(這是不一樣的!)。 –

回答

3

由於通常的Fortran IO是基於記錄的,因此將行讀入字符串意味着知道最大字符串長度。另一種可能的設計:使用流IO和Fortran將忽略記錄邊界。以比最長行更短的固定長度塊讀取文件。併發症是處理在塊邊界上分割的項目。實用性取決於問題中沒有給出的細節。

P.S.從Adams等人的「Fortran 2003手冊」中獲得:「字符串允許的最大長度取決於處理器。」 - 意味着編譯器依賴。

0

最大值將取決於實施。對於你的情況,我能想到的東西沿着這些路線:

character(:),allocatable :: ch 

    l = 5 
    do 
    allocate(character(l) :: ch) 
    read(unit,'(a)',iostat=io) ch 
    if (ch(l-4:l) = '  ' .or. io/=0) exit 
    deallocate(ch) 
    l = l * 2 
    end do 

顯然不會爲墊工作=「不」,如果你希望長的區域,在您的記錄spacec。