格式:添加尾随空格字符输出左对齐

问题描述 投票:2回答:4

你如何格式化字符串具有一定宽度左对齐?还有就是Aw格式化器,其中w表示期望的字符输出的宽度,但它会预先考虑空间如果w > len(characters),代替追加它们。

当我尝试

44 format(A15)
   print 44, 'Hi Stack Overflow'

我得到

>        Hi Stack Overflow<

代替

>Hi Stack Overflow        <

是否有解决这个任何简单的Fortran格式的解决方案?

fortran string-formatting fortran90
4个回答
2
投票

如问题指出的那样,问题是,当长度比输出场的短字符表达式宽度的填充空间中的字符表达式之前出现。我们想要的是用于填充空间,以我们所期望的字符串之后到来。

没有一个简单的解决方案的格式,在自然的编辑描述符的感觉。然而,我们可以做什么是输出具有足够的尾部空格(其计入长度)的表达式。

例如:

print '(A50)', 'Hello'//REPEAT(' ',50)

要么

character(50) :: hello='Hello'
print '(A50)', hello

甚至

print '(A50)', [character(50) :: 'hello']

也就是说,在每种情况下输出产品长度的字符(至少)50。每个将与空白右侧填充。

如果你选择,你甚至可以使返回扩展(左对齐)表达的功能:

print '(A50)', right_pad('Hello')

其中函数就留给读者自己练习。


2
投票

为了完成供将来参考@francescalus出色答卷,所提出的解决方案也适用于地方的字符串文字allocatables的情况下:

character(len=:), allocatable :: a_str

a_str = "foobar"

write (*,"(A,I4)") a_str, 42
write (*,"(A,I4)") [character(len=20) :: a_str], 42

将输出

foobar  42
foobar                42

1
投票

有点难看,但你可以连接一个空字符串:

    character*15 :: blank=' '
    print 44, 'Hi Stack Overflow'//blank

1
投票
program test ! Write left justified constant width character columns 
! declare some strings.
character(len=32) :: str1,str2,str3,str4,str5,str6 
! define the string values.
str1 = "     Nina "; str2 = "       Alba  " ; str3 = "        blue   " 
str4 = "  Jamil   "; str5 = "   Arnost "    ; str6 = " green             "
write(*,'(a)') "123456789012345678901234567890"
! format to 3 columns 10 character wide each.
! and adjust the stings to the left.
write(*,'(3(a10))') adjustl(str1), adjustl(str2), adjustl(str3) 
write(*,'(3(a10))') adjustl(str4), adjustl(str5), adjustl(str6) 
end program test
 $ ./a.out
123456789012345678901234567890
Nina      Alba      blue 
Jamil     Arnost    green

adjustL()移动前导空格到字符串的结尾。


0
投票

我建议你不要限制输出的字符数。

将其更改为下面的工作:

44 format(A)
 print 44, 'Hi Stack Overflow'
© www.soinside.com 2019 - 2024. All rights reserved.