如何将字符串格式化为具有恒定宽度和左对齐?有Aw
格式化程序,其中w
表示所需的字符输出宽度,但它会在w > len(characters)
之前添加空格,而不是附加它们。
当我尝试
时44 format(A15)
print 44, 'Hi Stack Overflow'
我得到了
> Hi Stack Overflow<
而不是
>Hi Stack Overflow <
是否有任何简单的Fortran格式化解决方案可以解决这个问题?
答案 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'