我需要根据数据库中的数据创建固定长度的文本文件。数据导出没有问题,将数据加载到Go中也可以。如何以固定长度样式打印数据?
我有以下结构
type D struct {
A10 string // Should be 10 characters in result file
A20 string // Should be 20 characters in result file
A50 string // Should be 50 characters in result file
}
var d := D{ "ten", "twenty", "fifty" }
Run Code Online (Sandbox Code Playgroud)
所以,打印结构的结果应该是
| ten| twenty| fifty|
Run Code Online (Sandbox Code Playgroud)
我已经弄清楚,这fmt.Printf("%10s", "ten")将在前面添加 10 个前导空格,但我不知道如何阻止它溢出:fmt.Printf("%10s", "tenaaaaaaaa")将打印 11 个字符。
我想到了一个遍历每个字段并剪掉太长字符串的函数:
func trimTooLong(d *D) {
d.A10 = d.A10[:10]
d.A20 = d.A20[:20]
d.A50 = d.A20[:50]
}
Run Code Online (Sandbox Code Playgroud)
会有更好的方法吗?
您可以使用字符串格式中的精度将输出截断为字段宽度。
fmt.Printf("%5.5s", "Hello, world")
fmt.Printf("%5.5s", "A")
Run Code Online (Sandbox Code Playgroud)
将输出"Hello A".
所以在你的例子中,这可以解决问题:
fmt.Printf("%10.10s%20.20s%50.50s", d.A10, d.A20, d.A50)
Run Code Online (Sandbox Code Playgroud)