Ini Read Problem

  • Ich habe ein Funktionieren Code wo ich einen teil nur mit einer ini steuern möchte:

    Ich möchte den Part zeile 11 -15 nur durch eine ini steuern wie mache ich das:
    so würde die ini aussehen:

    HWTyp-GUID]
    IGEL THINCLIENT 3210 LX, LINUX, 533MHZ,=xxx
    HP COMPAQ 2510P/ULTRALIGHT/1,2GHZ/1GB/80GB/12,1"=cccc
    FSC ESPRIMO P5625 HE-TOWER ATH.64 X2/2GB/80GB/DVD=iiiiii
    LENOVO M58 HE-TOWER/E8400/4GB/160GB/DVD-BRENNER=lllll
    FTS ESPRIMO P5731 TOWER/E5500/4GB/250GB/DVD-LW=ppppp


    dabei sollte die $aGUID[5][2]
    demensprechen angepasst werden wieviele schlüssel ich habe wollte es dynamisch halten.

    also falls ich auch mehrer werte habe also wenn bei HWTyp-GUID 10 schlüssel vorhanden sind dann.
    sollte es so heissen $aGUID[10][2]

    Und natürlich die schlüssel und werte jeweils mit übernehmen eine idee?


    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <array.au3>
    #include <File.au3>
    #include <SQLite.au3>
    Global $sIni = @ScriptDir & "\data.ini"
    Global $sFile = @ScriptDir & "\test.txt"
    If Not FileExists($sIni) Then IniWrite($sIni, "Reports", "Ordner", @ScriptDir & "\reports")
    Global $sReports = IniRead($sIni, "Reports", "Ordner",@ScriptDir & "\reports")
    If Not FileExists($sReports) Then DirCreate($sReports)
    Dim $aResult[1][2]
    Dim $aGUID[5][2] = [["IGEL THINCLIENT 3210 LX, LINUX, 533MHZ,", "IGEL cccc,"], _
    ['HP COMPAQ 2510P/ULTRALIGHT/1,2GHZ/1GB/80GB/12,1"', "iii"], _
    ["FSC ESPRIMO P5625 HE-TOWER ATH.64 X2/2GB/80GB/DVD", "jjjjjj"], _
    ["LENOVO M58 HE-TOWER/E8400/4GB/160GB/DVD-BRENNER", "ppppp"], _
    ["FTS ESPRIMO P5731 TOWER/E5500/4GB/250GB/DVD-LW", "mmmmm"]]

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

    For $i = 2 To _FileCountLines($sFile)
    $sLine = FileReadLine($sFile, $i)
    ;ConsoleWrite($sLine & @CRLF)
    If StringInStr($sLine, "P010", 1) And StringInStr($sLine, "Aktiv", 1) Then
    $aTmp = StringSplit($sLine, ";", 1)
    If IsArray($aTmp) And $aTmp[0] = 30 Then
    $iIndex = _ArraySearch($aResult, $aTmp[4], 0, 0, 1, 0, 1, 0)
    If $iIndex = -1 Then
    _Array2DAdd($aResult, $aTmp[4] & "|1")
    ElseIf $iIndex >= 0 Then
    $aResult[$iIndex][1] += 1
    EndIf
    EndIf
    EndIf
    Next
    For $i = 1 To UBound($aResult)-1
    $index = _ArraySearch($aGUID, $aResult[$i][0])
    ;If Not @error Then
    ;IniWrite($sIni, "HWTyp-GUID", $aResult[$i][0], $aGUID[$index][1])
    $tmp = FileOpen($sReports & "\" & $aGUID[$index][1]&'.knz',2)
    FileWrite($tmp,$aResult[$i][1])
    FileClose($tmp)
    Else
    MsgBox(0,0,"Keine GUID für " & $aResult[$i][0] & " gefunden")
    EndIf
    Next
    _ArrayDisplay($aResult)
    _ArrayDisplay($aResult)

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    4 Mal editiert, zuletzt von subzero007 (9. Dezember 2010 um 17:58)

  • Moin!
    Hmmm, so wie ich das sehe wirst du nur mit IniRead und so nicht weit kommen... Würde sagen es fällt schon unter 'Selbst modifizierenden Code' Läuft das Script denn wenn was geändert werden soll oder besser gefragt, ändert sich das Script selber oder ein weteres Programm?!? Weil wie auch immer muss das Script nach dem Eingriff neu gestartet werden, damit die Änderungen auch Registriert werden...

    Ich würde es so regeln:

    Geänderter Code
    [autoit]


    ; Start Modifizierender-Code
    Dim $aGUID[5][2] = [["IGEL THINCLIENT 3210 LX, LINUX, 533MHZ,", "IGEL THINCLIENT 3210 LX, LINUX, 533MHZ,"], _
    ['HP COMPAQ 2510P/ULTRALIGHT/1,2GHZ/1GB/80GB/12,1"', "HP COMPAQ 2510P"], _
    ["FSC ESPRIMO P5625 HE-TOWER ATH.64 X2/2GB/80GB/DVD", "FSC ESPRIMO P5625 HE-TOWER"], _
    ["LENOVO M58 HE-TOWER/E8400/4GB/160GB/DVD-BRENNER", "LENOVO M58 HE-TOWER"], _
    ["FTS ESPRIMO P5731 TOWER/E5500/4GB/250GB/DVD-LW", "FTS ESPRIMO P5731 TOWER"]]
    ; Ende Modifizierender-Code

    [/autoit]


    Den Code etwas anpassen und anschliessend so (in etwa) ändern:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    $datei = FileOpen("test.au3", 0)
    $source = FileRead($datei)
    FileClose($datei)

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

    $switch = _StringBetween($source, "; Start Modifizierender-Code"&@crlf, @crlf&"; Ende Modifizierender-Code", 1)
    $neu = 'Dim $aGUID[1][2] = [["IGEL THINCLIENT 3210 LX, LINUX, 533MHZ,", "IGEL THINCLIENT 3210 LX, LINUX, 533MHZ,"]'
    $source = StringReplace($source, $switch, $neu)

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

    $datei = FileOpen("test.au3", 10)
    FileWrite($datei, $source)
    FileClose($datei)

    [/autoit]

    Grüsse von Techmix!

    2 Mal editiert, zuletzt von Techmix (9. Dezember 2010 um 17:26)

  • Verstehe ich nicht.
    Ich will ja die daten aus der ini übernehmen und nicht fest im Code haben?
    oder verstehe ich was falsch?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • nein ich will die daten nicht im Code festverdratet haben ich will mit einer ini arbeiten

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Ich Denke es kann so garnicht laufen, weil Leerzeichen und Kommas innerhalb der Bezeichnung auftreten!
    Du musst es schon so machen:

    Ini
    [autoit]


    [HWTypGUID]
    IGEL_THINCLIENT_3210_LX_LINUX_533MHZ=xxx

    [/autoit]


    Dann kannste es mit:

    [autoit]

    iniread(@ScriptDir&"Test.ini", "[HWTyp-GUID]", "IGEL_THINCLIENT_3210_LX_LINUX_533MHZ", 0)

    [/autoit]


    Auslesen. Nur wie du das 'dynamisch' halten kannst, da solltest du dir überlegen wie du das am besten lösen kannst :thumbup:
    ...Ich würde direkt mit den Array´s arbeiten z.B:

    [autoit]

    iniread(@ScriptDir&"Test.ini", "[HWTyp-GUID]", $aGUID[0][0], 0)

    [/autoit]

    Grüsse!