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

时间:2017-12-11 21:41:44

标签: fortran string-formatting fortran90

如何将字符串格式化为具有恒定宽度左对齐?有Aw格式化程序,其中w表示所需的字符输出宽度,但它会在w > len(characters)之前添加空格,而不是附加它们。

当我尝试

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

我得到了

>        Hi Stack Overflow<

而不是

>Hi Stack Overflow        <

是否有任何简单的Fortran格式化解决方案可以解决这个问题?

5 个答案:

答案 0 :(得分:2)

要完成@francescalus出色的答案以供将来参考,建议的解决方案也可以在可分配变量代替字符串文字的情况下使用:

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 :(得分:1)

如问题中所述,问题是当长度短于输出字段宽度的字符表达式时,填充空格在字符表达式之前出现。我们想要的是填充空间在我们想要的字符串之后。

在自然编辑描述符的意义上,没有简单的格式化解决方案。但是,我们能做的是输出一个带有足够尾随空格的表达式(计入长度)。

例如:

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

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

甚至

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

也就是说,在每种情况下,输出项目都是长度(至少)50的字符。每个都将用空白填充在右边。

如果你选择了,你甚至可以创建一个返回扩展(左对齐)表达式的函数:

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

其中该功能留给读者练习。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

// // WebViewAsPopup.swift // MySimpleApp // import WebKit class WebViewAsPopup: NSObject, UIWebViewDelegate { func showWebViewPopup(on controller: UIViewController) { // Popup background let bg = UIView() bg.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height) bg.layer.backgroundColor = UIColor.black.withAlphaComponent(0.5).cgColor // Webview sizing let width = UIScreen.main.bounds.width - 60 let height = UIScreen.main.bounds.height - 200 let x = UIScreen.main.bounds.width/2 - width/2 let y = UIScreen.main.bounds.height/2 - height/2 // Webview stuff let webView = UIWebView() webView.frame = CGRect(x: x, y: y, width: width, height: height) let url = URL(string: "https://google.com") let request = URLRequest(url: url!) // webView.delegate = self << it crash here webView.loadRequest(request) // Styling webview popup webView.layer.borderWidth = 1 webView.layer.borderColor = UIColor.black.cgColor webView.layer.masksToBounds = true webView.layer.cornerRadius = 10 // Add bg then webview to main view controller controller.view.addSubview(bg) controller.view.addSubview(webView) } func webViewDidStartLoad(_ webView: UIWebView) { print("#webViewDidStartLoad!") // << it doesn't fire :( } func webViewDidFinishLoad(_ webView: UIWebView) { print("#webViewDidFinishLoad!") // << it doesn't fire :( } }

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将前导空格移动到字符串的末尾。

答案 4 :(得分:0)

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

将其更改为以下内容将起作用:

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