Array in Textdatei speichern!

  • Hallo
    Ich versuche gerade mit unteren Code aus einem Registryzweig Pfade auszulesen und diese in eine Textdatei zu speichern.
    Er speichert mir aber immer nur jeweils eine Zeile in immer die gleiche Textdatei! Es soll aber zum Schluß so aussehen:

    Code
    1. Treiberpfad: %SystemRoot%\NLDRV\010
    2. Treiberpfad: %SystemRoot%\NLDRV\009
    3. Treiberpfad: %SystemRoot%\NLDRV\008
    4. ...


    !! Aber Achtung so noch nicht ausführen, weil es sonst eine Endlosschleife wird !!

    Spoiler anzeigen
    [autoit]

    Global $Output, $DevPath, $Textdat = (@TempDir & '\Treiberpfade_' & @UserName & '.txt')
    ;$DevPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "DevicePath")
    $String='%SystemRoot%\NLDRV\010;%SystemRoot%\NLDRV\009;%SystemRoot%\NLDRV\008;%SystemRoot%\NLDRV\007;%SystemRoot%\NLDRV\006;%SystemRoot%\NLDRV\005;%SystemRoot%\NLDRV\004;%SystemRoot%\NLDRV\003;%SystemRoot%\NLDRV\002;%SystemRoot%\NLDRV\001;%SystemRoot%\inf'

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

    $arSplit = StringSplit($String, ';');$DevPath
    If $arSplit[0] = 1 Then
    MsgBox(48, 'Fehler', 'Fehler! Soo geht`s net!')
    Else
    For $i = 1 To UBound($arSplit) -1
    For $Element In $arSplit
    $Output = $i & '. Treiberpfad: ' & $arSplit[$i]
    _Save()
    Next
    Next
    EndIf

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

    Func _Save()
    If _FileWriteLog($Textdat, $Output) = 1 Then
    If MsgBox(262212, "Meldung", "Die Treiberpfad.txt ist erstellt worden." & @CRLF & _
    "Treiberpfad.txt jetzt in Notepad ansehen?", 15) = 6 Then
    ShellExecute($Textdat)
    EndIf
    EndIf
    EndFunc ;==>_Save

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

    Func _FileWriteLog($sLogPath, $sLogMsg, $iFlag = -1)
    Local $iOpenMode = 2 ; 1 = An Textende dazuschreiben! , 2 = Überschreiben
    Local $sMsg = $sLogMsg
    If $iFlag <> -1 Then
    $sMsg &= @CRLF & FileRead($sLogPath)
    $iOpenMode = 2
    EndIf
    Local $hOpenFile = FileOpen($sLogPath, $iOpenMode)
    If $hOpenFile = -1 Then Return SetError(1, 0, 0)
    Local $iWriteFile = FileWriteLine($hOpenFile, $sMsg)
    Local $iRet = FileClose($hOpenFile)
    If $iWriteFile = -1 Then Return SetError(2, $iRet, 0)
    Return $iRet
    EndFunc ;==>_FileWriteLog

    [/autoit]

    Einmal editiert, zuletzt von Fintan (12. März 2011 um 14:42)

  • Für Registry hat BugFix schon mal was gemacht, mal bei seinen Werken stöbern. ;)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ich habe mal in _GetRegSubKeys geschaut, aber dort werden nur Ordner ausgegeben, aber keine Einträge!
    Und dann bekomme ich dort keinen Output wie oben gefragt.

    Hat noch jemand einen Tip oder UDF der so was kann?

    • Offizieller Beitrag

    Schau mal im Code in Zeile 27, fällt dir da nix auf?
    Du überschreibst ständig die Datei, der Mode muß 1 sein. ;)
    Außerdem sind die Zeilen 10 und 13 überflüssig.

  • verstehe noch nicht so ganz was du willst?
    Der regkey hat doch nur einen Wert "%SystemRoot%\inf" und willst du wirklich überschreiben dann ist doch klar da nur ein Wert überbleibt.

    [autoit]

    Local $iOpenMode = 2 ; 1 = An Textende dazuschreiben! , 2 = Überschreiben

    [/autoit]


    Zumindest ist das mene Meinung nach groben überfliegen des Scriptes...

    Versuch mal zu "genauer" beschreiben was du vorhast, dann kann man schauen wie man es löst. :rolleyes:

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Danke Euch beiden.

    Also bei mir stehen in der Registry die Namen so wie oben im String geschrieben drin! (nLited Treiber sind da eingetragen!)

    Ich wollte halt den $output Zeilenweise von dem gesplitteten string $arSplit ausgeben. In jeder Zeile ein anderer Treiber aufgeführt.

    Code
    1. Treiberpfad: %SystemRoot%\NLDRV\010
    2. Treiberpfad: %SystemRoot%\NLDRV\009
    3. Treiberpfad: %SystemRoot%\NLDRV\008
    4. ...
  • Joar und wo ist nun noch das Problem? Die Lösung steht doch bereits in den beiden Antworten und auch in deinem Quellcode selbst.
    Aber davon mal ab würde ich das Array von Stringsplit() einfach mit

    [autoit]


    #include <file.au3>
    _filewritefromarray()

    [/autoit]

    In deine Datei Schreiben und schon sparste dir deine anderen Funktionen und diese For Schleife am Anfang. ;)

  • Ah ja, mit der UDF wärs auch gegangen, danke.

    Ich habe es jetzt doch rausgefunden, wie es richtig ausgespuckt.

    [autoit]

    $RegPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "DevicePath")
    $DevPath = StringSplit($RegPath, ';')

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

    $Output = ""
    For $r = 1 to UBound($DevPath,1) - 1
    $Output = $Output & $r & '. Treiberpfad: ' & $DevPath[$r] & @LF
    Next
    MsgBox(64,"Treiberpfade", $Output)

    [/autoit]