最近一直在写文档,然后不可避免的需要复制一些文本。但是复制过程中把换行符或者空格连带复制进去,然后黏贴到Excel中,带空格或者换行符还要手动去掉,然后就想开发程序自动去除。
开发条件
- Go语言1.18版本
- 本机已安装MinGW
- 使用GO语言第三方插件robotgo
开发
安装插件
go get -u github.com/go-vgo/robotgo
注册监控命令,我这边是有两个命令,所以需要用异步方式
// 异步操作
hook.Register(hook.KeyDown, []string{"ctrl", "c"}, func(e hook.Event) {
})
hook.Register(hook.KeyDown, []string{"esc"}, func(e hook.Event) {
fmt.Println("esc")
hook.End()
})
s := hook.Start()
<-hook.Process(s)
处理函数
func handleConent(content string) string {
log.Printf("处理前的字符串 : %s", content)
//content = strings.Trim(content, " ")
content = replaceWrapLeft(content)
content = replaceWrapRight(content)
log.Printf("处理后的字符串 : %s", content)
return content
}
func replaceWrapLeft(content string) string {
if content == "" {
return content
}
num := 0
len := len(content)
for i := 0; i < len; i++ {
if content[i] == '\r' || content[i] == '\t' || content[i] == '\n' || content[i] == ' ' {
num++
} else {
break
}
}
return content[num:len]
}
func replaceWrapRight(content string) string {
if content == "" {
return content
}
num := 0
len := len(content)
for i := len - 1; i > 0; i-- {
if content[i] == '\r' || content[i] == '\t' || content[i] == '\n' || content[i] == ' ' {
num++
} else {
break
}
}
return content[0 : len-num]
}
我没有在Go语言官方库中找到可以删除字符串前后的换行符的函数,就自己实现了一个。
加入日志
logFile, err := os.OpenFile("monitor.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("open log file failed, err:", err)
return
}
log.SetOutput(logFile)
log.SetFlags(log.Lshortfile | log.Lmicroseconds | log.Ldate)
上述功能融合就能实现我的需求,亲测还是很好用的。
完整代码
package main
import (
"fmt"
"log"
"os"
"github.com/go-vgo/robotgo/clipboard"
hook "github.com/robotn/gohook"
)
func main() {
logFile, err := os.OpenFile("monitor.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("open log file failed, err:", err)
return
}
log.SetOutput(logFile)
log.SetFlags(log.Lshortfile | log.Lmicroseconds | log.Ldate)
// 异步操作
hook.Register(hook.KeyDown, []string{"ctrl", "c"}, func(e hook.Event) {
content, _ := clipboard.ReadAll()
content = handleConent(content)
clipboard.WriteAll(content)
})
hook.Register(hook.KeyDown, []string{"esc"}, func(e hook.Event) {
fmt.Println("esc")
hook.End()
})
s := hook.Start()
<-hook.Process(s)
fmt.Println("the program is over!")
}
func handleConent(content string) string {
log.Printf("处理前的字符串 : %s", content)
//content = strings.Trim(content, " ")
content = replaceWrapLeft(content)
content = replaceWrapRight(content)
log.Printf("处理后的字符串 : %s", content)
return content
}
func replaceWrapLeft(content string) string {
if content == "" {
return content
}
num := 0
len := len(content)
for i := 0; i < len; i++ {
if content[i] == '\r' || content[i] == '\t' || content[i] == '\n' || content[i] == ' ' {
num++
} else {
break
}
}
return content[num:len]
}
func replaceWrapRight(content string) string {
if content == "" {
return content
}
num := 0
len := len(content)
for i := len - 1; i > 0; i-- {
if content[i] == '\r' || content[i] == '\t' || content[i] == '\n' || content[i] == ' ' {
num++
} else {
break
}
}
return content[0 : len-num]
}