There might be a simpler way:

    put url "file:inifile.txt" into tFile
    filter tFile with "*=*"

Now tFile contains only those lines that contain "=", i.e. the value
lines. If you only want the values without the names, add this:

    set the itemDelimiter to "="
    put empty into tValueList
    repeat for each line tLine in tFile
      put item 2 of tLine & cr after tValueList
    end repeat
    delete last char of tValueList

Now tValueList contains all the values.

If you need to associate the values with their categories, that'll cost
you extra :)
Phil Davis



Dave Cragg wrote:
> 
> At 10:46 AM -0700 2/11/1999, Leston Drake wrote:
> 
> >I have a data file (text) that is formatted in a standard Windows INI format.
> >
> >[Section 1 Header]
> >Item1=<Value>
> >Item2=<Value>
> >Item3=<Value>
> >
> >[Section 2 Header]
> >Item1=<Value>
> >Item2=<Value>
> >Item3=<Value>
> >
> >etc...
> >
> >I am reading the contents of this file into a container, and I want
> >to parse it to pull out the Values. So I need to *search* to a
> >section header, then seach (from that point) for the "Item1=" line
> >below it (for example), then finally, pull out the value.
> >I am looking for some direction for someone about what MC commands,
> >functions, etc are best suited for this task.
> 
> Hi Leston
> 
> Here are a couple of functions I use to do this. The first one pulls
> all data from a section. The second one gets a single key value. As
> the second one calls the first one, you'll need both. I haven't
> looked at them for a while (but I use them all the time), so I can't
> remember why I wrote them as I did. (So much for promises to myself
> to document everything!)
> 
> Some notes
> Only the section name inside square brackets should be on the section
> title line. No other text,including spaces, is allowed. The square
> brackets shouldn't be passed in the pGroup parameter:
> 
> get iniGroup("OPTIONS", myData) -- NOT -- get iniGroup("[OPTIONS]", myData)
> 
> lines beginning with ";" are not returned by iniGroup
> 
> The local declarations were necessary I think to make "matchText"
> work properly.
> 
> The functions return "no_group" and "no_key" respectively if the
> search fails. Be sure to check for that when calling the functions.
> They should probably return empty instead, but I may have had a
> reason at the time.
> 
> -------------------------------------
> function iniGroup pGroup,pData
>    local tMatched, tMatchedx
>    put cr before pdata
>    put cr after pdata
>    if matchText(pData,cr & "\[" & pGroup & "\]" & cr & "(.*)",tMatched) then
>      get matchText(tMatched, "(" & cr & "\[)", tMatchedx)
>      get offset(tmatchedx, tMatched)
>      if it > 0 then
>        delete char it to -1 of tMatched
>      end if
>      put 1 into tCount
>      repeat for each line tLine in tMatched
>        if char 1 of tLine <> ";" and tLine <> empty then
>          put tLine into line tCount of tResult
>          add 1 to tCount
>        end if
>      end repeat
>      return tResult
>    else
>      return "no_group"
>    end if
> end iniGroup
> --------------------------------
> function iniKey pKey,pGroup,pData
>    local tResult
>    if pGroup is not empty then
>      put iniGroup(pGroup,pData) into tGroup
>    else
>      put pData into tGroup
>    end if
>    if tGroup is not "no_group" then
>      put cr before tGroup
>      if  matchText(tGroup,cr & pKey & "=" & "([^" & cr & "]*)", tResult) then
>        return tResult
>      else
>        return "no_key"
>      end if
>    else
>      return "no_key"
>    end if
> end iniKey
> -----------------------------------
> 
> Cheers
> Dave Cragg

-- 
Phil Davis
------------------
[EMAIL PROTECTED]

Reply via email to