我的一位教授问我今年夏天是否有时间/渴望弄清楚为什么他的一个强大的90个程序没有在未注释的版本中工作但是在评论版本中。该程序长达几千行,所以我显然不会手动查找错误。
我的想法是以下因为我不是专家程序员,但决定将此任务作为一个有趣/学习的任务,并且对教授的一个好处是写一个python脚本来读取文本文件和存储的每一行将每一行放入一个列表中,不包括注释行(因此以! COMMENT TEXT
开头)和不包含任何代码的行(只是换行符)
我将已注释和未注释的fortran源代码复制并粘贴到两个分别调用c.txt
和unc.txt
的文本文件中删除任何缩进。
到目前为止我所拥有的是:
listCom = []
esclam = "!"
with open("c.txt") as f:
i=0
for line in f:
line = line.strip()
if line == "":
continue
if line.find(esclam) == -1:
listCom.append(line)
for e in listCom:
print e
这是为了检查注释版本文本文件中的每一行是否在列表中正确存储但是它无法正常工作。我可能会让问题变得更加困难。任何建议都非常感谢。我的计划是为未注释的文本文件重复相同的过程,然后使用一个标志变量逐个条目地比较两个列表,告诉我2在哪个条目不同或者根本不相同。
粘贴在c.txt
文件中的评论版本的fortran 90源代码示例如下:
! When this subroutine is run at double precision,
! a good number is 7.
use constants
implicit none
complex(kind=double), intent(inout) :: A
complex(kind=double), intent(in) :: Q
integer, intent(in):: order,case_type,choice, comp_coeff
complex(kind=double), dimension(0:MAX_),intent(out) :: D_m
integer, intent(out):: k_max
complex(kind=double),intent(out):: norm
pi=acos(-one)
G_2=cmplx(zero,zero,double)
G_1=cmplx(zero,zero,double )
!FL=2.0D0**126
FL=D1mach(2)
答案 0 :(得分:1)
with open('file.txt', 'r') as f:
f = f.read().splitlines()
lines = [x for x in f if x and not x.strip().startswith('!')]
lines
是一个包含所有fortran代码行的列表,没有注释行或空行。
for line in lines:
print(line)
将打印
use constants
implicit none
complex(kind=double), intent(inout) :: A
complex(kind=double), intent(in) :: Q
integer, intent(in):: order,case_type,choice, comp_coeff
complex(kind=double), dimension(0:MAX_),intent(out) :: D_m
integer, intent(out):: k_max
complex(kind=double),intent(out):: norm
pi=acos(-one)
G_2=cmplx(zero,zero,double)
G_1=cmplx(zero,zero,double )
FL=D1mach(2)
为您的示例文件。