Here is yet another simplification.  This one uses na.locf from the zoo
package to shorten it further and also make it easier to understand.

Below we have one line to read in the .ini file, one line to transform the
characters [ and ] to = and =, the read.table line parses the result and
the next line carries forward the section names and removes the section
lines. Lines.raw is as before:

library(zoo)

# Lines <- readLines("myfile.ini")
Lines <- readLines(textConnection(Lines.raw))
Lines2 <- chartr("[]", "==", Lines)
DF <- read.table(textConnection(Lines2), as.is = TRUE, sep = "=", fill = TRUE)
subset(transform(DF, V3 = na.locf(ifelse(V1 == "", V2, NA))), V1 != "")


On 6/12/07, Gabor Grothendieck <[EMAIL PROTECTED]> wrote:
> In thinking about this a bit more here is an even shorter solution where
> Lines.raw is as before:
>
> # Lines <- readLines("myfile.ini")
> Lines <- readLines(textConnection(Lines.raw))
> Lines2 <- chartr("[]", "==", Lines)
> DF <- read.table(textConnection(Lines2), as.is = TRUE, sep = "=", fill = TRUE)
> L <- DF$V1 == ""
> subset(transform(DF, V3 = V2[which(L)[cumsum(L)]])[1:3], V1 != "")
>
>
> On 6/12/07, Gabor Grothendieck <[EMAIL PROTECTED]> wrote:
> > Here is some code. It replaces [ and ] with = sign and reads the result
> > into a data frame, DF.  DF2 is similar except the section is now in V3.
> > DF3 is like like DF2 except sections are carried forward and finally
> > we remove the rows which only had sections.
> >
> > Lines.raw <- "[Section1]
> > var1=value1
> > var2=value2
> > [Section2]
> > A=value3
> > B=value4
> > "
> >
> > Lines <- readLines(textConnection(Lines.raw))
> > Lines2 <- chartr("[]", "==", Lines)
> > DF <- read.table(textConnection(Lines2), as.is = TRUE, sep = "=", fill = 
> > TRUE)
> > DF2 <- transform(DF, V3 = ifelse(V1 == "", V2, NA))
> > L <- !is.na(DF2$V3)
> > DF3 <- transform(DF2, V3 = V3[c(NA, which(L))[cumsum(L)+1]])
> > subset(DF3, V1 != "")
> >
> > The result is:
> >
> >    V1     V2       V3
> > 2 var1 value1 Section1
> > 3 var2 value2 Section1
> > 5    A value3 Section2
> > 6    B value4 Section2
> >
> >
> > On 6/12/07, Earl F. Glynn <[EMAIL PROTECTED]> wrote:
> > > I need to process some datasets where the configuration information was
> > > stored in .INI-like files, i.e., text files with sections like this:
> > >
> > > [Section1]
> > > var1=value1
> > > var2=value2
> > > [Section2]
> > > A=value3
> > > B=value4
> > >
> > > ...
> > >
> > > >From Google and other searches I haven't found any package, or function
> > > within a package, that reads .INI files into an R list, or other data
> > > structure.
> > >
> > >
> > >
> > > Any suggestions, or do I need to write my own?
> > >
> > > efg
> > >
> > > Earl F. Glynn
> > > Stowers Institute for Medical Research
> > >
> > > ______________________________________________
> > > R-help@stat.math.ethz.ch mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide 
> > > http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >
> >
>

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to