如何在Fortran

时间:2016-01-05 23:16:19

标签: printing fortran

这是python3中我想要在Fortran中做的一个例子:

str1 = "Hello"
str2 = " World!"
print(str1 + str2)

# And then the result would be "Hello World!"

当我这样做时:

print "(A)", str1, str2

它将它放在一个单独的行上。如果有人知道如何帮助请回答。

4 个答案:

答案 0 :(得分:3)

使用//运算符对字符串连接的字面答案在另一个答案中给出。特别要注意的是,您可能想要TRIM第一个参数。

但是你的问题提出了另一个有趣的概念,那就是格式回复

格式(A)我们有一个格式项。在输出列表str1, str2中,我们有两个输出项。在一般输出语句中,我们将每个格式项(带有重复计数)应用于相应的输出项。因此,使用第一个格式项str1处理A,并显示一个字符串。

来第二个输出项str2我们已经使用了单一格式项,到达格式项列表的末尾。结果是我们看到了这种格式的反转:也就是说,我们回到列表中的第一项。之后,至关重要的是,我们开始了新的一线。

所以,如果我们只想将这两个项目打印到一行(它们之间没有空格或空白行),我们可以使用(为了清晰起见而忽略修剪)

print "(A)", str1//str2

或者我们可以使用没有此版本的格式

print "(2A)", str1, str2
print "(A, A)", str1, str2

第一个连接两个字符变量以给出一个更长的,然后将其打印为单个输出项。第二个单独打印。

来到你的特定例子

character(12), parameter :: str1="Hello"    ! Intentionally longer - trailing blanks
character(12), parameter :: str2=" World!"

print "(2A)", TRIM(str1), TRIM(str2)
end

将具有类似

的输出
Hello World!

使用该中间空格,因为TRIM不会从str2中删除前导空间。更广泛地说,虽然我们不会为我们提供领先的空间,但我们希望将其添加到输出中。

当然,连接仍然有效(我回到假设没有修剪)

character(*), parameter :: str1="Hello"    ! No trailing blank
character(*), parameter :: str2="World!"

print "(A)", str1//" "//str2
end

但我们可以使用X编辑描述符选择我们的格式来添加空格

print "(2(A,1X))", str1, str2
print "(A,1X,A)", str1, str2
print "(2(A,:,1X))", str1, str2

这个最后一个有一个有用的冒号编辑描述符(在这个答案的范围之外)。

答案 1 :(得分:1)

可能接近你想要的: Concatenate two strings in Fortran

zz = trim(xx) // trim(yy)

More info

Bing

答案 2 :(得分:1)

如果你想在同一行上打印大量数据,它看起来像是被覆盖但另一个有用的功能如下:

character(len=32),dimension(100) :: str    

do i=1,100
  write(*,fmt="(A)", advance='no') str(i)
end do
write(*,*) ! to go to the next line when you are done

由于advance ='no'

,这将在同一行打印100个字符

答案 3 :(得分:0)

您可以使用另一个变量将其放入其中,并在该新变量中写入这两个字符串:

Program combineString
    character(len=100) :: text1, text2, text

    text1 = "Hello,"
    text2 = "My name is X"

    write(text,'(A6, X, A20)') text1, text2

    write(*,*) text

End Program

输出为:

Hello, My name is X