Fortran 77中如何拆分超长字符串变量以适配72列行宽限制?
在Fortran 77中拆分超长字符串的解决方案
在Fortran 77里处理超过72列的字符串确实挺头疼的,不过有两种标准且可靠的方法能解决这个问题,保证编译通过:
方法1:使用字符串连接符//拆分
你可以把长字符串拆成多个短片段,每个片段放在单引号里,然后用Fortran的字符串连接符//把它们连起来,同时利用Fortran的续行规则(第6列放续行标记,比如&)来拆分代码行。示例如下:
CHARACTER*256 MYSTRING DATA MYSTRING / 'Lorem ipsum dolor sit amet, consectetur adipiscing '// &'elit, sed do eiusmod tempor incididunt ut labore et dolore magna '// &'aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco '// &'laboris nisi ut aliquip ex ea commodo consequat.' /
注意:
- 第6列的
&是续行标记,必须放在这个位置(不能在其他列),告诉编译器这行是上一行的延续。 - 每个字符串片段要控制在7-72列范围内,符合Fortran 77的代码列限制。
- 片段末尾的空格要保留,确保拼接后的字符串和原内容一致。
方法2:利用DATA语句的多行续行特性
Fortran 77的DATA语句允许将多个相邻的字符串常量自动拼接成一个长字符串,不需要连接符,同样用续行标记拆分代码行即可:
CHARACTER*256 MYSTRING DATA MYSTRING / 'Lorem ipsum dolor sit amet, consectetur adipiscing ', &'elit, sed do eiusmod tempor incididunt ut labore et dolore magna ', &'aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco ', &'laboris nisi ut aliquip ex ea commodo consequat.' /
这种方法和第一种效果完全一样,只是少了连接符//,写起来更简洁。需要注意的点和方法1一致,重点是续行标记的位置和字符串片段的列范围。
另外要提醒一下:有些老的Fortran编译器可能对续行标记的字符有要求(比如用*而不是&),如果&不行的话,换成*试试,这两种都是标准允许的续行标记。
内容的提问来源于stack exchange,提问作者Flux
相关产品推荐
相关产品推荐

