Rの練習用に iniファイルを扱うクラスを書いてみた。
※クラスを扱う為、R6を使用。
※forの部分はapply 等でもっと高速化できそう。
library(R6) Setting <- R6::R6Class( "Setting", public = list( initialize = function(file) { private$data <- private$load(file) }, get = function(key){ invisible(private$data[1,key]) } ), private = list( data = data.frame(), load = function(file) { data <- readLines(file) data <- data[grep("^[^#]", data)] # コメント行の除去 data <- data[data != ""] # 空行の除去 df <- data.frame() group <- "" for (line in data) { if (length(grep("^\\[.+\\]$", line)) > 0) { group <- gsub("^\\[(.+)\\]$", "\\1", line) } keyVal <- unlist(strsplit(line, "=")) if (length(keyVal)>1) { key <- paste(group, ".", keyVal[1], sep="") df[1,key] <- keyVal[2] } } invisible(df) } ) )
test.ini
# テスト用の設定1 [setting1] var1=111 var2=222 var3=333 # テスト用の設定2 [setting2] var1=xxx var2=yyy var3=zzz
利用例)
> setting <- Setting$new("test.ini") > print(setting$get("setting1.var1")) [1] "111"