-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathencoding.go
111 lines (98 loc) · 2.06 KB
/
encoding.go
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package snippets
import (
"encoding/csv"
"encoding/xml"
"io/ioutil"
"os"
)
func parseCSV(name string) (<-chan []string, error) {
file, err := os.Open(name)
if err != nil {
return nil, err
}
reader := csv.NewReader(file)
out := make(chan []string)
go func() {
for {
record, err := reader.Read()
if err != nil {
file.Close()
close(out)
break
}
out <- record
}
}()
return out, nil
}
func writeCsv(name string, rows <-chan []string) error {
fWriter, err := os.Create(name)
if err != nil {
return err
}
defer fWriter.Close()
writer := csv.NewWriter(fWriter)
for row := range rows {
if err := writer.Write(row); err != nil {
return err
}
writer.Flush()
}
return nil
}
func readXML(name string) (interface{}, error) {
// <?xml version="1.0" encoding="UTF-8"?>
// <Person>
// <FullName>Grace R. Emlin</FullName>
// <Email where="home">
// <Addr>[email protected]</Addr>
// </Email>
// <Email where='work'>
// <Addr>[email protected]</Addr>
// </Email>
// <Group>
// <Value>Friends</Value>
// <Value>Squash</Value>
// </Group>
// </Person>
content, err := ioutil.ReadFile(name)
if err != nil {
return nil, err
}
data := struct {
XMLName xml.Name `xml:"Person"`
Name string `xml:"FullName"`
Email []struct {
Where string `xml:"where,attr"`
Addr string
} `xml:"Email"`
Groups []string `xml:"Group>Value"`
}{}
err = xml.Unmarshal(content, &data)
if err != nil {
return nil, err
}
return data, nil
}
func writeXML(name string, data interface{}) error {
fWriter, err := os.Create(name)
if err != nil {
return err
}
defer fWriter.Close()
enc := xml.NewEncoder(fWriter)
enc.Indent(" ", " ")
// type Person struct {
// XMLName xml.Name `xml:"Person"`
// ID int `xml:"id,attr"`
// FirstName string `xml:"Name>First"`
// LastName string `xml:"Name>Last"`
// Age int `xml:"Age"`
// Height float32 `xml:"Height,omitempty"`
// Comment string `xml:",comment"`
// }
if err := enc.Encode(data); err != nil {
return err
}
return nil
}