1
This commit is contained in:
parent
f58f61120a
commit
de0c368e4c
63
csvreader.go
63
csvreader.go
@ -1,63 +0,0 @@
|
||||
package q5
|
||||
|
||||
import "io"
|
||||
import "os"
|
||||
import "bufio"
|
||||
import "strings"
|
||||
|
||||
type CsvReader struct {
|
||||
columns map[string]int32
|
||||
values []string
|
||||
|
||||
currLine int
|
||||
lines []string
|
||||
}
|
||||
|
||||
func (this *CsvReader) Load(fileName string) bool {
|
||||
this.columns = map[string]int32{}
|
||||
this.values = []string{}
|
||||
this.currLine = 0
|
||||
this.lines = []string{}
|
||||
|
||||
f, err := os.Open(fileName)
|
||||
if err == nil {
|
||||
defer f.Close()
|
||||
|
||||
br := bufio.NewReader(f)
|
||||
for {
|
||||
line, _, c := br.ReadLine()
|
||||
if c == io.EOF {
|
||||
break
|
||||
}
|
||||
this.lines = append(this.lines, string(line))
|
||||
}
|
||||
}
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func (this *CsvReader) NextLine() bool {
|
||||
if this.currLine >= len(this.lines) {
|
||||
return false
|
||||
}
|
||||
this.values = strings.Split(this.lines[this.currLine], ",")
|
||||
this.currLine++
|
||||
return true
|
||||
}
|
||||
|
||||
func (this *CsvReader) GetValue(fieldName string) *XValue {
|
||||
index, ok := this.columns[fieldName]
|
||||
if ok {
|
||||
if index >= 0 && index < int32(len(this.values)) {
|
||||
return (&XValue{}).SetString(this.values[index])
|
||||
} else {
|
||||
return &XValue{}
|
||||
}
|
||||
} else {
|
||||
return &XValue{}
|
||||
}
|
||||
}
|
||||
|
||||
func (this *CsvReader) KeyExists(fieldName string) bool {
|
||||
_, ok := this.columns[fieldName]
|
||||
return ok
|
||||
}
|
25
mutable_xobject.go
Normal file
25
mutable_xobject.go
Normal file
@ -0,0 +1,25 @@
|
||||
package q5
|
||||
|
||||
type MutableXObject struct {
|
||||
XObject
|
||||
}
|
||||
|
||||
func (this *MutableXObject) PushXValue(val *XValue) *MutableXObject{
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *MutableXObject) PushMutableXObject(val MutableXObject) *MutableXObject{
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *MutableXObject) SetXValue(key string, val *XValue) *MutableXObject{
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *MutableXObject) SetXObject(key string, val *XObject) *MutableXObject{
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *MutableXObject) SetMutableXObject(key string, val *MutableXObject) *MutableXObject{
|
||||
return this
|
||||
}
|
10
strutils.go
10
strutils.go
@ -1,7 +1,9 @@
|
||||
package q5
|
||||
|
||||
import "io"
|
||||
import "crypto/md5"
|
||||
import "encoding/hex"
|
||||
import "hash/crc32"
|
||||
|
||||
func Test()(a string) {
|
||||
return "testb"
|
||||
@ -12,3 +14,11 @@ func Md5Str(data string) string {
|
||||
h.Write([]byte(data))
|
||||
return hex.EncodeToString(h.Sum(nil))
|
||||
}
|
||||
|
||||
func Crc32(data string) uint32 {
|
||||
ieee := crc32.NewIEEE()
|
||||
io.WriteString(ieee, data)
|
||||
|
||||
code := ieee.Sum32()
|
||||
return code
|
||||
}
|
||||
|
18
sysutils.go
18
sysutils.go
@ -1,5 +1,6 @@
|
||||
package q5
|
||||
|
||||
import "net"
|
||||
import "net/http"
|
||||
import "time"
|
||||
|
||||
@ -29,3 +30,20 @@ func Request(r *http.Request, name string) *XValue {
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func GetRequestRemoteAddr(r *http.Request) string {
|
||||
remoteAddr := r.RemoteAddr
|
||||
if ip := r.Header.Get("X-Real-Ip"); ip != "" {
|
||||
remoteAddr = ip
|
||||
} else if ip = r.Header.Get("X-Forwarded-For"); ip != "" {
|
||||
remoteAddr = ip
|
||||
} else {
|
||||
remoteAddr, _, _ = net.SplitHostPort(remoteAddr)
|
||||
}
|
||||
|
||||
if remoteAddr == "::1" {
|
||||
remoteAddr = "127.0.0.1"
|
||||
}
|
||||
|
||||
return remoteAddr
|
||||
}
|
||||
|
55
xobject.go
55
xobject.go
@ -11,6 +11,61 @@ type XObject struct {
|
||||
_val interface{}
|
||||
}
|
||||
|
||||
func (this *XObject) Size(key interface{}) int32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (this *XObject) Reset() {
|
||||
}
|
||||
|
||||
func (this *XObject) GetType() int8{
|
||||
return this._type
|
||||
}
|
||||
|
||||
func (this *XObject) AsXValue() *XValue {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *XObject) At(key interface{}) *XObject {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *XObject) Get(key interface{}) *XValue {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *XObject) HasKey(key interface{}) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ReadFromFile(fileName string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ReadFromJsonFile(fileName string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ReadFromJsonString(data string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ReadFromXmlFile(fileName string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ReadFromXmlString(data string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ReadFromUrlQueryString(data string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *XObject) ToJsonStr() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (this *XObject) ToUrlEncodeSr() string {
|
||||
return ""
|
||||
}
|
||||
|
109
xvalue.go
109
xvalue.go
@ -5,7 +5,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
XVT_INT = 0
|
||||
XVT_UNDEFINED = 0
|
||||
XVT_INT = iota
|
||||
XVT_FLOAT = iota
|
||||
XVT_STRING = iota
|
||||
XVT_BYTES = iota
|
||||
@ -19,7 +20,45 @@ type XValue struct
|
||||
}
|
||||
|
||||
func (this *XValue) GetType() int8 {
|
||||
return this._type
|
||||
if this._type == XVT_UNDEFINED {
|
||||
return XVT_INT
|
||||
} else {
|
||||
return this._type
|
||||
}
|
||||
}
|
||||
|
||||
func (this *XValue) IsUndefined() bool {
|
||||
return this._type == XVT_UNDEFINED
|
||||
}
|
||||
|
||||
func (this *XValue) SetUInt8(val uint8) *XValue {
|
||||
this.SetInt64(int64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetInt8(val int8) *XValue {
|
||||
this.SetInt64(int64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetUInt16(val uint16) *XValue {
|
||||
this.SetInt64(int64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetInt16(val int16) *XValue {
|
||||
this.SetInt64(int64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetUInt32(val uint32) *XValue {
|
||||
this.SetInt64(int64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetInt32(val int32) *XValue {
|
||||
this.SetInt64(int64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetInt64(val int64) *XValue {
|
||||
@ -29,6 +68,11 @@ func (this *XValue) SetInt64(val int64) *XValue {
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetFloat32(val float32) *XValue {
|
||||
this.SetFloat64(float64(val))
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) SetFloat64(val float64) *XValue {
|
||||
val_copy := val
|
||||
this._type = XVT_FLOAT
|
||||
@ -37,7 +81,7 @@ func (this *XValue) SetFloat64(val float64) *XValue {
|
||||
}
|
||||
|
||||
func (this *XValue) SetString(val string) *XValue {
|
||||
val_copy := "" + val
|
||||
val_copy := val + ""
|
||||
this._type = XVT_STRING
|
||||
this._val = &val_copy
|
||||
return this
|
||||
@ -57,6 +101,26 @@ func (this *XValue) SetUserData(val interface{}) *XValue {
|
||||
return this
|
||||
}
|
||||
|
||||
func (this *XValue) GetUInt8() uint8 {
|
||||
return uint8(this.GetInt64())
|
||||
}
|
||||
|
||||
func (this *XValue) GetInt8() int8 {
|
||||
return int8(this.GetInt64())
|
||||
}
|
||||
|
||||
func (this *XValue) GetUInt16() uint16 {
|
||||
return uint16(this.GetInt64())
|
||||
}
|
||||
|
||||
func (this *XValue) GetInt16() int16 {
|
||||
return int16(this.GetInt64())
|
||||
}
|
||||
|
||||
func (this *XValue) GetUInt32() uint32 {
|
||||
return uint32(this.GetInt64())
|
||||
}
|
||||
|
||||
func (this *XValue) GetInt32() int32 {
|
||||
return int32(this.GetInt64())
|
||||
}
|
||||
@ -84,11 +148,50 @@ func (this *XValue) GetInt64() int64 {
|
||||
}
|
||||
}
|
||||
|
||||
func (this *XValue) GetFloat32() float32 {
|
||||
return float32(this.GetFloat64())
|
||||
}
|
||||
|
||||
func (this *XValue) GetFloat64() float64 {
|
||||
switch this._type {
|
||||
case XVT_INT:
|
||||
return float64(*(this._val.(*int64)))
|
||||
case XVT_FLOAT:
|
||||
return *(this._val.(*float64))
|
||||
case XVT_STRING, XVT_BYTES, XVT_USERDATA:
|
||||
val, err := strconv.ParseFloat(this.GetString(), 64)
|
||||
if err == nil {
|
||||
return val
|
||||
} else {
|
||||
val, err := strconv.ParseInt(this.GetString(), 10, 64)
|
||||
if err == nil {
|
||||
return float64(val)
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
func (this *XValue) GetString() string {
|
||||
switch this._type {
|
||||
case XVT_INT:
|
||||
return strconv.FormatInt(this.GetInt64(), 10)
|
||||
case XVT_FLOAT:
|
||||
return strconv.FormatFloat(this.GetFloat64(), 'E', -1, 64)
|
||||
case XVT_STRING:
|
||||
return *(this._val.(*string))
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func (this *XValue) GetUserData() interface{} {
|
||||
if this._type == XVT_USERDATA {
|
||||
return this._val
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user