如何打印带有引号的 Fortran 字符串?
How do I print a Fortran string with quotes around it?
假设我有一个如下所示的 Fortran 程序:
character*30 changed_string1
changed_string1="hello"
write(*,"(A)")changed_string1(1:3)
end
我想打印带引号的字符串,以便我可以准确地看到前导空格和尾随空格。如何做到这一点?
您可以在字符串周围打印引号。这将启用查看前导和尾随空格。
write(*,"('''',A,'''')") changed_string1
或效果相同
write(*,"(3A)") "'",changed_string1,"'"
(也被 francescalus 提到)在你的字符串之前和之后打印一个 '
字符,
或者您可以将您的字符串与这些字符连接起来并打印结果
write(*,"(A)") "'"//changed_string1//"'"
没有字符的编辑描述符将它们与分隔符一起输出。字符变量没有像文字字符常量中出现的那样的“自动”定界符(尽管可能将它们作为内容)。
这意味着您必须自己显式打印任何选定的定界符,将它们添加到格式中或像 中那样连接。
同样,您也可以将分隔符添加到输出列表中(使用
相应的格式更改):
write (*,'(3A)') '"', string, '"'
您甚至可以编写一个 returns “定界字符串”的函数,并使用
结果在输出列表中:
implicit none
character(50) :: string="hello"
print '(A)', delimit(string,'"')
contains
pure function delimit(str, delim) result(delimited)
character(*), intent(in) :: str, delim
character(len(str)+2*len(delim)) delimited
delimited = delim//str//delim
end function delimit
end program
上面的函数结果甚至可以是延迟长度(character(:), allocatable :: delimited)
以避免显式声明结果长度。
正如 yamajun 在评论中提醒我们的那样,格式化输出的连接具有 定界符模式 ,它允许将引号和撇号自动添加到 [=35] 的输出中=]列表定向和名单输出(仅限)。例如,我们可以控制特定数据传输语句的分隔符模式:
write(*, *, delim='quote') string
write(*, *, delim='apostrophe') string
或者对于整个连接:
open(unit=output_unit, delim='quote') ! output_unit from module iso_fortan_env
不要忘记,列表定向输出会将前导空白添加到您的输出中,如果您的字符输出项中有引号或撇号,您将不会看到完全相同的表示(这甚至可能是您想要):
use, intrinsic :: iso_fortran_env, only : output_unit
open(output_unit, delim='apostrophe')
print*, "Don't be surprised by this output"
end
Fortran 2018 不允许以这种方式选择任意分隔符,但这仍然适用于某些用途。
假设我有一个如下所示的 Fortran 程序:
character*30 changed_string1
changed_string1="hello"
write(*,"(A)")changed_string1(1:3)
end
我想打印带引号的字符串,以便我可以准确地看到前导空格和尾随空格。如何做到这一点?
您可以在字符串周围打印引号。这将启用查看前导和尾随空格。
write(*,"('''',A,'''')") changed_string1
或效果相同
write(*,"(3A)") "'",changed_string1,"'"
(也被 francescalus 提到)在你的字符串之前和之后打印一个 '
字符,
或者您可以将您的字符串与这些字符连接起来并打印结果
write(*,"(A)") "'"//changed_string1//"'"
没有字符的编辑描述符将它们与分隔符一起输出。字符变量没有像文字字符常量中出现的那样的“自动”定界符(尽管可能将它们作为内容)。
这意味着您必须自己显式打印任何选定的定界符,将它们添加到格式中或像
同样,您也可以将分隔符添加到输出列表中(使用 相应的格式更改):
write (*,'(3A)') '"', string, '"'
您甚至可以编写一个 returns “定界字符串”的函数,并使用 结果在输出列表中:
implicit none
character(50) :: string="hello"
print '(A)', delimit(string,'"')
contains
pure function delimit(str, delim) result(delimited)
character(*), intent(in) :: str, delim
character(len(str)+2*len(delim)) delimited
delimited = delim//str//delim
end function delimit
end program
上面的函数结果甚至可以是延迟长度(character(:), allocatable :: delimited)
以避免显式声明结果长度。
正如 yamajun 在评论中提醒我们的那样,格式化输出的连接具有 定界符模式 ,它允许将引号和撇号自动添加到 [=35] 的输出中=]列表定向和名单输出(仅限)。例如,我们可以控制特定数据传输语句的分隔符模式:
write(*, *, delim='quote') string
write(*, *, delim='apostrophe') string
或者对于整个连接:
open(unit=output_unit, delim='quote') ! output_unit from module iso_fortan_env
不要忘记,列表定向输出会将前导空白添加到您的输出中,如果您的字符输出项中有引号或撇号,您将不会看到完全相同的表示(这甚至可能是您想要):
use, intrinsic :: iso_fortran_env, only : output_unit
open(output_unit, delim='apostrophe')
print*, "Don't be surprised by this output"
end
Fortran 2018 不允许以这种方式选择任意分隔符,但这仍然适用于某些用途。