golang实现读取当前所在文件夹里面的txt数据,去除空格,以列的形式保存在excel中

su_sai · · 1700 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

假如原始数据在txt中,格式如下:

    1.23  486    89.001

456.2   8.25     96.01

       456.01  456.6    456.1

每一行的空格数量不同,但是数字数量相同,列数保持一致。希望将这些数据保持所在行数和列数不变,保存在excel中。

保存在excel中,格式如下:

col1          col2            col3

row1 1.23 486 89.001    

row2       456.2      8.25         96.01

row3     456.01     456.6      465.1


golang代码如下:

package main


import (
"encoding/csv"
"fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"strings"
)


func main() {
dir := getCurrentFilePath()
readDir(dir)
fmt.Println("complete!  press any key to close this window!")
var in string
fmt.Scanf("%s", &in)
}


func readDir(dir string) {
rd, err := ioutil.ReadDir(dir)
if err != nil {
fmt.Println("read dir error!")
return
}
for _, file := range rd {
filename := file.Name()
fmt.Println("filename: ", filename)
if strings.Contains(filename, ".txt") {
str := readfile(filename)
if str == "" {
fmt.Println("readfile error!!!!!!!")
return
}


xlsname := strings.Trim(filename, ".txt") + ".xls"
f, err := os.Create(xlsname)
if err != nil {
fmt.Println("create " + xlsname + "failed!!!!!")
}
defer f.Close()
f.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM
w := csv.NewWriter(f)


sli := getRowsSli(str) //sli:[  12  45 8,   456 8  9,...]
for _, v := range sli {
val := formatString(v) //val: [12 45 8]
w.Write(val)
}
w.Flush()
}
}
}


func getCurrentFilePath() string {
file, _ := exec.LookPath(os.Args[0])
path, _ := filepath.Abs(file)
dir, _ := filepath.Split(path)
return dir
}



func readfile(filename string) string {
file, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println("there is no source.txt")
return ""
}
f := string(file)
return f
}

//txt中换行是“\n”
func getRowsSli(str string) []string {
sli := strings.Split(str, "\n")
return sli
}


// 32->空格    9->tab
func formatString(str string) []string {
srcLength := len(str)
rtnSli := []string{}
i := 0
for {
if str[i] >= 48 && str[i] <= 57 {
// 开始循环取数据
var tmp string
for {
tmp = tmp + string(str[i])
i++
if i >= srcLength {
break
}
if str[i] == 32 || str[i] == 9 {
break
}
}
rtnSli = append(rtnSli, tmp)
}
if i >= srcLength {
break
}
i++
}
return rtnSli
}


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1700 次点击  
加入收藏 微博
1 回复  |  直到 2021-03-14 18:55:18
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传