Keys aus .ini lesen uns Array zurückgeben

  • Hallo Leute,

    ich will von einer test.ini, die so aussieht (auch im Anhang als Download enthalten):

    test.ini
    Code
    [testini]
    anfang1=testanfang1
    mitte1=testmitte1
    ende1=testende1
    anfang2=testanfang2
    mitte2=testmitte2
    ende2=testende2
    anfang3=testanfang3
    mitte3=testmitte3
    ende3=testende3

    anfang1, anfang2 und anfang3 auslesen. Dannach will ich die anfang's die gefunden wurden in einen 1-Dimensionalen Array ausgeben. Weiß jemand wie soetwas funktioniert?

    Mit freundlichen Grüßen,
    BurakSZ

    P.S. Die UDF wird bald released :)

  • Hm so in etwa ? ;)

    Spoiler anzeigen
    [autoit]

    #include "array.au3"
    $sIni = @ScriptDir & "\test.ini"
    $sSection = "testini"
    $sArray = ""
    $sSuche = "Anfang" ;Suchwort
    $aReturn = IniReadSection($sIni, $sSection)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aReturn) - 1
    $sReturn = IniRead($sIni, $sSection, $aReturn[$i][0], "")
    If StringInStr($sReturn,$sSuche) <> 0 Then $sArray &= $sReturn & "|"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = StringSplit($sArray,"|")
    _ArrayDisplay($aArray)

    [/autoit]

    21 is only half the truth.

  • Wobei man dann darüber nachdenken sollte ob man die .ini nicht anders aufbaut.

    z.B.


    oder:

    Code
    [Anfang]
    anfang1=testanfang1
    anfang2=testanfang2
    anfang3=testanfang3
    [Mitte]
    mitte1=testmitte1
    mitte2=testmitte2
    mitte3=testmitte3
    ;usw.
  • Wobei man dann darüber nachdenken sollte ob man die .ini nicht anders aufbaut.

    z.B.


    oder:

    Code
    [Anfang]
    anfang1=testanfang1
    anfang2=testanfang2
    anfang3=testanfang3
    [Mitte]
    mitte1=testmitte1
    mitte2=testmitte2
    mitte3=testmitte3
    ;usw.

    Das Problem ist das ich die .ini nicht selber mache sondern von einer Playlist auslese. Die Playlist ist so aufgebaut, wie ich die test.ini beschrieben habe...

    Mahagon gleich mal austesten

    MfG

  • Funktioniert jetzt, aber hab noch eine Frage, ich zitier einfach mal von der Shoutbox:

    Zitat von BurakSZ in Shoutbox

    schon klar das das erste array element irgendwas ist, aber wieso ist das letzte element ein leerer string?

    MfG

  • Spoiler anzeigen
    [autoit]

    #include "array.au3"
    $sIni = @ScriptDir & "\test.ini"
    $sSection = "testini"
    $sArray = ""
    $sSuche = "Anfang" ;Suchwort
    $aReturn = IniReadSection($sIni, $sSection)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aReturn) - 1
    $sReturn = IniRead($sIni, $sSection, $aReturn[$i][0], "")
    If StringInStr($sReturn,$sSuche) <> 0 Then $sArray &= $sReturn & "|" ;setzt immer ein | am Ende des Strings
    Next
    $sArray = StringTrimRight($sArray,1) ; StringSplit splittet den String beim | und erstellt ein 1D Array (das letzte ist Leer gewesen da | der letzte Char war! StringTrimRight entfernt hier das |
    $aArray = StringSplit($sArray,"|",2) ;flag = 2, deaktiviert die Rückgabe der Anzahl im ersten Element. Dadurch wird das Array 0-basierend.
    _ArrayDisplay($aArray)

    [/autoit]

    21 is only half the truth.

  • Stringsplit schreibt in $array[0] die Anzahl der Items
    Um den Leerstring zu vermeiden musst du den letzten "|" eleminieren.

    [autoit]

    StringSplit(StringTrimLeft($sArray, 1), "|")

    [/autoit]
  • Wenn ich es im folgenden Script versuche:

    Script
    [autoit]

    #include <Array.au3>
    Global $hFile = @ScriptDir & "\test.ini"
    $sSection = "playlist"
    $sArray = ""
    $sSuche = "File"
    $aReturn = IniReadSection($hFile, $sSection)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aReturn) - 1
    $sReturn = IniRead($hFile, $sSection, $aReturn[$i][0], "")
    If StringInStr($sReturn, $sSuche) <> 0 Then $sArray &= $sReturn & "|"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = StringSplit($sArray, "|")
    _ArrayDelete($aArray, 0)
    _ArrayDelete($aArray, UBound($aArray) - 1)
    _ArrayDisplay($aArray)

    [/autoit]
    Neue test.ini

    [playlist]
    NumberOfEntries=4
    File1=http://listen.technobase.fm/tunein-dsl-pls
    Title1=TechnoBase.FM - MP3 128k - High Quality - (DSL/Cable)
    Length1=-1
    File2=http://listen.technobase.fm/tunein-aacplus-pls
    Title2=TechnoBase.FM - AACplus 80k - Very High Quality - (DSL/Cable)
    Length2=-1
    File3=http://listen.technobase.fm/tunein-oggvorbis-pls.ogg
    Title3=TechnoBase.FM - OGG-Vorbis 48k - High Quality - (ISDN)
    Length3=-1
    File4=http://listen.technobase.fm/tunein-aacisdn-pls
    Title4=TechnoBase.FM - AACplus 40k - Low Quality - (ISDN)
    Length4=-1
    Version=2

    dann geht es nicht. Neue test.ini und Script im Anhang!

  • Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $hFile = @ScriptDir & "\test.ini"
    $sSection = "playlist"
    $sArray = ""
    $sSuche = "File"
    $aReturn = IniReadSection($hFile, $sSection)
    _ArrayDisplay($aReturn)
    For $i = 0 To UBound($aReturn) - 1

    [/autoit] [autoit][/autoit] [autoit]

    If StringInStr($aReturn[$i][0], $sSuche)Then $sArray &= "|" &$aReturn[$i][1]
    Next
    ConsoleWrite($sArray & @CRLF)
    $aArray = StringSplit(StringTrimLeft($sArray, 1), "|")

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aArray)

    [/autoit]


    So dann oder?