D7WS HOMEPAGE WORKSHOP NEUE XTRAS GALERIE WORKSHOP Automatic Translation LESERSERVICE BUCH NEWS

Ini-Dateien in Propertylisten konvertieren

 

 

 

Home
Workshop-Seite

Da es sich bei den unter Windows zur Speicherung aller möglichen Voreinstellungen verwendeten Ini-Dateien um reinen ASCII-Text handelt, ist es problemlos möglich, mit Hilfe des im Lieferumfang von Director enthaltenen Xtras FileIO darauf zuzugreifen.

Die Struktur der Dateien (hier ein Ausschnitt aus der Datei Win.ini) ist immer gleich...

... und legt eine Konvertierung des Inhalts in eine Propertylist nahe. Denn die Abfrage ganzer Sektionen oder einzelner Einträge gestaltet sich nach erfolgter Konvertierung dann ausgesprochen einfach, wie die Ermittlung der Systemsprache im folgenden Beispiel illustriert:

Die Prozedur readini() wird in einem beliebigen Filmskript gespeichert und akzeptiert als optionalen Parameter beim Aufruf den Namen der (im Windows-Verzeichnis) zu lesenden Ini-Datei. Sofern keine Datei angegeben wird, liest die Prozedur die Datei Win.ini und liefert als Ergebnis die entsprechende Propertyliste zurück.




 

 

 

 

Das Script


on readini whatfile
  -- parse ini file 'whatfile' and create a nested property list
  -- default to file 'win.ini'
  if voidp(whatfile) then whatfile = "win.ini"
    -- get file's content
  inistring = readfile(getOSdirectory() & "\" & whatfile)
  if voidp(inistring) then exit
    -- remove leading '0A' characters
    inistring = strip0Achar(inistring)
    -- set up empty property list
    wpl = [:]
    numlines = inistring.line.count
    -- line counter
    m = 0
    repeat while TRUE
      -- increment line counter
      m = m + 1
      if m > numlines then
        -- end of file
        exit repeat
      end if
      -- get actual line
      actuallineVal = (inistring.line[m])
      -- scan for [section] line
      if actuallineVal contains "[" = TRUE then
      -- delete '[' and ']' chars
      delete actuallineVal.char[1]
      delete the last char of actuallineVal
      newprop = symbol(actuallineVal)
      -- set up empty property list for section's content
      tmpl = [:]
      repeat while TRUE
        -- increment line counter
        m = m + 1
        if m > numlines then
          exit repeat
        end if
        actuallineVal = (inistring.line[m])
        -- search for '=' char in 'property=value' lines
        equalpos = offset("=", actuallineVal)
        if equalpos = 0 then
          exit repeat
        else
          -- add property and value to section list
          pr = symbol(actuallineVal.char[1..equalpos - 1])
          vl = actuallineVal.char[equalpos + 1..length(actuallineVal)]
          addprop(tmpl, pr, vl)
        end if
      end repeat
      -- add section and it's section list to main list
      addprop(wpl, newprop, tmpl)
    end if
  end repeat
  return wpl
end

on readfile fname
  -- get file fname's content using FileIO
  fObj = new (xtra "FileIO")
  if objectp (fObj) then
    openFile(fObj,fname,1)
    thefile = readFile(fObj)
    closeFile(fObj)
    fObj = 0
  end if
  return thefile
end

on strip0Achar str
  -- remove all '0A' characters in char position 1
  repeat with m = 1 to the number of lines of str
    if chartonum(str.line[m].char[1]) = 10 then delete ¬
       str.line[m].char[1]
  end repeat
  return str
end

Gerd Gillmaier

 




 


Directorworkshop.de ist © Joachim Gola & Gerd Gillmaier 1998-2002. Alle Rechte vorbehalten.