Fortran中字符串的续行

时间:2013-05-27 15:27:56

标签: string fortran

我刚开始在Fedora 17中使用gfortran 4.7.2。当我尝试使用以下测试代码时,我没有得到输出:

    PROGRAM test_ampersand
    IMPLICIT NONE
    PRINT *, 'I am a new learner of' &
     'fortran'
    END PROGRAM test_ampersand

我期待输出为:

I am a new learner of fortran

4 个答案:

答案 0 :(得分:5)

这也应该有效:

PRINT *, 'I am a new learner of &
     &fortran'

也就是说,字符文字可以在换行符中继续,但每个连续行必须在第一个非空白位置有一个&符号。

答案 1 :(得分:4)

当继续讨论这一行时,你需要一个逗号(在一行上打印多个变量或文字常量时需要)或字符串连接//,以便将两个字符串连接成一个。

这将有效:

PRINT *, 'I am a new learner of ', &
     'fortran'

这也可以:

PRINT *, 'I am a new learner of '// &
     'fortran'

答案 2 :(得分:2)

语句继续在自由格式源中的工作方式是将问题的陈述转换为

print *, 'I am a new learner of'      'fortran'

这不是一件有效的事情。当然,人们可以写

print *, 'I am a new learner of'//' fortran'

print *, 'I am a new learner of', 'fortran'

并且可能看到相同的效果。

但是,正如其他答案中所述,文字字符可以使用特殊形式的语句延续在自由格式源中继续超过行边界:

print *, 'I  am a new learner of &
          &fortran'

通常,人们经常看到自由形式的语句延续,只需要在问题的非终止行上使用&。但是,如果我们这样做,那么该行中的所有前导空格都会成为字符文字的一部分。在续行的&上,语句继续使用紧随其后的字符,而不是第一行。

然而,对于固定形式的来源,情况有所不同。

      print *, 'I am a new learner of'
     1'fortran'

就像

      print *, 'I am a new learner of'    'fortran'  ! Lots of spaces ignored

这又是一个无效的陈述。使用

      print *, 'I am a new learner of
     1fortran'

是一个有效的语句,但是再次受到第72列之外的所有空格的影响。

可以在这里使用字符串连接:

      print *, 'I am a new learner of '//
     1         'fortran'

或者只是在第72栏打破这一行(毕竟,由于线路很长,我们正在这样做。)

答案 3 :(得分:1)

在我正在编辑的旧代码中,&符号必须在恰好5个空格后出现在第二行;此代码中的所有其他非注释行以6个空格开头:

brands
Column
brand_id    
brand_title

table cart
Column
cart_id 
p_id    
ip_add  
customer_id 
qty 

categories
Column  
cat_id
cat_title

customers
Column
customer_id
customer_name
customer_email  
customer_pass
customer_country
customer_city
customer_contact
customer_address
customer_image
customer_ip 

customer_orders
Column  
order_id    
customer_id 
due_amount  
invoice_no  
total_products  
order_date
order_status

payments
Column  
payment_id
invoice_no
amount
payment_mode
ref_no  
code
payment_date    

pending_orders
Column  T
order_id    
customer_id 
invoice_no
product_id  
qty 
order_status

products
Column  
product_id  
cat_id  
brand_id        
date
product_title
product_img1    
product_img2    
product_img3    
product_price   
product_desc    
product_keywords    
status  

admins
Column  
admin_id    
admin_email
admin_pass

这与编译器期望的fortran版本有关,它可能从代码中推断出来。因为我正在编辑遗留代码,所以我必须遵循FORTRAN 77风格。你描述的是Fortran 95风格。

您可以在文件扩展名中指明语言版本(例如 PROGRAM test_ampersand IMPLICIT NONE PRINT *, 'I am a new learner of' & 'fortran' END PROGRAM test_ampersand 而不是.f08)或compiler options(例如.f)。如果您不受旧版本的限制,最好使用最新版本。

(所有固定列要求都与Fortran的早期版本如何在穿孔卡上编码有关;较新版本提供其他选项。)