Text einlesen und verwerten

  • Hallo liebe Itler ;)

    Ich bin momentan am üben und möchte mich nun mit der Texteingabe geschäftigen.
    Eingelesen werden sollen lokale IPs (spielt eig keine Rolle, ich machs nur als Beispiel).

    Eine .tx könnte also so aussehen:

    192.168.88.11
    162.122.322.22
    199.123.65.44
    ...

    Jetzt möchte ich diese in autoit speichern und wieder verwenden.

    Welche Möglichkeiten gibt es? Am liebsten wäre es mir, wenn die per Array gespeichert werden. Da eine IP immer vier Teile hat würde man dann StringSplit verwenden und als Trennzeichen einen Punkt und ein Leerzeichen/Zeilenumbruch nehmen...
    Man könnte auch IniRead/IniWrite benutzen, aber ehrlich gesagt blick ich das nicht, auch weil so eine Liste zum einlesen ja je nach Skript gerne mal 50 Zeilen haben kann...


    Vielen Dank für eure Hilfe!!

    Einmal editiert, zuletzt von Simmen (18. August 2009 um 18:08)

    • Offizieller Beitrag

    Hier mal ein Bsp.:

    [autoit]

    #cs Inhalt der Textdatei "test.txt"
    192.168.88.11
    162.122.322.22
    199.123.65.44
    #ce

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

    #include <GuiIPAddress.au3>
    Local $index = 0, $aFile
    $file = @ScriptDir & '\test.txt' ; der Dateipfad
    _FileReadToArray($file, $aFile)

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

    $gui = GUICreate('test')
    $hIPAddress = _GUICtrlIpAddress_Create ($gui, 20, 20)
    $bt = GUICtrlCreateButton('next IP', 180, 20, 60, 20)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    Case $bt
    $index += 1
    If $index <= $aFile[0] Then
    _GUICtrlIpAddress_Set($hIPAddress, $aFile[$index])
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Super danke, FileRead klappt sehr gut.

    Ich steh grad ziemlich groß auffem Schlauch:
    Ich poste mal mein Skript:

    [autoit]

    #include <ie.au3>
    #include <Array.au3>

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

    $line = FileRead("text.txt")
    MsgBox(0,"Zeile",$line)
    $Array = StringSplit($line, ". ")
    MsgBox(0,"ArrayDisplay",_ArrayDisplay($Array))
    $ADurchlaeufe = ($Array[0]/4)

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

    For $zaehler = 1 to $ADurchlaeufe
    $g = $array[1]
    $s = $array[2]
    $p = $array[3]
    $mp = $array[4]

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

    MsgBox(0,"1",$g)
    MsgBox(0,"2",$s)
    MsgBox(0,"3",$p)
    MsgBox(0,"4",$mp)

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

    Next

    [/autoit]

    Ich möchte jetztje nach Anzahl der Durchläufe die Variablen g,s,p und mp anpassen. Also muss die Nummer in der eckigen Klammer je um vier erhöht werden. Wie ging das nochmal? Sorry für die noobifrage :D

    • Offizieller Beitrag

    Da machst du dir ja 'nen Knoten ins Hirn. :D
    FileRead ist hier unpassend, wenn du anschließend Zeile für Zeile bearbeiten willst. Deshalb den Inhalt gleich in ein Array lesen, jede Zeile ist ein Element.

    [autoit]

    #include <File.au3>

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

    Local $aFile, $split, $file = @ScriptDir & '\test.txt' ; der Dateipfad
    ; lies gleich in ein Array, dann brauchst du nicht rumstückeln!
    _FileReadToArray($file, $aFile)

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

    For $i = 1 To UBound($aFile) -1
    $split = StringSplit($aFile[$i], '.')
    For $j = 1 To UBound($split) -1
    ConsoleWrite('IP: ' & $i & ' Segment: ' & $j & @CRLF)
    Next
    ConsoleWrite(@CRLF)
    Next

    [/autoit]
  • Hallo BugFix.

    Habe es mal so gemacht, falls es jemand mal benötigt, das man dann in beide Richtungen hin und her schalten kann ( next & bevor). Hoffe mal das es so okay ist und Du nichts dagegen hast.

    Spoiler anzeigen
    [autoit]

    #include<GuiIPAddress.au3>
    #include<File.au3>
    Local $index = 0, $aFile
    $file = @ScriptDir & '\test.txt' ; der Dateipfad
    _FileReadToArray($file, $aFile)

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

    $gui = GUICreate('test')
    $hIPAddress = _GUICtrlIpAddress_Create ($gui, 20, 20)
    $bt = GUICtrlCreateButton('next IP', 180, 20, 60, 20)
    $bt_retour = GUICtrlCreateButton('bevor IP', 250, 20, 60, 20)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    Case $bt
    $index += 1
    If $index <= $aFile[0] Then
    _GUICtrlIpAddress_Set($hIPAddress, $aFile[$index])
    EndIf
    Case $bt_retour
    If $index >0 Then
    $index -= 1
    If $index <=$aFile[0] Then
    _GUICtrlIpAddress_Set($hIPAddress, $aFile[$index])
    EndIf
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Also das mit der GUI verstehe ich null und brauche ich auch momentan nicht, das verwirrt nur.

    Das was BugFix geschrieben hat kann ich nachvollziehen aber nicht verstehen.
    Bei der Ausgabe ist der Wert immer 0.

    [autoit]

    MsgBox(0,"ArrayDisplay",_ArrayDisplay($aFile))

    [/autoit]

    Außerdem möchte ich doch vier Variablen gespeichert haben. Also IP nach Muster:
    xxx.yyy.zzz.aaa

    Dann soll;

    [autoit]


    $a = "xxx"
    $b = "yyy"
    $c = "zzz"
    $d = "aaa"

    [/autoit]

    und natürlich im nächsten Durchlauf die IP der zweiten Zeile ausgespuckt werden, etc, und zwar solange wie ich an Zeilen im TextEdit hab....

    • Offizieller Beitrag

    Du hast einen Fehler drin: _ArrayDisplay läßt sich nicht in einer MsgBox anzeigen. ;)

    Und zum anderen ist deine Logik nicht sinnvoll.
    Es ist doch sinnvoll, die IP komplett zu speichern in einer Zeile. Dann brauchst du nur diese Zeile zur Ausgabe der IP. Und falls du diese in Oktetts zerpflücken willst, wendest du auf diese eine Zeile halt StringSplit an.
    Wozu willst du Oktetts speichern und diese dann zusammenbasteln?

  • Auch so

    [autoit]


    _ArrayDisplay($aFile)

    [/autoit]

    geht es nicht.

    Naja ich dacht mir, dass es bei IsS oft verschiedene Eingabefelder gibt, daher wollt ichs zerpflücken, daher macht es für mich iwie schon Sinn.
    Dann also die Ausgabe der Zeile zerpflücken?
    Wieso wendest Du dann schon ein StringSplit an, den Schritt find ich komisch wenn doch eh die ganze Zeile eingelesen wird?

    • Offizieller Beitrag

    geht es nicht.


    Existiert denn die Datei überhaupt? Ist der Pfad korrekt angegeben? Prüf doch mal mit:

    [autoit]

    If FileExists(Pfad) Then
    MsgBox(0,'','OK')
    Else
    Exit MsgBox(0,'','Pfad falsch')
    Endif

    [/autoit]

    Wieso wendest Du dann schon ein StringSplit an, den Schritt find ich komisch wenn doch eh die ganze Zeile eingelesen wird?


    Ich würde nicht splitten, das habe ich nur eingebaut, weil du die Oktetts einzeln haben willst. Also wird dort die komplette IP eingelesen und dann gesplittet.

  • Pfad gibt es, habs getestet!

    Wo sollen denn jetzt die einzelnen Werte gespeichert sein?

    [autoit]

    ConsoleWrite('IP: ' & $i & ' Segment: ' & $j & @CRLF)

    [/autoit]

    Wie funkt das? Bzw. wie kann ich nun Array[1] bis Array[4] aufrufen?

  • Immer noch nicht verstanden, wie kann ich denn nun meine Werte aufrufen?
    Array lässt sich immer noch nicht anzeigen...

  • @Simmen

    Also als erstes einmal würde ich Dir raten nicht gleich mit so großen Sachen anzufangen.
    Du solltest dich mehr mit der Hilfe befassen, denn das habe ich selber auch die Lsg. für viele Sachen bereits her.
    Als Anfänger gleich mit Array's zu scripten ist sichrlich nicht der gute Weg, aber das solltest Du selber entscheiden.

    Array lassen sich wie folgt anzeigen, wobei ich die Anzeige in einer MsgBox geschrieben habe.

    Info: Script von BugFix und von mir nur angepaßt

    Spoiler anzeigen
    [autoit]


    #include <File.au3>

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

    Local $aFile, $split, $file = @ScriptDir & '\test.txt' ; der Dateipfad
    ; lies gleich in ein Array, dann brauchst du nicht rumstückeln!
    _FileReadToArray($file, $aFile)

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

    For $i = 1 To UBound($aFile) -1
    $split = StringSplit($aFile[$i], '.')
    For $j = 1 To UBound($split) -1
    ; ConsoleWrite('IP: ' & $i & ' Segment: ' & $split[$j] & @CRLF)
    Next
    MsgBox(0,"Test", $aFile[$i] & " " & @CRLF & @CRLF & " Seg. 1: "&$split[1] & " " & @CRLF & " Seg. 2: "&$split[2] & " " & @CRLF & " Seg. 3: "&$split[3] & " " & @CRLF & " Seg. 4: "&$split[4])
    ;ConsoleWrite(@CRLF)
    Next

    [/autoit]

    Das Ergebnis ist dann folgendes:
    autoit.de/wcf/attachment/5826/

    Wie Du nun mit den Seg. weiter arbeitest, das sollte klar sein.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ah, hab meinen Fehler gefunden.
    Ich setz mich mal mit auseinander und lasse hören, ob ich zurecht komme ;)

    2 Mal editiert, zuletzt von Simmen (18. August 2009 um 16:54)

  • Also ich weiß nicht was da nicht funktionieren sollte. Habe es gerade nochmals auf dem Laptop ausprobiert und auch da ohne Probleme.

    Nimm mal die Anlage, entpacke sie und dann starte diese.
    Anlage: autoit.de/wcf/attachment/5827/

    Edit: welchen Fehler? Wir möchten alle lernen ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Vielen Dank, das ist geschafft *puuh*

    Mein Fehler war, dass ich das Makro @ScriptDir übersehen habe und dadurch einen falschen Pfad angegeben hab, da ich es im vorherigen Skript gelöscht hatte um den genauen Pfad anzugeben...

    Jetzt hab ich noch ne weitere Frage aber die bezieht sich auf was ganz anderes, daher mache ich ein neues Thema auf, damit es übersichtlich bleibt.