这是python3中我想要在Fortran中做的一个例子:
str1 = "Hello"
str2 = " World!"
print(str1 + str2)
# And then the result would be "Hello World!"
当我这样做时:
print "(A)", str1, str2
它将它放在一个单独的行上。如果有人知道如何帮助请回答。
答案 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)
答案 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