Adresse (Ort und Straße) einlesen

  • Hallo,
    bin neu hier und hab trotz der Suchfunktion noch immer ein Prob

    ich hab folgenden text in der datei test.txt und will jetzt nur die straße und die stadt
    xyz/xyzxyzxyzx/Musterstraße 1/Musterstadt/xyz xyz yxz

    hab schon nen ansatz, aber ich bekomm nicht alles weg. Und bei straße stört das 'ß' das einfach ignoriert wird

    kann mir jemand helfen?

    [autoit]

    #include
    #include

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

    Dim $aRecords
    If Not _FileReadToArray("test.txt",$aRecords) Then
    MsgBox(4096,"Fehler", " Fehler konnte Datei nicht in Array einlesen error:" & @error),
    Exit
    EndIf

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

    for $z = 1 to 1
    global $string = $aRecords[$z]
    ;MsgBox("","meldung","" & $string)
    next
    ;_ArrayDisplay($string, "Inhalt der Array")

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

    $replaced2= StringRegExp ($string,"\w+",3)
    _ArrayDisplay($replaced2, "$replaced[X]")

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

    $replaced1 = StringRegExp ($string,"\d+",3)
    $Uhrzeit_der_Meldung_HH =_ArrayToString ($replaced1,@TAB,0,0)
    $Uhrzeit_der_Meldung_MM =_ArrayToString ($replaced1,@TAB,1,1)

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

    ;_ArrayToClip ($replaced3,1)

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


    </Array.au3></file.au3>

  • Dein geposteter Code kann gar nicht funktionieren, so unaufgeräumt wie er ist ... ;)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $File = "test.txt"

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

    Dim $aRecords
    If Not _FileReadToArray($File, $aRecords) Then
    MsgBox(4112,"Fehler!", ' Fehler: Datei ' & $File & ' konnte nicht in Array eingelesen werden!' _
    & @CRLF & & @CRLF 'Errorcode:' & @error)
    Exit
    EndIf
    Dim $arStrasse[1]
    $arStrasse[0] = 0
    Dim $arStadt[1]
    $arStadt[0] = 0
    For $z = 1 to $aRecords[0]
    If StringInStr($aRecords[$z], '/') Then
    $arLine = StringSplit($aRecords[$z], '/')
    _ArrayAdd($arStrasse, $arLine[3])
    _ArrayAdd($arStadt, $arLine[4])
    EndIf
    Next
    $arStrasse[0] = UBound($arStrasse)-1
    $arStadt[0] = UBound($arStadt)-1

    _ArrayDisplay($arStrasse, "$arStrasse")
    _ArrayDisplay($arStadt, "$arStadt")

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

    For $i = 1 To $arStrasse[0]
    MsgBox(4160, 'Strasse', $arStrasse[$i], 2)
    Next
    For $i = 1 To $arStadt[0]
    MsgBox(4160, 'Stadt', $arStadt[$i], 2)
    Next

    [/autoit]

    Gruß
    Greenhorn


  • hat nicht ganz funktioniert:

    #include <file.au3>vergessen

    trotzdem danke für die schnelle Hilfe! :thumbup:

    • Offizieller Beitrag

    Hi,
    schreib doch Strasse + Stadt in ein Array:

    [autoit]

    #include <file.au3>
    Dim $aRecords, $var
    If Not _FileReadToArray("test.txt",$aRecords) Then Exit MsgBox(4096,"Fehler", "Konnte Datei nicht in Array einlesen! error: " & @error)
    Dim $aAdresse[$aRecords[0]][2]

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

    For $i = 1 To UBound($aRecords) -1
    $var = StringSplit($aRecords[$i], '/')
    If Not @error Then
    $aAdresse[$i-1][0] = $var[3] ; Strasse
    $aAdresse[$i-1][1] = $var[4] ; Stadt
    EndIf
    Next

    [/autoit]
  • Hi,
    schreib doch Strasse + Stadt in ein Array:

    [autoit]

    #include Dim $aRecords, $var If Not _FileReadToArray("test.txt",$aRecords) Then Exit MsgBox(4096,"Fehler", "Konnte Datei nicht in Array einlesen! error: " & @error) Dim $aAdresse[$aRecords[0]][2] For $i = 1 To UBound($aRecords) -1 $var = StringSplit($aRecords[$i], '/') If Not @error Then $aAdresse[$i-1][0] = $var[3] ; Strasse $aAdresse[$i-1][1] = $var[4] ; Stadt EndIf Next

    [/autoit]

    Ja hab ich ja schon versucht.....

    hab aber noch folgendes Problem nach Stadt kommt noch ein oder mehrere Wörter (sorry falsch geposet :S )
    also nicht so: xyz/xyzxyzxyzx/Musterstraße 1/Musterstadt/xyz xyz yxz
    sondern ohne '/' am schluss so: xyz/xyzxyzxyzx/Musterstraße 1/Musterstadt xyz xyz yxz

    und zweites Problem: es ist nicht sicher ob die Straße/Stadt das 3. bzw. 4. Wort ist. Kann auch 4. und 5. Wort sein (aber immer in der Reienfolge Straße dann Stadt)

    • Offizieller Beitrag

    Also wenn die Position von STR und ORT unterschiedlich sein kann, brauchst du andere Kriterien für die Selektion.
    Was sind denn das für Daten davor und danach. Weisen die eine Struktur auf anhand der man sie eleminieren kann?
    Oder steht bei der Stadt evtl. auch die PLZ davor - dann könnte man den Ausdruck davor (STR) und den danach (ORT) selektieren.
    Besser ist, du postest mal einige dieser Einträge im Original, damit man sich ein Bild machen kann.

  • A/abc/Firmenname/Straße/stadt ein oder mehrer Wörter *12:00*

    A: unterschiedlicher einzelner Buchstabe (Großbuchstabe)
    abc: einzelnes Wort, immer unterschiedlich

    *12:00* : Uhrzeit

    • Offizieller Beitrag

    Hmm...
    jetzt weiß ich genau soviel, wie vorher :D.
    STR und ORT sind an derselben Position. Es ist doch egal wieviel WORTE davor sind. Wichtig ist, ob die Gruppierung durch / immer identisch ist.
    Und nach dem Ort folgt nur eine Uhrzeit? Dann gib mal genau an in welcher Schreibweise.
    Zier dich nicht wie ien alte Jungfer :rofl:, und poste mal einen Original-Datensatz (kannst die Werte ja verfälschen).

    • Offizieller Beitrag

    Hi, anhand der Originaldaten, die du mir per PN geschickt hattest, zeigt sich, dass die Struktur einheitlich ist.
    KENNUNG/KATEGORIE/FIRMA/STRASSE/STADT-Bemerkung-Zeit
    Ich habe berücksichtigt, dass evtl. keine Angaben in den einzelnen Gruppen vorhanden sein können, wie in einem Muster Datensatz.
    Da Angaben für Stadt durchaus mehrere Wörter enthalten können (Bad Homburg) läßt sich Stadt nicht eindeutig selektieren. In meiner Lösung 'hängt' eine evtl. Bemerkung noch am Städtenamen, Zeit ist eleminiert.

    [autoit]

    #include <file.au3>
    Dim $aRecords, $var
    If Not _FileReadToArray("test.txt",$aRecords) Then Exit MsgBox(4096,"Fehler", "Konnte Datei nicht in Array einlesen! error: " & @error)
    Dim $aAdresse[$aRecords[0]][2]

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

    For $i = 1 To UBound($aRecords) -1
    $var = StringSplit($aRecords[$i], '/')
    If Not @error Then
    $aAdresse[$i-1][0] = $var[4] ; Strasse
    $aAdresse[$i-1][1] = StringTrimRight($var[5], StringLen($var[5])-StringInStr($var[5], '*')+1 ) ; Ort + Bemerkung
    EndIf
    Next

    [/autoit]

    EDIT: Noch mal kpl. geändert. Das RegEx Pattern funktioniert unter AutoIt leider nicht so, wie im RegExBuddy.

  • wie kann ich das jetzt anzeigen ?

    mit "_ArrayDisplay($aAdresse, "$aAdresse")" funktioniert s nicht

  • ich habs so:

    [autoit]

    #include
    #include

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

    $File = "test.txt"

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

    Dim $aRecords
    If Not _FileReadToArray($File, $aRecords) Then
    MsgBox(4112,"Fehler!", ' Fehler: Datei ' & $File & ' konnte nicht in Array eingelesen werden!' _
    & @CRLF & & @CRLF 'Errorcode:' & @error)
    Exit
    EndIf

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

    Dim $arStrasse[1]
    $arStrasse[0] = 0
    Dim $arStadt[1]
    $arStadt[0] = 0

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

    ;_ArrayDisplay($aRecords,"$aRecords")

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

    For $z = 1 to $aRecords[0]
    If StringInStr($aRecords[$z], '/') Then ; StringInStr ( "string", "substring" [, casesense [, occurance]] )
    $arLine = StringSplit($aRecords[$z], '/') ; StringSplit ( "string", "delimiters" [, flag ] )

    ;_ArrayDisplay($arLine,"$arLine")


    _ArrayAdd($arStrasse, $arLine[4]) ;_ArrayAdd ( $avArray, $sValue )
    _ArrayAdd($arStadt, $arLine[5])


    EndIf
    Next
    ;------------------------------------Stadtname- löscht alles nach Stadt-----------------------------------------------------------

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

    $replaced2= StringRegExp ($arLine[5],"\w+",1) ;nur erstes wort (erstes suchergebnis)

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

    ;--------------------------------------------------------------------------------------------------------

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

    _ArrayDisplay($replaced2, "$replaced2 Stadtname")
    $Stadtn =_ArrayToString ($replaced2,@TAB,-2,2)
    _ArrayDisplay($arStrasse, "$arStrasse")
    $Strassenn =_ArrayToString ($arStrasse,@TAB,1,1)

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

    MsgBox(4160, 'Stadt', $Stadtn)

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

    MsgBox(4160, 'Strasse', $Strassenn)

    [/autoit]

    zeigt aber bei $stadtn nix an</file.au3></Array.au3> ?(

    • Offizieller Beitrag

    Irgendwo ein Schreibfehler?
    Ich hatte zum Test ein Array erstellt, also nach dem Schritt _FileReadToArray() begonnen.
    Da klappte es tadellos.

    Hier mal mein funktionierendes Muster:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $aRecords[4] = [ _
    0, _
    'BLA/KAT1/Firma1/Strasse1/Ort1 Bemerkung1 * zeit *', _
    'BLUB/KAT2/Firma2/Strasse2/Ort2 Bemerkung2 * zeit *', _
    'BLI/KAT3/Firma3/Strasse3/Ort3 Bemerkung3 * zeit *']
    Dim $var
    ;~ If Not _FileReadToArray("test.txt",$aRecords) Then Exit MsgBox(4096,"Fehler", "Konnte Datei nicht in Array einlesen! error: " & @error)
    ;~ Dim $aAdresse[$aRecords[0]][2]
    Dim $aAdresse[3][2]

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

    For $i = 1 To UBound($aRecords) -1
    $var = StringSplit($aRecords[$i], '/')
    If Not @error Then
    $aAdresse[$i-1][0] = $var[4] ; Strasse
    $aAdresse[$i-1][1] = StringTrimRight($var[5], StringLen($var[5])-StringInStr($var[5], '*')+1 ) ; Ort + Bemerkung
    EndIf
    Next
    _ArrayDisplay($aAdresse)

    [/autoit]
  • wie kann ich das array anzeigen, bzw. in string umwandeln?

    [autoit]

    $replaced2= StringRegExp ($arLine[5],"\w+",1) ;nur erstes wort (erstes suchergebnis)

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

    ArrayDisplay($replaced2, "$replaced2 Stadtname")
    $Stadtn =_ArrayToString ($replaced2,@TAB,0,2)
    MsgBox(4160, 'Stadt', $Stadtn)

    [/autoit]
    • Offizieller Beitrag

    Ich versteh nicht, warum du Strasse und Stadt in unterschiedlichen Arrays führen willst. Zusammengehörige Daten sollten auch zusammen gespeichert werden.

    Wenn du einzelne Arraydaten anzeigen möchtest, mußt du die Elemente einzeln ansprechen.

    [autoit]

    For $i = 0 To UBound($array) -1
    MsgBox(0, '', 'Wert an Position ' & $i & ': ' & $array[$i])
    Next

    [/autoit]


    Ein 2D-Array mit 2 Spalten gibst du so wieder:

    [autoit]

    For $i = 0 To UBound($array) -1
    MsgBox(0, '', 'Wert an Position ' & $i & ', Spalte 1: ' & $array[$i][0] & @CRLF & _
    'Wert an Position ' & $i & ', Spalte 2: ' & $array[$i][1])
    Next

    [/autoit]

    Hilfe zu Arrays findest du hier