Documentation
¶
Index ¶
- Variables
- func Atoi(s string) int
- func Atoi64(s string) int64
- func Atou(s string) uint64
- func ConvertCsvLineToValue(valueType reflect.Type, row []string, columnNames []string, option *CsvOption) reflect.Value
- func ConvertStringToFieldValue(object, fieldVal reflect.Value, columnName, fieldString string, ...)
- func ConvertStringToRealType(typ reflect.Type, s string) any
- func ParseNestStringSlice(cellString string, option *CsvOption, nestFieldNames ...string) [][]*StringPair
- func ReadCsvFile(file string) ([][]string, error)
- func ReadCsvFileMap[M ~map[K]V, K IntOrString, V any](file string, m M, option *CsvOption) error
- func ReadCsvFileObject[V any](file string, v V, option *CsvOption) error
- func ReadCsvFileSlice[Slice ~[]V, V any](file string, s Slice, option *CsvOption) (Slice, error)
- func ReadCsvFromDataMap[M ~map[K]V, K IntOrString, V any](rows [][]string, m M, option *CsvOption) error
- func ReadCsvFromDataObject[V any](rows [][]string, v V, option *CsvOption) error
- func ReadCsvFromDataSlice[Slice ~[]V, V any](rows [][]string, s Slice, option *CsvOption) (Slice, error)
- type CsvOption
- func (co *CsvOption) GetConverterByColumnName(columnName string) FieldConverter
- func (co *CsvOption) GetConverterByType(typ reflect.Type) FieldConverter
- func (co *CsvOption) GetConverterByTypePtrOrStruct(typ reflect.Type) (converter FieldConverter, convertToElem bool)
- func (co *CsvOption) RegisterConverterByColumnName(columnName string, converter FieldConverter) *CsvOption
- func (co *CsvOption) RegisterConverterByType(typ reflect.Type, converter FieldConverter) *CsvOption
- type FieldConverter
- type IntOrString
- type StringPair
Constants ¶
This section is empty.
Variables ¶
var DefaultOption = CsvOption{
ColumnNameRowIndex: 0,
DataBeginRowIndex: 1,
SliceSeparator: ";",
KvSeparator: "_",
PairSeparator: "#",
}
默认csv设置
Functions ¶
func ConvertCsvLineToValue ¶
func ConvertStringToFieldValue ¶
func ConvertStringToFieldValue(object, fieldVal reflect.Value, columnName, fieldString string, option *CsvOption, isSubStruct bool)
字段赋值,根据字段的类型,把字符串转换成对应的值
func ConvertStringToRealType ¶
支持int,float,string,[]byte,complex,bool
func ParseNestStringSlice ¶
func ParseNestStringSlice(cellString string, option *CsvOption, nestFieldNames ...string) [][]*StringPair
Name_a#Items_{CfgId_1#Num_1;CfgId_2#Num_1};Name_b#Items_{CfgId_1#Num_2;CfgId_2#Num_2}
func ReadCsvFile ¶
func ReadCsvFileMap ¶
func ReadCsvFileMap[M ~map[K]V, K IntOrString, V any](file string, m M, option *CsvOption) error
csv数据转换成map V支持proto.Message和普通struct结构
func ReadCsvFileObject ¶
key-value格式的csv数据给对象赋值 V支持proto.Message和普通struct结构
func ReadCsvFileSlice ¶
csv数据转换成slice V支持proto.Message和普通struct结构
func ReadCsvFromDataMap ¶
func ReadCsvFromDataMap[M ~map[K]V, K IntOrString, V any](rows [][]string, m M, option *CsvOption) error
csv数据转换成map V支持proto.Message和普通struct结构
func ReadCsvFromDataObject ¶
key-value格式的csv数据转换成对象 V支持proto.Message和普通struct结构
Types ¶
type CsvOption ¶
type CsvOption struct { // 数据行索引(>=1) DataBeginRowIndex int // 字段名数据行索引(>=0) ColumnNameRowIndex int // key-value格式的csv数据给对象赋值,数据行索引(>=0) ObjectDataBeginRowIndex int // 是否禁用protobuf的字段别名(struct tag里的name),默认不禁用 // proto2示例 Num *int32 `protobuf:"varint,1,opt,name=num"` // proto3示例 Num int32 `protobuf:"varint,1,opt,name=num,proto3"` DisableProtobufAliasName bool // 是否禁用json的字段别名(struct tag里的name),默认不禁用 // 示例 Num *int32 `json:"num,omitempty"` DisableJsonAliasName bool // 数组分隔符 // 如数组分隔符为;时,则1;2;3可以表示[1,2,3]的数组 SliceSeparator string // Key-Value分隔符 // 如KvSeparator为_ PairSeparator为# // 则a_1#b_2#c_3可以表示{"a":1,"b":2,"c":3}的map或者如下结构体 // type S struct { // a string // b string // c int // } KvSeparator string // 不同Key-Value之间的分隔符 // 如KvSeparator为_ PairSeparator为# // 则a_1#b_2#c_3可以表示{"a":1,"b":2,"c":3}的map或者如下结构体 // type S struct { // a string // b string // c int // } PairSeparator string // contains filtered or unexported fields }
func (*CsvOption) GetConverterByColumnName ¶
func (co *CsvOption) GetConverterByColumnName(columnName string) FieldConverter
func (*CsvOption) GetConverterByType ¶
func (co *CsvOption) GetConverterByType(typ reflect.Type) FieldConverter
func (*CsvOption) GetConverterByTypePtrOrStruct ¶
func (co *CsvOption) GetConverterByTypePtrOrStruct(typ reflect.Type) (converter FieldConverter, convertToElem bool)
如果typ是Struct,但是注册的FieldConverter是同类型的Ptr,则会返回Ptr类型的FieldConverter,同时convertToElem返回true
func (*CsvOption) RegisterConverterByColumnName ¶
func (co *CsvOption) RegisterConverterByColumnName(columnName string, converter FieldConverter) *CsvOption
注册列名对应的转换接口
func (*CsvOption) RegisterConverterByType ¶
func (co *CsvOption) RegisterConverterByType(typ reflect.Type, converter FieldConverter) *CsvOption
注册类型对应的转换接口
type IntOrString ¶
type StringPair ¶
func ParseNestString ¶
func ParseNestString(cellString string, option *CsvOption, nestFieldNames ...string) []*StringPair
解析有嵌套结构的字符串 如 CfgId_1#ConsumeItems_{CfgId_1#Num_2;CfgId_2#Num_3}#Rewards_{CfgId_1#Num_1}#CountLimit_2 解析成 [{CfgId,1},{ConsumeItems,CfgId_1#Num_2;CfgId_2#Num_3},{Rewards,CfgId_1#Num_1},{CountLimit,2}]
func ParsePairString ¶
func ParsePairString(cellString string, option *CsvOption) []*StringPair
把K1_V1#K2_V2#K3_V3转换成StringPair数组(如[{K1,V1},{K2,V2},{K3,V3}]