#author("2019-04-13T17:35:38+00:00","","")
#author("2019-04-13T17:58:41+00:00","","")
#mynavi(R言語入門)
#setlinebreak(on);

* 目次 [#v004469d]
#contents

* 設定ファイルっぽいものを管理する [#e50cd139]
#html(<div style="padding-left: 10px;">)

Rの練習用に iniファイルを扱うクラスを書いてみた。
※クラスを扱う為、R6を使用。
※forの部分はapply 等でもっと高速化できそう。
#mycode2(){{
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
#mycode2{{
# テスト用の設定1
[setting1]
var1=111
var2=222
var3=333

# テスト用の設定2
[setting2]
var1=xxx
var2=yyy
var3=zzz
}}

利用例)
#myterm2(){{
> setting <- Setting$new("test.ini")
> print(setting$get("setting1.var1"))
[1] "111"
}}

#html(</div>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS