ini im Unterordner auslesen und Verarbeiten

  • Hey,

    ich habe ein Problem habe folgende ordner struktur

    \\server\share\28.09.2009\ordner1
    \\server\share\28.09.2009\ordner2
    \\server\share\28.09.2009\ordner3
    \\server\share\28.09.2009\ordner4
    \\server\share\28.09.2009\ordner5
    \\server\share\28.09.2009\log.ini

    \\server\share\27.09.2009\ordner1
    \\server\share\27.09.2009\ordner2
    \\server\share\27.09.2009\ordner3
    \\server\share\27.09.2009\ordner4
    \\server\share\27.09.2009\ordner5
    \\server\share\27.09.2009\log.ini


    habe jeweils im ordern "\\server\share\%datum_der_sicherung%\" eine log.ini die so aussieht:

    [Quelle-Ziele]
    c:\0rdner1=\\server\share\28.09.2009\ordner1
    c:\0rdner2=\\server\share\28.09.2009\ordner2
    c:\0rdner3=\\server\share\28.09.2009\ordner3
    c:\0rdner4=\\server\share\28.09.2009\ordner4
    c:\0rdner5=\\server\share\28.09.2009\ordner5


    Ich möchte in einer GUI den Ordner:
    \\server\share\ angeben und er soll in dann in aller ordner gucken wo eine log.ini ist,
    wenn eine Log.ini enthalten dann ein Listview item erstellen.


    Der listview eintrag sollte so ausehen:
    Datum|Quelle|Backupordner
    28.09.2009|c:\0rdner1|\\server\share\


    eine idee wie ich das machen kann?

    Danke und Gruß
    SubZero

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

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

    3 Mal editiert, zuletzt von subzero007 (29. September 2009 um 14:44)

  • Danke,

    es ist nur im ersten odner eine ini
    \\server\share\28.09.2009\log.ini
    \\server\share\27.09.2009\log.ini
    \\server\share\26.09.2009\log.ini
    \\server\share\25.09.2009\log.ini

    Wie mache ich das und
    wie kann ich dann aus dem ergebnis:
    Log.ini enthalten oder nicht und anschliessen log.ini lesen und folgende Listview items erstellen?

    Datum|Quelle|Backupordner
    28.09.2009|c:\0rdner1|\\server\share\

    Das ist mein Problem ?(

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

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

  • Ok das krige ich jetzt hin

    noch eine letzte frage habe ich:
    Wie kann ich aus dem:

    c:\0rdner1=\\server\share\28.09.2009\ordner1

    Das machen ?

    28.09.2009|c:\0rdner1|\\server\share\

    Danke
    SubZero

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

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

    • Offizieller Beitrag

    Ist doch nur etwas Stringbastelei:

    [autoit]

    $a = 'c:\0rdner1=\\server\share\28.09.2009\ordner1'
    ;~ $a = 'c:\0rdner1=\\server\share\blub\28.09.2009\ordner1' ; auch längere Pfade möglich

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

    $date = StringRegExp($a, '\d{2}\.\d{2}\.\d{4}', 1)
    $date = $date[0] & '|'

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

    $local = StringLeft($a, StringInStr($a, '=')-1) & '|'

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

    $server = StringRegExp($a, '(\\\\\w+\\)(\w+\\)+', 2)
    $server = $server[0]

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

    $string = $date & $local & $server

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

    ConsoleWrite($string & @CRLF)

    [/autoit]
  • ja ne ist klar,

    StringRegExp ist für mich immer noch ein buch mit 7 siegeln nur nur StringRegExp :(

    Aber das wird noch ;)

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

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

  • Was mache ich falsch ?

    [autoit]

    #include <array.au3>

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

    $array_Inis = _GetFilesFolder_Rekursiv ( @ScriptDir , 'log.ini',0 )
    ;~ _ArrayDisplay ( $array_Inis )
    For $i = 1 To UBound ( $array_Inis )-1

    $a = IniReadSection ( $array_Inis[$i], 'Quelle-Ziele' )
    _ArrayDisplay ($a)

    ;$a = 'c:\0rdner1=\\server\share\28.09.2009\ordner1'
    ;~ $a = 'c:\0rdner1=\\server\share\blub\28.09.2009\ordner1' ; auch längere Pfade möglich

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

    $date = StringRegExp($a[$i], '\d{2}\.\d{2}\.\d{4}', 1)
    $date = $date[0] & '|'

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

    $local = StringLeft($a[$i], StringInStr($a[$i], '=')-1) & '|'

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

    $server = StringRegExp($a[$i], '(\\\\\w+\\)(\w+\\)+', 2)
    $server = $server[0]

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

    $string = $date & $local & $server

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

    ConsoleWrite($string & @CRLF)

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


    Next

    [/autoit]

    Würde mich sehr darüber freuen wenn mir jemand erklären würde was ich falsch mache damit ich es mal verstehe
    ?(?(?(?(?(

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

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

  • Nein so weit komme ich
    Array display klappt:
    autoit.de/wcf/attachment/6210/

    und kriege anschliessend diesen fehler:

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $date = StringRegExp($a[$i], '\d{2}\.\d{2}\.\d{4}', 1)
    $date = StringRegExp(^ ERROR

    ???

    Bilder

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

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

  • Bitte nicht lachen und nicht fertig machen erklären wäre mir lieber ;) und mir nicht meine mehr als 400 beiträge vorwerfen ;)


    Das ist auch falsch aber was?

    [autoit]

    #include <array.au3>

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

    $array_Inis = _GetFilesFolder_Rekursiv ( @ScriptDir , 'log.ini',0 )
    ;~ _ArrayDisplay ( $array_Inis )
    For $i = 1 To UBound ( $array_Inis )-1

    $a = IniReadSection ( $array_Inis[$i], 'Quelle-Ziele' )
    _ArrayDisplay ($a)

    ;$a = 'c:\0rdner1=\\server\share\28.09.2009\ordner1'
    ;~ $a = 'c:\0rdner1=\\server\share\blub\28.09.2009\ordner1' ; auch längere Pfade möglich

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

    $date = StringRegExp($a[$i][$i], '\d{2}\.\d{2}\.\d{4}', 1)
    $date = $date[0] & '|'

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

    $local = StringLeft($a[$i][$i], StringInStr($a[$i][$i], '=')-1) & '|'

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

    $server = StringRegExp($a[$i][$i], '(\\\\\w+\\)(\w+\\)+', 2)
    $server = $server[0]

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

    $string = $date & $local & $server

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

    ConsoleWrite($string & @CRLF)

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


    Next

    [/autoit]

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

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

  • Hey Nuts,

    kannst du dir mal meinen beitrag "12" anschauen verstehe den fehler nicht ?

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

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

  • Das steht in der hilfe:
    Die Anzahl der zurückgegebenen Elemente steht in $result[0][0]. Wenn ein @error auftaucht, wird kein Array erstellt.

    Jetzt bin ich ganz verwirt und das ist auch falsch ??

    [autoit]

    #include <array.au3>

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

    $array_Inis = _GetFilesFolder_Rekursiv ( @ScriptDir , 'log.ini',0 )
    ;~ _ArrayDisplay ( $array_Inis )
    For $i = 1 To UBound ( $array_Inis )-1

    $a = IniReadSection ( $array_Inis[$i], 'Quelle-Ziele' )
    _ArrayDisplay ($a)

    ;$a = 'c:\0rdner1=\\server\share\28.09.2009\ordner1'
    ;~ $a = 'c:\0rdner1=\\server\share\blub\28.09.2009\ordner1' ; auch längere Pfade möglich

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

    $date = StringRegExp($a[$i][0], '\d{2}\.\d{2}\.\d{4}', 1)
    $date = $date[$i][0] & '|'

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

    $local = StringLeft($a[$i][0], StringInStr($a[$i][0], '=')-1) & '|'

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

    $server = StringRegExp($a[$i][0], '(\\\\\w+\\)(\w+\\)+', 2)
    $server = $server[$i][0]

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

    $string = $date[$i][0] & $local[$i][0] & $server[$i][0]

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

    ConsoleWrite($string[$i][0] & @CRLF)

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


    Next

    [/autoit]

    ?(?(?(?(

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

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

  • Ja.
    Das erste Array (1D) enthält die Pfade zu allen .ini's.
    Jetzt wird in einer For ...Next Schleife das 1D Array durchgegangen und für jede .ini eine bestimmte Sektion eingelesen (Inireadsektion).
    Daraus resultiert ein 2D Array mit 2 Spalten (Key/Value). Das 2D Array muss jetzt weiterverarbeitet werden.

    Du setzt aber $i ein. $i hat aber doch einen Bezug zu den eingelesenen Pfaden (das 1D Array).
    Der Bezug zum 2D Array ist 1 bis $2DArray[0][0] (s. Hilfe)

    • Offizieller Beitrag

    Wie schon gesagt: Du mußt das Array von IniReadSection in einer EIGENEN SCHLEIFE auswerten, mit EIGENER ZÄHLVARIABLE.
    Und die RegExp-Auswertungen jetzt plötzlich auch als 2D-Array zu betrachten ist falsch.
    Ich könnte es jetzt ruckzuck korrigieren, aber das hilft dir nichts.
    Du mußt erst mal verstehen was dort abläuft.

  • Hey,

    du hast es ja hier sehr gut beschrieben aber verstehen tue ich es nicht ???

    Auch einige Funktionen liefern von Haus aus ein 2-D Array zurück.

    Nehmen wir als Bsp. IniReadSection("filename", "section")
    So sieht unsere INI-Datei aus:

    [sektion]
    schluesselA=1
    schluesselB=2
    schluesselC=3
    schluesselD=4

    Jetzt lesen wir die Sektion ein:

    #include <array.au3>
    Dim $val ; Variable für Array deklarieren
    $val = IniReadSection($pathINI, "sektion") ; Sektion einlesen
    If (Not IsArray($val)) Then ; Wenn zurückgegebene Variable kein Array ist
    MsgBox(0, '', 'INI-Sektion konnte nicht gelesen werden')
    Exit
    EndIf
    _ArrayDisplay($val, 'Inhalt INI-Sektion: [sektion]') ; eingelesenes Array anzeigen

    Schauen wir uns den Inhalt des Array an:

    $val[0][0] = 4 ; Anzahl der eingelesenen Schlüssel-Wert Paare

    $val[1][0] = 'schluesselA' ; Name des Schlüssels
    $val[1][1] = 1 ; Wert des Schlüssels

    $val[2][0] = 'schluesselB'
    $val[2][1] = 2

    $val[3][0] = 'schluesselC'
    $val[3][1] = 3

    $val[4][0] = 'schluesselD'
    $val[4][1] = 4

    Möchte ich jetzt auf den Wert von 'schluesselC' zugreifen, muß ich das Array nach dem Schlüssel durchsuchen und mir den zugehörigen Wert ausgeben lassen:

    Dim $SuchWert, $SuchSchluessel = 'schluesselC'
    For $i = 1 To UBound($val) -1
    If $val[$i][0] = $SuchSchluessel Then
    $SuchWert = $val[$i][1]
    ExitLoop
    EndIf
    Next
    MsgBox(0, '', 'gesuchter Wert ist: ' & $SuchWert)

    Ich vergleiche also in jedem Element des Array ob der enthaltene Schlüsselname (Position[n][0]) mit meinem gesuchten Namen übereinstimmt.
    Wird der Schlüssel gefunden, lese ich den zugehörigen Wert aus (Position[n][1]).

    ?(?(?(?(

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

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

    • Offizieller Beitrag
    [autoit]

    Local $array_Inis = _GetFilesFolder_Rekursiv ( @ScriptDir , 'log.ini',0 )
    Local $sOut = ''

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

    For $i = 1 To UBound ( $array_Inis )-1
    $aSec = IniReadSection ( $array_Inis[$i], 'Quelle-Ziele' )
    For $j = 1 To UBound($aSec) -1
    $entry = $aSec[$j][0] & '=' & $aSec[$j][1] ; Key und Value zusammensetzen, wie in der INI
    $date = StringRegExp($entry, '\d{2}\.\d{2}\.\d{4}', 1)
    $date = $date[0] & '|'
    $local = StringLeft($entry, StringInStr($entry, '=')-1) & '|'
    $server = StringRegExp($entry, '(\\\\\w+\\)(\w+\\)+', 2)
    $server = $server[0]
    $string = $date & $local & $server
    $sOut &= $string & @CRLF
    Next
    Next
    ConsoleWrite($sOut & @CRLF)

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

    ; Da du alles aus der INI liest:
    ; [Quelle-Ziele]
    ; c:\0rdner1=\\server\share\28.09.2009\ordner1

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

    ; geht es aber auch so:
    Local $array_Inis = _GetFilesFolder_Rekursiv ( @ScriptDir , 'log.ini',0 )
    Local $sOut = ''

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

    For $i = 1 To UBound ( $array_Inis )-1
    $aSec = IniReadSection ( $array_Inis[$i], 'Quelle-Ziele' )
    For $j = 1 To UBound($aSec) -1
    $date = StringRegExp($aSec[$j][1], '\d{2}\.\d{2}\.\d{4}', 1)
    $date = $date[0] & '|'
    $local = $aSec[$j][0] & '|'
    $server = StringRegExp($aSec[$j][1], '(\\\\\w+\\)(\w+\\)+', 2)
    $server = $server[0]
    $string = $date & $local & $server
    $sOut &= $string & @CRLF
    Next
    Next
    ConsoleWrite($sOut & @CRLF)

    [/autoit]

    P.S. Gewöhn dir mal an Tidy zu verwenden, wenn du schon beim Coden nicht aufs Einrücken achtest. ;)