I don't have exactly what you're looking for but this could be a start:

NB.* parseIniFile: return 2-column mat (0: section name; 1: name/value
pairs)
NB. given INI file name.
parseIniFile=: 3 : 0
   inifl=. f2v y.
   whbrkt=. -._1 e.&>,&.>(<'^\[.*\]') rxmatch&.>dlb&.>inifl
   nvp=. elimEmptyRows&.>nvPair&>&.>whbrkt<;._1 inifl
   ((}.@:}:@:dlb@:dtb)&.>whbrkt#inifl),.nvp
NB.EG inifl=. f2v WINDIR,'cdPlayer.ini'
)

NB.* nvPair: Name=Value pair from string of form 'Name=Value'.
nvPair=: 13 : '0 1}.&.>(y.i.''='')({.;}.)y.'

NB.* elimEmptyRows: eliminate rows of boxed mat if all items empty.
elimEmptyRows=: 13 : 'y.#~0+./ . ~:|:#&>y.'

This requires 'regex' and the standard deblanking utilities "dlb" and "dtb",
as
well as these 2 utilities (which I think have standard J-equivalents but I
haven't
looked them up):
f2v=: 3 : 0
NB.* f2v: File to Vector: read file -> vector of lines.
   vec=. l2v 1!:1 <y.
)

l2v=: 3 : 0
NB.* l2v: Lines to Vec: convert lines terminated by LF to vector elements.
   vec=. y.
   if. 0~:#y. do.
       vec=. vec-.CR               NB. Use only single-char for line
delimiter
       vec=. vec,(LF~:{:vec)#LF    NB. Ensure terminal line delimiter
       whq=. ~:/\'"'=vec           NB. Mask interiors of quoted strings
       ptn=. LF=vec                NB. Partition lines but
       ptn=. ptn*.-.whq*.ptn       NB.  exclude quoted end-of-lines
       vec=. ptn <;._2 vec         NB. Make into vector of lines
   end.
   vec
)

So, for example:

   $ii=. parseIniFile WINDIR,'cdPlayer.ini'
42 2
   2{.ii
+--------------+--------------------+
|OptionSettings|+-------+-----+     |
|              ||Animate|False|     |
|              |+-------+-----+     |
|              ||OnTop  |False|     |
|              |+-------+-----+     |
|              ||Float  |False|     |
|              |+-------+-----+     |
|              ||Repeat |False|     |
|              |+-------+-----+     |
+--------------+--------------------+
|742fba5c      |+---------+--------+|
|              ||EntryType|1       ||
|              |+---------+--------+|
|              ||artist   |Artist  ||
|              |+---------+--------+|
|              ||title    |Album   ||
|              |+---------+--------+|
|              ||genre    |        ||
|              |+---------+--------+|
|              ||numtracks|2       ||
|              |+---------+--------+|
|              ||0        |Track 01||
|              |+---------+--------+|
|              ||1        |Track 02||
|              |+---------+--------+|
+--------------+--------------------+

On 4/8/06, Gerald Mylog <[EMAIL PROTECTED]> wrote:
>
> Is there somewhere in the "J code corpus" utilities for reading and
> writing
> INI-files that either comply with the "classical" text file format or with
> the nowadays recommended XML-format?
>
> It's not really important how data is stored as long as it's portable (not
> using the WIN API, the WIN registry or any database)
>
> Simulation from a J session:
>
...
--
Devon McCormick
^me^ at acm.
org is my
preferred e-mail
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to