1

テキスト ヘッダーを含む ASCII データ ファイルから読み込んでいます。(ヘッダーにはデータ実行に関する情報が含まれています。) 各データ ファイルの列の一部を追加し、結果を別のデータ ファイルに書き込みたいが、ヘッダーは保持したいファイルごとに。問題は、ヘッダー行の長さが事前にわからないことです。ヘッダー行全体を確実に取得するために長い文字変数 (たとえば、character*400) を使用すると、新しいデータ ファイルに不要な空白が大量に含まれてしまいます。基本的にTRIM(HeaderVariable)をしたいのですが、TRIMが使えません。助言がありますか?CrLFにのみ書き込む方法はありますか? 文字の配列*1を使って、読み書きしながら各文字をテストしようと思ったのですが...うわー、それはとても複雑です。標準の F77 でこれを行う簡単な方法はありますか? [編集: 自己回答は回答に移動しました。担当者が少なすぎて最初はできませんでした。]

4

1 に答える 1

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 
于 2013-08-09T19:35:32.500 に答える