我正在读取带有文本标题的 ASCII 数据文件。(标题包含有关数据运行的信息。)我想添加每个数据文件的一些列,然后将结果写入另一个数据文件,但保留标题对于每个文件。问题是,我事先不知道标题行的长度是多少。如果我使用长字符变量(例如 character*400)来确保获得整个标题行,那么我的新数据文件有很多我不想要的空白。基本上,我想做 TRIM(HeaderVariable),但我无法使用 TRIM。有什么建议么?有没有办法只写到 CrLF?我想过使用一个字符*1 的数组,并在读取和写入时测试每个字符,但是……哇,这太复杂了。在标准 F77 中有更简单的方法吗?[编辑:自我回答转移到回答。一开始做不到,因为rep太低了。]
问问题
3276 次
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 回答