Ini. Datei auslesen funktioniert nicht

  • Hallo,

    da mir niemand erklären wollte, wie ich eine Ini Datei auslese, habe ich bisschen im Internet nach so einem Ini. Kramm geguckt und versucht, dass 2 Ini Dateien von mir ausgelesen werden.

    Hier erstmal der Script, den ich von Simon bekommen habe ( verbessert von Simon ) :

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>

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

    $hGUI = GUICreate("", 620, 657, -1, -1, $WS_POPUP)
    $hEdit = GUICtrlCreateEdit("", 0, 0, 633, 529)
    $hInput = GUICtrlCreateInput("", 0, 560, 513, 21)
    $hBtnSenden = GUICtrlCreateButton("Senden", 528, 560, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    $hBtnBeenden = GUICtrlCreateButton("Beenden", 528, 608, 75, 25, $WS_GROUP)
    $hPic = GUICtrlCreatePic("C:\Users\Dennis\Pictures\Tool Background.jpg", 0, 520, 636, 360, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    Dim $aFragen[2][4] = [["Guten Tag", "Moin", "Hallo"],["geht", "gehts", "stehts", "alles klar"]]
    Dim $aAntworten[2][4] = [["Guten Tag, mein Name ist White, wie kann ich ihnen helfen?", "Guten Tag."],["Gut und dir?", "Gut soweit. Und ihnen?", "Das geht dich nichts an!"]]

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $hBtnBeenden
    Exit
    Case $hBtnSenden
    $sText = GUICtrlRead($hInput)
    _say($hEdit, $sText, @UserName)
    $iFragenID = _FrageAnalysieren($sText, $aFragen)
    If @error Then
    If @error = 1 Then
    _say($hEdit, "Du musst schon etwas fragen!", "Computer")
    ElseIf @error = 2 Then
    _say($hEdit, "Das weiß ich leider nicht", "Computer")
    EndIf
    Else
    _say($hEdit, _SucheAntwort($iFragenID), "Computer")
    EndIf

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

    EndSwitch
    WEnd

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

    Func _SucheAntwort($iFragenID)
    ;Copyright by Simon 2011
    ;Returns an answer for the QuesttionID ($iFragenID)

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

    While 1
    $iRnd = Random(0, UBound($aAntworten, 2) - 1, 1)
    If $aAntworten[$iFragenID][$iRnd] <> "" Then ExitLoop
    WEnd

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

    Return $aAntworten[$iFragenID][$iRnd]
    EndFunc ;==>_SucheAntwort

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

    Func _Say($hEdit, $sText, $sPerson)
    ;Copyright by Simon 2011
    ;Appends the Text and the Persion in the Edit-Controll

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

    $hWnd = GUICtrlGetHandle($hEdit)

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

    Local $iLength = _GUICtrlEdit_GetTextLen($hWnd)
    _GUICtrlEdit_SetSel($hWnd, $iLength, $iLength)
    _SendMessage($hWnd, $EM_REPLACESEL, True, $sPerson & ": " & $sText & @CRLF, 0, "wparam", "wstr")
    EndFunc ;==>_Say

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

    Func _FrageAnalysieren($sText, $aFragen)
    ;Copyright by Simon 2011
    ;Searches wether $aFragen contains $sText
    ;Return Values:
    ; Succes: The ID for the Question
    ; $sText is empty: -1 and sets @Error to 1
    ; $nothing found: -1 and sets @Error to 1

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

    Local $i, $i1

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

    If $sText <> "" Then
    For $i = 0 To UBound($aFragen) - 1
    For $i1 = 0 To UBound($aFragen, 2) - 1
    If StringInStr($sText, $aFragen[$i][$i1], 2) Then
    Return $i
    EndIf
    Next
    Next
    Else
    Return SetError(1, 0, -1)
    EndIf
    Return SetError(2, 0, -1)
    EndFunc ;==>_FrageAnalysieren

    [/autoit]

    Dann im Anhang sind die beiden Ini Dateien , die ausgelesen werden sollen und der Ini Versuchscript von mir ist auch dabei.

    Könntet ihr mir bitte verraten, was daran falsch ist und mir so erklären, dass ich es vertehe und es dann funktioniert?

    Er soll eigentlich immer eine Zeile davon auslesen.

  • Hallo White, mach doch einfach das was autoBert dir geschrieben hat. Schau in die deutsche Hilfe, da steht wirklich alles wunderschön beschrieben :)

    Simon

  • Du solltest dir auch einmal zu gemüt führen, wie man mit & und " " in einem String mit Befehlen oder Variablen arbeitet.

    Deine Deklation der Arrays am Anfang war sehr Fehlerbehaftet. So sollte es richtig sein:

    [autoit]

    Dim $aAntworten[4][4] = [["Die Valvue vom "& Iniread("data.ini") & "ist" & Iniread("Valvue.ini")&".", "Mal auf die Liste schauen ... die Valvue ist "& Iniread("Valvue.ini")&".","Valvue vom "& Iniread("data.ini")&" :"&Iniread("Valvue.ini")]

    [/autoit]

    Und denoch kann es nicht gehen, da der Befehl Iniread mehr als nur eine Angabe brauch. Schau dir zu dem Befehl die Hilfe an und du wirst es herrausfinden.
    Es gibt auch noch andere Befehle für das lesen eine Ini die dir unterschiedliche Werte zurück geben. Siehe Hilfe.

    Und beim besten willen. Ich weiß nicht wie dir Simons Skript dabei helfen sollte eine Ini auszulesen. Da ist nix drin mit Ini auslesen. ;)

  • Weil du's bist:

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <Array.au3>

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

    $hGUI = GUICreate("", 620, 657, -1, -1, $WS_POPUP)
    $hEdit = GUICtrlCreateEdit("", 0, 0, 633, 529)
    $hInput = GUICtrlCreateInput("", 0, 560, 513, 21)
    $hBtnSenden = GUICtrlCreateButton("Senden", 528, 560, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    $hBtnBeenden = GUICtrlCreateButton("Beenden", 528, 608, 75, 25, $WS_GROUP)
    $hPic = GUICtrlCreatePic("C:\Users\Dennis\Pictures\Tool Background.jpg", 0, 520, 636, 360, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    $aFragen = _FileReadTo2dArray("Fragen.txt", "|")
    _ArrayDisplay ($aFragen)
    $aAntworten = _FileReadTo2dArray("Antworten.txt", "|")
    _ArrayDisplay ($aAntworten)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $hBtnBeenden
    Exit
    Case $hBtnSenden
    $sText = GUICtrlRead($hInput)
    _say($hEdit, $sText, @UserName)
    Sleep(300)
    $iFragenID = _FrageAnalysieren($sText, $aFragen)
    If @error Then
    If @error = 1 Then
    _say($hEdit, "Du musst schon etwas fragen!", "Tante Emma")
    ElseIf @error = 2 Then
    _say($hEdit, "Das weiß ich leider nicht", "Tante Emma")
    EndIf
    Else
    _say($hEdit, _SucheAntwort($iFragenID), "Tante Emma")
    EndIf

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

    EndSwitch
    WEnd

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

    Func _FileReadTo2dArray($sFilePath, $sDelimeter)
    ;Copyright by Simon 2011
    ;Reads a FIle into a 2D Array

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

    Dim $aArray[1][1]
    Local $i = 1
    While 1
    $sRead = FileReadLine($sFilePath, $i)
    If @error Then ExitLoop
    $aSplit = StringSplit($sRead, "|", 2)
    If $i = 1 Then
    $iReDimAdd = 0
    Else
    $iReDimAdd = 1
    EndIf
    If UBound($aArray, 2) < UBound($aSplit) Then
    ReDim $aArray[UBound($aArray) + $iReDimAdd][UBound($aSplit)]
    Else
    ReDim $aArray[UBound($aArray) + $iReDimAdd][UBound($aArray, 2)]
    EndIf
    For $i1 = 0 To UBound($aSplit) - 1
    $aArray[UBound($aArray) - 1][$i1] = $aSplit[$i1]
    Next
    $i += 1
    WEnd
    Return $aArray
    EndFunc ;==>_FileTo2dArry

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

    Func _SucheAntwort($iFragenID)
    ;Copyright by Simon 2011
    ;Returns an answer for the QuesttionID ($iFragenID)

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

    While 1
    $iRnd = Random(0, UBound($aAntworten, 2) - 1, 1)
    If $aAntworten[$iFragenID][$iRnd] <> "" Then ExitLoop
    WEnd

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

    Return $aAntworten[$iFragenID][$iRnd]
    EndFunc ;==>_SucheAntwort

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

    Func _Say($hEdit, $sText, $sPerson)
    ;Copyright by Simon 2011
    ;Appends the Text and the Persion in the Edit-Controll

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

    $hWnd = GUICtrlGetHandle($hEdit)

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

    Local $iLength = _GUICtrlEdit_GetTextLen($hWnd)
    _GUICtrlEdit_SetSel($hWnd, $iLength, $iLength)
    _SendMessage($hWnd, $EM_REPLACESEL, True, $sPerson & ": " & $sText & @CRLF, 0, "wparam", "wstr")
    EndFunc ;==>_Say

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

    Func _FrageAnalysieren($sText, $aFragen)
    ;Copyright by Simon 2011
    ;Searches wether $aFragen contains $sText
    ;Return Values:
    ; Succes: The ID for the Question
    ; $sText is empty: -1 and sets @Error to 1
    ; $nothing found: -1 and sets @Error to 1

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

    Local $i, $i1

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

    If $sText <> "" Then
    For $i = 0 To UBound($aFragen) - 1
    For $i1 = 0 To UBound($aFragen, 2) - 1
    If StringInStr($sText, $aFragen[$i][$i1], 2) Then
    Return $i
    EndIf
    Next
    Next
    Else
    Return SetError(1, 0, -1)
    EndIf
    Return SetError(2, 0, -1)
    EndFunc ;==>_FrageAnalysieren

    [/autoit]

    Fragen.txt:

    Code
    Guten Tag|Moin|Hallo
    geht|gehts|stehts|alles klar

    Antworten.txt:

    Code
    Guten Tag, mein Name ist White, wie kann ich ihnen helfen?|Guten Tag
    Gut und dir?|Gut soweit.Und ihnen?|Das geht dich nichts an!

    Grüße Simon

    • Offizieller Beitrag

    [OT]
    Wenn ich so etwas hier lese:

    Zitat von simon1602

    ;Copyright by Simon 2011

    weiß ich immer nicht, ob ich Lachen oder Weinen soll. :wacko:
    Zum Einen hat das "Copyright" hier sowieso keinen Wert (bzw. fast nie, wir hatten das vor langer Zeit mal ausgiebig erörtert) und zum Anderen ist es eine kranke Unsitte, für jeden Furz Rechte vergeben zu wollen. Demnächst läßt sich noch jemand eine Lizenz fürs "Schei.." erstellen und jeder der keine Gebühr bezahlt, darf nicht mehr aufs Klo... :rofl:
    [/OT]