Mit Key & Value die Section einer .ini herausfinden

  • Hallo,

    da ich nichts vergleichbares gefunden habe, frage ich mal direkt nach.

    Ich möchte ein Programm bauen, jedoch benötige ich noch ein Tel, damit es fertig ist:

    Das Programm muss mit Hilfe der Value und des Keys einer *.ini Datei die Section herrausfinden können.

    Ich bedanke mich schon jetzt für Lösungsvorschläge.

    2 Mal editiert, zuletzt von DarkOwning (13. Juni 2010 um 16:37)

  • Könntest du bitte eine Beispiel-Ini posten?
    Ich würde die ini auf jeden Fall anders formatieren.
    Die Section anhand der Value's und Key's zu ermitteln ist eher unpraktisch.

  • Hallo DarkOwning,

    du kannst ja mit Hilfe von

    [autoit]

    IniReadSections

    [/autoit]

    zuerst alle Sections in einem Treeview darstellen, danach stellst du für jede Section die Keys mit Value dar z.B. Value=Key.

    [autoit]

    IniReadSection

    [/autoit]

    Dadurch kannst du dann mit

    [autoit]

    _GUICtrlTreeView_FindItem

    [/autoit]

    .nach dem Text suchen. Anderer Ansatz benutze ein 3D-Array

    mfg (Auto)Bert

  • Schnitzel:
    Die .ini kann ich nicht anders formatieren, da sie von einem anderen Programm vorgegeben ist

    autoBert:
    Könntest du mir vielleicht ein Beispiel reinstellen, mir ist nicht ganz klar wie du das meinst. Danke :)

    Allgemein ist zu sagen, dass die .ini wirklich verdammt groß ist und ich eigentlich nuir eine kleine Value verändern muss.
    Es sind eigentlich immer Sections, danach "LongName", diese "Longname" muss ich auslesen lassen, ohne die Section zu kennen.

    Einmal editiert, zuletzt von DarkOwning (9. Juni 2010 um 20:32)

  • Hallo DarkOwning,

    hier ein Beispiel um eine INI im TreeView anzeigen zulassen:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    $Debug_TV = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

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

    Global $hGui, $hImage, $hStateImage, $hTreeView, $hbtnInfo, $iItemIndex = -99, $iItemIndexOld = 0, $aSectionNames, $aSection

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

    main()
    Func main()

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

    Local $hItem[10], $hChildItem[99], $iYItem = 0, $sIni = @ScriptDir & "\Test.ini"
    Local $iStyle = BitOR($TVS_TRACKSELECT, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)

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

    GUICreate("TreeView Ini Amzeiger", 400, 350)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    $hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    Global $sSuche = "Standard=100" ;muss natürlich per Einagbefelder erzeugt werden
    $hbtnInfo = GUICtrlCreateButton("&Suchen", 2, 320, 100, 25)
    GUICtrlSetOnEvent(-1, "_Info")
    GUISetState()

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

    $aSectionNames = IniReadSectionNames($sIni)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To $aSectionNames[0]
    $hItem[$x - 1] = _GUICtrlTreeView_Add($hTreeView, 0, $aSectionNames[$x]);, $x-1), 4, 5)
    $aSection = IniReadSection($sIni, $aSectionNames[$x])
    For $y = 1 To $aSection[0][0]
    $hChildItem[$iYItem] = _GUICtrlTreeView_AddChild($hTreeView, $hItem[$x - 1], $aSection[$y][0] & "=" & $aSection[$y][1]);, 0, 3)
    $iYItem += 1
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)

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

    _GUICtrlTreeView_SelectItem($hTreeView, $hItem[0])
    $iItemIndex = 0
    ; Idle-Loop
    While 1
    Sleep(1000)
    WEnd
    EndFunc ;==>main

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Info()
    Local $iItemIndex = _GUICtrlTreeView_FindItem($hTreeView, $sSuche)
    ConsoleWrite($iItemIndex & @CRLF)
    MsgBox(0, "Information Child" & $iItemIndex, _GUICtrlTreeView_GetText($hTreeView, $iItemIndex), 0, $hGui)
    $iItemIndex = _GUICtrlTreeView_GetParentHandle($hTreeView, $iItemIndex)
    ConsoleWrite($iItemIndex & @CRLF)
    MsgBox(0, "Information Parent" & $iItemIndex, _GUICtrlTreeView_GetText($hTreeView, $iItemIndex), 0, $hGui)
    EndFunc ;==>_Info

    [/autoit]

    Die Suche ist bist jetzt noch "fest verdrahtet" auf ein bestimmtes Item. Das musst du natürlich noch mit 2 Input-Conbtrols die du zusammenstringst lösen, aber das ist ja das kleinste Problem. Hier noch die dazugehörige INI (weil "fest verdrahtet"):

    Spoiler anzeigen

    mfg (Auto)Bert

  • nur zum suchen kannste sowas verwenden:

    [autoit]

    $sections=IniReadSectionNames("test.ini")
    For $i = 1 To $sections[0]
    If IniRead("test.ini", $sections[$i], "HIER DER KEY NAME", "") = "HIER DER WERT" Then
    MsgBox(0,"","Die gesuchte section ist: " $sections[$i])
    EndIf
    Next

    [/autoit]