2013-08-05 39 views
1

我正在從帶有文本標題的ASCII數據文件讀取數據。 (標題包含有關數據運行的信息。)我想添加每個數據文件的一些列,然後將結果寫入另一個數據文件,但爲每個文件保留標題。問題是,我不知道標題行的長度是多少。如果我使用長字符變量(例如字符* 400)來確保我獲得了整個標題行,那麼我的新數據文件就會有很多我不想要的空白空間。基本上,我想做TRIM(HeaderVariable),但TRIM不適用於我。有什麼建議麼?有沒有辦法只寫一個CrLF?我想使用一個字符* 1的數組,並且在讀取它並寫入時測試每個字符,但是...哇,這太複雜了。在標準F77中有更簡單的方法嗎? [編輯:自我回答移動回答。一開始做不到,因爲代表太低了。]如何修改標準F77中的字符數組?

+0

您應該發佈您的答案作爲回答,以便立即明確問題有答案。然後,經過一段適當的時間間隔後,你可以接受你自己的答案。誰知道,你甚至可能會吸引一些upvotes。 –

+0

許多f77編譯器都將它作爲lnblnk()構建。另外,爲了在f77中完整你實際上不能模仿trim函數,你需要做這個字符串(:lnblnk(string)) – agentp

回答

1

我得到了答案。在此發帖以幫助他人。下面的LENGTH函數來自http://www.star.le.ac.uk/~cgp/prof77.html#tth_sEc7一旦你有了這個LENGTH函數,實現你自己的TRIM函數是微不足道的。在功能上,這與我最初的可怕想法沒有多大區別,但它更漂亮。

LEN LEN函數接受一個字符參數並以整數形式返回其長度。參數可能是一個局部字符變量或數組元素,但是這隻會返回一個常量。 LEN在字符僞參數(和字符函數名稱)的長度從調用單元傳遞過來的過程中更加有用,因此每個過程調用的長度可能不同。 LEN返回的長度是爲該項目聲明的長度。有時找到不包括尾隨空白的長度會更有用。下一個功能就是在這個過程中使用LEN。

INTEGER FUNCTION LENGTH(STRING) !Returns length of string ignoring trailing blanks 
    CHARACTER*(*) STRING 
    DO 15, I = LEN(STRING), 1, -1 
     IF(STRING(I:I) .NE. ' ') GO TO 20 
15 CONTINUE 
20 LENGTH = I 
    END