-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.go
64 lines (40 loc) · 1.19 KB
/
parser.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
package txt2sql
import (
"strings"
)
type Parser struct {
delimiter string
stringQualifier string
}
const (
TYPE_VARCHAR = iota
TYPE_NUMBER
)
type Field struct {
value string
valueType int
}
func NewParser(pDelimiter string, pStringQualifier string) *Parser {
return &Parser { delimiter: pDelimiter, stringQualifier:pStringQualifier }
}
func (self *Parser) ParseLine(pLine string) ([]Field, error) {
vLineSplitted:=strings.Split(pLine,self.delimiter)
var vRis = make([]Field,len(vLineSplitted))
for vCnt,vCurField := range vLineSplitted {
if self.stringQualifier!="" && strings.HasPrefix(vCurField,self.stringQualifier) {
vCurField=vCurField[len( self.stringQualifier):]
}
if self.stringQualifier!="" && strings.HasSuffix(vCurField,self.stringQualifier) {
vCurField=vCurField[0:len(vCurField)-len(self.stringQualifier)]
}
vRis[vCnt] = Field { value: vCurField , valueType:TYPE_VARCHAR }
}
return vRis,nil
}
func FieldsToStringArray(pFields []Field) []string {
vRis := make([]string, len(pFields))
for vCnt,vCurField := range pFields {
vRis[vCnt] = vCurField.value
}
return vRis
}