)//ini配置檔案解析器
//mysqlconfig mysql配置結構體type mysqlconfig struct
//redisconfig redis配置結構體type redisconfig struct
//configtype config struct
func
loadini
(filename string
, data inte***ce
)(err error
)傳進來的data引數必須是結構體型別(配置檔案不止乙個字段) if t.elem().kind() != reflect.struct
讀檔案得到位元組型別資料 b, err := ioutil.readfile(filename) if err != nil //string(b) //將位元組陣列轉換成字串 lineslice := strings.split(string(b), "\r\n") "%#v\n", lineslice) var structname string 一行一行讀資料 for idx, line := range lineslice 如果是注釋就跳過 if strings.hasprefix(line, ";") || strings.hasprefix(line, "#") 如果是就表示是節(section) if strings.hasprefix(line, "[") // [...]若...為空也不行 //中間內容 strings.trimspace(line[1:len(line)-1]) sectionname := strings.trimspace(line[1 : len(line)-1]) if len(sectionname) == 0 //根據字串sectionname的內容去結構體中找data裡面根據反射找對應的結構體
for i :=
0; i < t.
elem()
.numfield()
; i++
} } else index := strings.index(line, "=") key := strings.trimspace(line[:index]) value := strings.trimspace(line[index+1:]) //根據structname去data裡面把對應的巢狀結構體給取出來 v := reflect.valueof(data) svalue := v.elem().fieldbyname(structname) //拿到巢狀結構體的值資訊 stype := svalue.type() //拿到巢狀結構體的型別資訊 if stype.kind() != reflect.struct var fieldname string var filetype reflect.structfield //遍歷巢狀結構體的每乙個字段 判斷tag是不是等於key for i := 0; i < svalue.numfield(); i++ } //如果key=tag 給這個字段賦值 //根據fieldname去取出這個字段 if len(fieldname) == 0 fileobj := svalue.fieldbyname(fieldname) //對其賦值 fmt.println(fieldname, filetype.type.kind()) switch filetype.type.kind() fileobj.setint(valueint) case reflect.bool: var valuebool bool valuebool, err = strconv.parsebool(value) if err != nil fileobj.setbool(valuebool) }}}
return
}func
main()
fmt.
println
(cfg)
}
INI配置檔案格式解析
ini配置檔案有三要素parameters,sections和comments。1.parameters 指一條配置,就像key value這樣的。2.sections sections是parameters的集合,sections必須獨佔一行並且用括起來。sections沒有明顯的結束方式,乙個s...
ini形式配置檔案解析庫 iniparser
官方 github 1.編譯生成動態鏈結庫 a.解壓 tar zxvf iniparser 3.1.tar.gz cd tar zxvf iniparserb.編譯 make拷貝src下的標頭檔案dictionary.h和iniparser.h以及壓縮包目錄下的靜態庫libiniparser.a和動...
讀寫配置檔案 ini
配置檔案中經常用到ini檔案,在vc中其函式分別為 其中個引數的意思 lpctstr lpstring 是鍵值,也就是變數的值,必須為lpctstr或cstring型別 lpctstr lpfilename 完整的ini檔案路徑名 lpctstr lpdefaut 如果沒有其前兩個引數值,則將此值賦...