R语言 R6Class 读取Ini文件

本文介绍了一种使用R语言解析Ini配置文件的方法。通过定义IniFile类,实现了Ini文件的读取、解析及数据提取等功能。该方法可以方便地获取Ini文件中不同节(section)的键值对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#--------------------------------------------------------------------------------

IniFile.initialize <-function(filePath){

  connection <- file(filePath)

  Lines  <- readLines(connection)

  close(connection)

  Lines <- chartr("[]", "==", Lines)  # change section headers

  connection <- textConnection(Lines)

  d <- read.table(connection, as.is = TRUE, sep = "=", fill = TRUE)

  close(connection)

  L <- d$V1 == ""                    # location of section breaks

  d <- subset(transform(d, V3 = V2[which(L)[cumsum(L)]])[1:3], V1 != "")

  ToParse  <- paste("INI.list$", d$V3, "$",  d$V1, " <- '", d$V2, "'", sep="")

  INI.list <- list()

  eval(parse(text=ToParse))

  #return(INI.list)

  self$IniList <- INI.list

}

#--------------------------------------------------------------------------------

# R6

iniFile <- function(filePath){

  IniFile$new(filePath)

}

#--------------------------------------------------------------------------------

IniFile <- R6::R6Class("IniFile",

    public = list(

                #属性

                IniList=NA,  # 内容

                initialize = IniFile.initialize, #初始化

                member = function(){              # member的方法

                  print(self)

                  print(private)

                  print(ls(envir=private))

                }

              )# end public

)#end class

#--------------------------------------------------------------------------------

#[section] key = value

IniFile$set("public", "readIni", function(section,key=NULL){

  if (!is.null (section))

    sectionList <-  self$IniList[section]

  if(is.null(key)){

    ToParse  <- paste("sectionList$", section)

  }else{

    ToParse  <- paste("sectionList$", section, "$",  key)

  }

  Temp <- eval(parse(text=ToParse))

  return(as.list(Temp))

}) # end read.ini

#========================================

调用过程:

1. int <- iniFile('data/Sample.ini')

2.1  temp <- int$readIni(section = 'Files',key = 'name0')

2.2  temp <- int$readIni(section = 'Files') 

3. class(temp)   

      [1] "list"

#======================================

Sample.ini 

[SystemSetup]

OlfactometerCode=3

[Files]

prelog0=Part0.txt

date0=2:06:27.461 PM 6/9/2007

note0=group1-1

name0=group1

prelog1=Part1.txt

date1=2:09:16.809 PM 6/9/2007

note1=group1-1

name1=group1-1

[DefaultLevels]

FC00=50

FC01=100

FC02=50

FC10=50

[OdorNames]

port0=None

port1=None

[Map]

port0=0,0,0,0,0,0,0,0,0,0,0,0

port1=0,0,0,0,0,0,0,0,0,0,0,0

port2=0,0,0,0,0,0,0,0,0,0,0,0


转载于:https://my.oschina.net/wheatma/blog/537600

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值