Zeilen Auslesen aus Textdatei

  • Hi,

    ich hab ein Problem...ich lasse mir über eine GUI und einem EDIT Feld, eineTextdatei erstellen. In dieser Textdatei sind Computernamen entahlten, Zeilenweise getrennt. Nun brauche ich jeden Namen einzel, da für jeden Computer eine Datei erstellt werden soll. Wie kann ich die Textdatei auslesen lassen und zwar Zeilenweise. Die Schleife soll so lnage laufen bis kein Name mehr vorhanden ist und die ausgelesenen Werte in Variablen (durchnummeriert mit cn++ oder so) speichern.
    Oder hat jemand eine bessere Idee, wie ich das machen kann?
    Vielen dank vorab...
    Gruß
    Marc

  • Cool, danke...genau das hab ich gesucht. Jetzt fehlt mir nur noch die Funktion die Zeilen in Varbiablen schreiben zu lassen. Am besten mit einer FOR Schleife oder?!

  • Warum nicht wie in dem Beispiel?
    mit einer While Schliefe


    [autoit]

    #include <Array.au3>
    $file = FileOpen("c:\test.txt", 0)

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

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    Dim $Computernamenarray[1]

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

    $file = FileOpen("c:\test.txt", 0)

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

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    $Computernamenarray[0]+=1
    _ArrayAdd ( $Computernamenarray, $line )

    Wend
    FileClose($file)

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

    _ArrayDisplay($Computernamenarray,"Namen")

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

    $Computernamenarray[0] enthält in meinem Beispiel die Anzahl der Zeilen/deine Computernamen

    2 Mal editiert, zuletzt von Unicom (22. September 2006 um 09:19)

  • Weltklasse...
    Funzt...allerdings gibt er als erste Spalte immer [0]=1 aus...
    Ich steh heute ein bissel auf dem Schlauch. Wenn ich nun Dateien erzeugen lassen will für jeden PC mit dessen Namen, dann schreib ich FileOpen usw. in die While Schleife oder? Wie sieht das bie FileReadtoArray aus? Finde nix in der Hilfe

  • Hab was gefunden...nur irgendwie raff ich das nicht...ich bin heute wirklich etwas neben mir...wo muss nun das FileOpen und FileWrite einbinden, in die Schleife mit Msgbox oder...

    Code
    $file="test.txt"
    $x=Stringsplit(StringReplace(FileRead($file,FileGetSize($file)),@lf,""),@cr)
    
    
    $start=1
    for $i=1 to $x[0]
    if $start=1 then msgbox(1,"",$x[$i])
    if StringLeft($x[$i],13)="Applications:" then $start=1
    next
  • okay soweit so gut

    Problem ist jetzt, das er nur eine Datei erstellt mit allen Namen drin, ich möchte aber für jeden Namen eine eigene Datei erstellen. Der Name der Datei soll den ausgelesenen Namen dann auch enthalten. z.B. PC1.cmd und in der Datei steht dann auch ein Befehl mit z.b. copy xy.txt pc1\xy.txt

  • Hallo,
    ja das hat schon seine Richtigkeit. Das erste Element beinhaltet die Anzahl Elemente des Arrays. Steht aber alles in der Hilfe unter _FileReadToArray.
    Vielleicht hilf dir dieses Beispielt weiter:

    Spoiler anzeigen
    [autoit]

    #include<file.au3>
    dim $array
    _FileReadToArray("C:\TEST.TXT",$array) ;Alles in ein Array einlesen
    for $i=1 to $array[0]
    $file=FileOpen("C:\" & $array[$i],2) ;Für jede enthaltenes Element im Array ein File erzeugen mit desen Namen
    ConsoleWrite($file)
    FileWriteLine($file,"copy xy.txt " & $array[$i] & " \xy.txt")
    FileClose($file)
    Next

    [/autoit]

    eddy_erpel

    Einmal editiert, zuletzt von Eddy_Erpel (22. September 2006 um 10:04)

  • Hi,

    Leute genau das is es :schild4:
    :party4: :musik1: :musik2:
    :) Weltklasse...ihr seit die besten...
    Danke

  • So wieder ich :schild4:

    nun hab ich das soweit implementiert...allerdings hab ich nun ein problem mit dem Array...

    [autoit]


    ;Aktivieren der Sperre
    dim $arrayak
    _FileReadToArray($ipfad_read & "\" & $raum_read &".txt",$arrayak) ;Alles in ein Array einlesen
    for $h=1 to $arrayak[0]
    $remote_ak=FileOpen($ipfad_read & "\IBlocker\aktivieren\" & $arrayak[$h] & "_ak.cmd",2) ;Für jede enthaltenes Element im Array ein File erzeugen mit desen Namen
    ConsoleWrite($file)
    FileWriteLine($remote_ak, "cmdow @ /HID"&@CRLF&"cd "& $ipfad_read &"\" & @CRLF & "psexec.exe "& $arrayak[$h] & " -u " & $domaene_read &"\"& $account_read & " -p " & $passwort_read & " -i -c -f " & $unc_read & "\" & $raum_read &"\IBlocker_ak.cmd"&@CRLF&"exit")
    FileClose($file)
    Next

    ;Deaktivieren der Sperre
    dim $arrayde
    _FileReadToArray($ipfad_read & "\" & $raum_read &".txt",$arrayde) ;Alles in ein Array einlesen
    for $i=1 to $arrayde[0]
    $remote_de=FileOpen($ipfad_read & "\IBlocker\deaktivieren\" & $arrayde[$i] & "_de.cmd",2) ;Für jede enthaltenes Element im Array ein File erzeugen mit desen Namen
    ConsoleWrite($file)
    FileWriteLine($remote_de, "cmdow @ /HID"&@CRLF&"cd "& $ipfad_read &"\" & @CRLF & "psexec.exe "& $arrayde[$i] & " -u " & $domaene_read &"\"& $account_read & " -p " & $passwort_read & " -i -c -f " & $unc_read & "\" & $raum_read &"\IBlocker_de.cmd"&@CRLF&"exit")
    FileClose($file)
    Next

    [/autoit]

    Das problem ist, dass immer das letzte Array bzw. die letzte Funktion nur ausgeführt wird. Steht Aktivieren als letzte wird alles unter Aktivieren erstellt und unter Deaktivieren nur "_de.cmd". Umgedreht genauso...

    Einmal editiert, zuletzt von hessebou (22. September 2006 um 13:30)

  • Hallo,
    Die Zeile ConsoleWrite ist überflüssig und bei FileClose sollte immer das FileHandle geschlossen werden, welches mit FileOpen geöffnet wurde, also FileClose($remote_ak) bzw. FileClose($remote_de).

    Zitat

    Steht Aktivieren als letzte wird alles unter Aktivieren erstellt und unter Deaktivieren nur "_de.cmd". Umgedreht genauso...

    Soll das bedeuten, dass das zweite nur die Datei ohne Inhalt erstellt oder wie soll ich das verstehen?

    eddy_erpel

  • Hi,

    also die Dateien werden erstellt...beide allerdings werden die im Array gespeicherten Werte nicht ausgeben. Das heißt...die Dateien sollen heißen PCNAME_de oder _ak.cmd. Erstellt wird aber nur eine Datei die heißt _ak oder _de.cmd. Steht zuletzt die _de Funktion, dann werden dort die PC-Namen davor geschrieben. Bei der bei Aktivieren steht nur eine Datei _ak.cmd. Alles ein bisschen verwirrent ich weis ;)

    Edit 1:
    Also das Problem scheint an dem Ort der Textdatei zu hängen. Gebe ich einen satischen Pfad an, dann funzt es einwandfrei. Allerdings brauch ich einen Dynamischen Pfad. Gibt es irgendeine Möglichkeit dies zu verwirklichen?

    Edit 2:
    Okay :hammer:
    gefunden, hatte vergessen oben die Datei mit FileClose zu zumachen...
    :keks:

    Edit GtaSpider: Erstmal willkommen ;) Aber bitte mache keine Doppelposts sondern Editiere deine Beiträge bitte. Habe sie mal Zusammengefügt. - Mfg Spider