Text 如何在标准F77中修剪字符数组?

Text 如何在标准F77中修剪字符数组?,text,fortran,character,trim,fortran77,Text,Fortran,Character,Trim,Fortran77,我正在读取带有文本标题的ASCII数据文件。(标题包含有关数据运行的信息。)我想添加每个数据文件的一些列,然后将结果写入另一个数据文件,但保留每个文件的标题。问题是,我事先不知道标题行的长度。如果我使用一个长字符变量(例如character*400)来确保获得整个标题行,那么我的新数据文件中有很多我不想要的空白。基本上,我想做TRIM(HeaderVariable),但TRIM对我不可用。有什么建议吗?是否有一种只向CrLF写入的方法?我想用一个字符数组*1,在读写的时候测试每个字符,但是…哇,

我正在读取带有文本标题的ASCII数据文件。(标题包含有关数据运行的信息。)我想添加每个数据文件的一些列,然后将结果写入另一个数据文件,但保留每个文件的标题。问题是,我事先不知道标题行的长度。如果我使用一个长字符变量(例如character*400)来确保获得整个标题行,那么我的新数据文件中有很多我不想要的空白。基本上,我想做TRIM(HeaderVariable),但TRIM对我不可用。有什么建议吗?是否有一种只向CrLF写入的方法?我想用一个字符数组*1,在读写的时候测试每个字符,但是…哇,太复杂了。在标准F77中有没有更简单的方法?
[编辑:self-answer已移动到answer。由于rep太低,起初无法执行该操作。]

我得到了答案。在这里发布帮助他人。下面的长度函数取自一旦你有了这个长度函数,实现你自己的修剪函数就很简单了。从功能上讲,这与我最初的可怕想法没有太大区别,但它更漂亮

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 

我得到了答案。在这里发布帮助他人。下面的长度函数取自一旦你有了这个长度函数,实现你自己的修剪函数就很简单了。从功能上讲,这与我最初的可怕想法没有太大区别,但它更漂亮

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 

你应该把你的答案作为一个答案贴出来,以便立即清楚地表明这个问题有答案。然后,经过一段适当的时间间隔后,你可以接受自己的答案。谁知道呢,您甚至可能会为此吸引一些选民。许多f77编译器都内置了lnblnk()。此外,为了在f77中实现完整性,您不能真正模仿修剪功能,您需要使用以下字符串(:lnblnk(string)),您应该将您的答案作为答案发布,以立即明确问题有答案。然后,经过一段适当的时间间隔后,你可以接受自己的答案。谁知道呢,您甚至可能会为此吸引一些选民。许多f77编译器都内置了lnblnk()。此外,为了在f77中实现完整性,您不能实际模仿修剪功能,您需要执行以下字符串(:lnblnk(string))