随笔 - 275  文章 - 0  评论 - 283  阅读 - 145万

csv文件操作(go语言)

go语言自带的有csv文件读取模块,看起来好像不错,今天玩玩,也算是系统学习go语言的一部分……^_^

 

一、写csv文件

函数:

func NewWriter(w io.Writer) *Writer

func (w *Writer) Flush()

func (w *Writer) Write(record []string) (err os.Error)

func (w *Writer) WriteAll(records [][]string) (err os.Error)

具体见官网:http://golang.org/pkg/csv/#NewWriter

 

其实写csv文件大可不必用这些函数,直接按照规则写入文件就行,不过这里有这些函数,还是写个demo,也方便我以后使用:

package main

import (
        "csv"
        "os"
        "bytes"
        "fmt"
)

func main(){
        fileName := "2.csv"
        buf := new(bytes.Buffer)
        r2 := csv.NewWriter(buf)
        for i:=0;i<10;i++ {
                s := make([]string,3)
                s[0] = "user id"
                s[1] = "name"
                s[2] = "depart"
                r2.Write(s)
                r2.Flush()
        }
        fmt.Println(buf)
        fout,err := os.Create(fileName)
        defer fout.Close()
        if err != nil {
                fmt.Println(fileName,err)
                return
    }
    fout.WriteString(buf.String())
}

二、读csv文件

函数:

func NewReader(r io.Reader) *Reader

func (r *Reader) Read() (record []string, err os.Error)

func (r *Reader) ReadAll() (records [][]string, err os.Error)

具体见官网:http://golang.org/pkg/csv/#Reader.Read

 

1、首先要解决的是读取文件的所有内容并存成字符串,这里用的是ioutil模块,具体代码如下:

package main

import (
        "io/ioutil"
        "fmt"
)

func main(){
        b,err := ioutil.ReadFile("1.csv")
        if err != nil {
                panic(err.String())
        }
        //fmt.Println(b)
        fmt.Printf("%s",string(b))
}

2、读取csv文件内容:

package main

import (
        "fmt"
        "csv"
        "strings"
        "io/ioutil"
)

func main(){
        //fileName := "1.csv"
        fmt.Printf("Input file name : ")
        var fileName string
        fmt.Scanf("%s",&fileName)
        cntb,err := ioutil.ReadFile(fileName)
        if err != nil {
                panic(err.String())
        }
        r2 := csv.NewReader(strings.NewReader(string(cntb)))
        ss,_ := r2.ReadAll()
        //fmt.Println(ss)
        sz := len(ss)
        for i:=0;i<sz;i++{
                fmt.Println(ss[i])
        }
}
好,就这些了,希望对你有帮助
posted on 2012-02-19 22:43  Mike_Zhang  阅读(12940)  评论(0)    收藏  举报
(评论功能已被禁用)
编辑推荐:
· 糊涂啊!这个需求居然没想到用时间轮来解决。
· 浅谈为什么我讨厌分布式事务
· 在 .NET 中使用内存映射文件构建高性能的进程间通信队列
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
阅读排行:
· 15天流量破10万,免费拼图工具的毕业典礼是被抄袭
· 从硬盘爆满到 GitHub 封号,一位前端开发者的开源历险记
· .NET 使用 DocNET 库快速高效的操作 PDF 文档
· 微软又一自动化开源王炸,Selenium 慌了!
· 分享一个 ProHub 风格 logo 生成器
< 2012年2月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示