golang文本对齐处理工具插件库align的使用
Golang文本对齐处理工具插件库align的使用
概述
align是一个通用的文本对齐工具,专注于提供快速、高效且实用的文本对齐功能。它的灵感来源于其他优秀的对齐工具,如Linux的column
命令和Sublime Text的AlignTab
插件。
功能特性
- 提供简单实用的CLI工具,可指定分隔符、输入输出文件等
- 支持任意字符串作为分隔符,不限于单个字符
- 如果分隔符字符串包含在数据中,可以通过指定文本限定符进行转义
- 支持每个字段的右对齐、居中对齐或左对齐
安装方法
$ go get github.com/Guitarbum722/align
$ make install
# 构建所有二进制文件
$ make release
使用示例
基本用法
# 指定输入文件和输出文件
$ align -f input_file.csv -o output_file.csv
# 使用标准输出
$ align -f input_file.csv -o
# 通过管道输入
$ cat awesome.csv | align
处理不同字段数的行
$ echo "field1|field2\nValue1|Value2\nCoolValue1|CoolValue2|CoolValue3" | align -s \|
field1 | field2
Value1 | Value2
CoolValue1 | CoolValue2 | CoolValue3
列过滤和对齐方式覆盖
# 输出字段1,3,5,使用右对齐
$ cat file.csv | align -a right -c 1,3,5
# 输出字段1,2,3,7,8,默认左对齐,但字段7居中对齐
$ cat file.csv | align -c 1,2,3,7,8 -i 1:right,7:center
# 输出所有字段,默认右对齐,但覆盖特定列的对齐方式
$ cat file.csv | align -a right -i 1:center,5:left
国际字符支持
first , last , middle , email
paul , danny , かど , や製油
使用emoji作为分隔符
first 😮 last 😮 email
Hector 😮 Gonzalez 😮 h.g@nothing.com
添加额外填充
# 在分隔符周围添加4个空格的填充
align -p 4
完整Go代码示例
package main
import (
"fmt"
"github.com/Guitarbum722/align"
)
func main() {
// 示例数据
data := []string{
"name,age,location",
"John,30,New York",
"Alice,25,San Francisco",
"Bob,35,Chicago",
}
// 创建对齐器
aligner := align.NewAlign(align.Left)
aligner.SetDelimiter(",")
aligner.SetPadding(2) // 设置2个空格的填充
// 处理数据
for _, line := range data {
aligned, err := aligner.Align(line)
if err != nil {
fmt.Println("Error:", err)
continue
}
fmt.Println(aligned)
}
}
CLI选项说明
Usage: align [-h] [-f] [-o] [-q] [-s] [-d] [-a] [-c] [-i] [-p]
Options:
-h | --help 帮助信息
-f 输入文件。如果不指定,则从stdin读取
-o 输出文件(默认为stdout)
-q 文本限定符(如需要)
-s 分隔符(默认为',')
-d 输出分隔符(默认为-s的值)
-a <left>, <right>, <center> 对齐方式(默认为left)
-c 输出特定字段(默认为所有字段)
-i 按列号覆盖对齐方式(例如2:center,5:right)
-p 分隔符周围的额外填充
贡献指南
如果您有任何建议或发现错误,请提交issue。如果您认为自己可以修复问题,请使用Fork/Pull Request方式提交您的功能分支。
更多关于golang文本对齐处理工具插件库align的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang文本对齐处理工具插件库align的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang 文本对齐处理工具 align 库使用指南
align
是一个简单实用的 Go 语言文本对齐处理库,可以帮助你对文本进行左对齐、右对齐、居中对齐等操作。下面我将详细介绍如何使用这个库。
安装
首先安装 align 库:
go get github.com/guptarohit/asciigraph
基本使用方法
1. 左对齐
package main
import (
"fmt"
"github.com/guptarohit/asciigraph/align"
)
func main() {
text := "Hello, World!"
width := 20
// 左对齐
leftAligned := align.Left(text, width)
fmt.Printf("'%s'\n", leftAligned)
// 输出: 'Hello, World! '
}
2. 右对齐
func main() {
text := "Hello, World!"
width := 20
// 右对齐
rightAligned := align.Right(text, width)
fmt.Printf("'%s'\n", rightAligned)
// 输出: ' Hello, World!'
}
3. 居中对齐
func main() {
text := "Hello, World!"
width := 20
// 居中对齐
centerAligned := align.Center(text, width)
fmt.Printf("'%s'\n", centerAligned)
// 输出: ' Hello, World! '
}
高级用法
多行文本对齐
func main() {
lines := []string{
"First line",
"Second line is longer",
"Third",
}
// 找出最长行的长度
maxWidth := 0
for _, line := range lines {
if len(line) > maxWidth {
maxWidth = len(line)
}
}
// 对齐所有行
fmt.Println("Left aligned:")
for _, line := range lines {
fmt.Printf("'%s'\n", align.Left(line, maxWidth))
}
fmt.Println("\nRight aligned:")
for _, line := range lines {
fmt.Printf("'%s'\n", align.Right(line, maxWidth))
}
fmt.Println("\nCenter aligned:")
for _, line := range lines {
fmt.Printf("'%s'\n", align.Center(line, maxWidth))
}
}
表格数据对齐
func main() {
data := [][]string{
{"Name", "Age", "City"},
{"John Doe", "30", "New York"},
{"Jane Smith", "25", "London"},
{"Bob Johnson", "45", "Paris"},
}
// 计算每列的最大宽度
colWidths := make([]int, len(data[0]))
for _, row := range data {
for i, cell := range row {
if len(cell) > colWidths[i] {
colWidths[i] = len(cell)
}
}
}
// 打印对齐的表格
for _, row := range data {
for i, cell := range row {
fmt.Printf("| %s ", align.Left(cell, colWidths[i]))
}
fmt.Println("|")
}
}
自定义填充字符
默认情况下,align 使用空格进行填充,但你可以自定义填充字符:
func main() {
text := "Hello"
width := 10
// 自定义左对齐,使用'-'填充
left := align.Left(text, width)
leftCustom := left[:len(text)] + strings.Repeat("-", width-len(text))
fmt.Printf("'%s'\n", leftCustom)
// 输出: 'Hello-----'
}
注意事项
- 如果文本长度大于指定的宽度,align 不会截断文本,而是原样返回
- 对于包含多字节字符的文本(如中文),需要使用
utf8.RuneCountInString
替代len
来计算字符数 - 对齐操作不会处理换行符,多行文本需要先分割再分别对齐
性能考虑
对于大量文本处理,建议:
- 预先计算好最大宽度
- 批量处理文本而不是单行处理
- 如果需要处理非常大的文件,考虑流式处理
align
库虽然简单,但在处理文本对齐时非常实用,特别是生成报表、格式化输出等场景。