PLZ aus String in neue Variable speichern



  • Nein.

    Die Struktur der Textdatei ist folgende.

    1
    a
    b
    c
    d
    ...
    2
    a
    b
    c
    d
    ...
    3
    ...

    Sie ist mehr oder minder allgemeingültig. Es gibt je doch Ausnahmesituationen.



  • bin jetzt auf die Idee gekommen, reguläre Ausdrücke für die PLZ zu benutzen.

    " "[0-9]{5}" "
    ist das ein allgemeingültiger Ausdruck, der in meinem Fall die PLZ darstellt und sich mittels Leerzeichen von den anderen abgrenzt?

    Wie müsste ich das nun benutzen, um aus meinem String s den Substring für die PLZ zu bekommen?
    Muss ich den String vorher in ein int umwandeln? Wenn ja, wie?

    Fragen über Fragen ^^



  • Könnte wirklich kompliziert werden..

    Erstmal würde ich die Ganze Datei in Substrings zerlegen
    und dann versuchen mit email etc in einzelne Datensätze zu trennen.
    (kann halt je nach Vollständigkeit schwierig werden)

    Im Zweifelsfall eine Rückfrage an den Benutzer ob an der betreffenden Stelle
    tatsächlich ein neuer Datensatz beginnt..

    Innerhalb der Datensätze muss dann viel Logik ins Spiel kommen.
    Pseudocode:
    Alles was vor [tel] und/oder [internet] und/oder ... in substring [adresse] speichern

    Die [adresse] dann wiederum logisch auswerten.
    Wie man eine 4/5 stellige Zahl erkennt weisst Du ja nun,
    demnach kannst Du ermitteln was vor und was hinter der Zahl ist..

    Fehlen zb die PLZ + Hausnummer hast Du immerhin [Adresse]
    wobei Du nicht sicher sein kannst was Strasse und was Ort ist.
    Du benutzen die grossen Internetfirmen dann Lookup-Table
    also Tabellen in denen sie prüfen ob ein Wort ein Stadtnahme ist..
    ..ggf benutzen die sowas auch für Strassennahmen in Orten.

    Nur der vollstdändigkeithalber:
    Wenn Du das Alles gewuppt hasst - ggf. mit Unicode auseinandersetzen,
    in Deutschland klappt das mit den Zeichen noch recht gut,
    sobald aber Arabisch/Russisch/Chinesisch miteinfliessen
    kann es sonst zu Problemen führen.



  • Kalif schrieb:

    bin jetzt auf die Idee gekommen, reguläre Ausdrücke für die PLZ zu benutzen.

    " "[0-9]{5}" "
    ist das ein allgemeingültiger Ausdruck, der in meinem Fall die PLZ darstellt und sich mittels Leerzeichen von den anderen abgrenzt?

    Wie müsste ich das nun benutzen, um aus meinem String s den Substring für die PLZ zu bekommen?
    Muss ich den String vorher in ein int umwandeln? Wenn ja, wie?

    Fragen über Fragen ^^

    Jetzt begibst Du Dich auf wirklich kompliziertes Terrain 😃

    Bist du mit RegExp vertraut oder ist das Neuland für Dich ?
    Die Frage mit int Umwanldung hängt davon ab ob Du Unicode benutzt..
    aber das hätte eigentlich schon vorher zu Kollisionen führen müssen.



  • ja, die Adresse hab ich jetzt als Substring (Format: Straße Nr PLZ Ort).

    Ich weiß, wie ich eine 4/5 stellige Zahl erkenne???
    Meinst du mit dem regulären Ausdruck, den ich da genannt habe?

    Wie muss ich das im Code denn schreiben?

    auch mit s.find(..,..), wie es bei Emai gemacht habe?

    kannst du nicht mal bitte die Codezeile(n) dafür aufschreiben?



  • Dafür hatte ich Dir eigentlich die Befehle genannt,
    die so auch in der MFC existieren.

    RegExp gibts nur über Umwege (soweit mir bekannt)
    zb Boost aber MS hat da glaubich auch was im Netz zu..

    Im Prinzip ist die MFC dafür da sowas wie RegExp lesbarer zu machen..

    Und mit dem Beispielcode tu ich mich "etwas" schwer
    weil mir aus der Beschreibung immer noch nicht ersichtlich ist
    wie die Daten tatsächlich vorliegen 😞



  • Das ist ja gerade erstmal nicht so wichtig.

    Ich hab ja schon diesen Substring[Adresse]: Lobdengaustraße 13 69493 Hirschberg

    Ich will ja erstmal nur die PLZ aus diesem Substring raushaben, egal wie.



  • Vielleicht guckst Du Dir nochmal die Befehle an
    die ich dir aufgelistet habe,
    wie ich oben schon schrieb gibts auch noch andere Möglichkeiten.
    (zb Tokenize)

    Das Problem ist einfach wenn Du nicht verstehst was Du da machst
    kommst Du nach der PLZ ja auch nicht weiter 😕



  • Ich muss danach ja auch nicht weiter. Ich will ja nur die PLZ, alles andere hab ich ja schon.

    Kann ich reguläre Ausdrücke oder diese Token auch mit s.find() einsetzen?



  • Da hast du es doch schon fast:

    Kalif schrieb:

    int begin=s.find("E-Mail: ",0)+8;
    int end=s.find(" Internet:",0);
    subEmail=s.substr(begin,end-begin);

    Der zweite Parameter bei find gibt an, ab welcher Stelle er suchen soll.

    - Lies eine Zeile ein.
    - Dann such nach dem ersten Leerzeichen (int begin=s.find(" ",0); )
    - Such nach dem zweiten Leerzeichen (int end=s.find(" ", begin+1); )
    - Lies den Substring dazwischen aus (sub=s.substr(begin,end-begin); )
    - Überprüfe mit Length(), ob der Substring 5stellig ist.
    - Falls ja, dann überprüfe jede der 5 Stellen, ob es eine Zahl ist (mit IsDigit() oder 0<=Zeichen_an_jeder_der_5_Stellen<=9).
    - Falls ja, dann ist es schon sehr wahrscheinlich eine Postleitzahl, könnte aber auch eine Telefonnummer sein, dann könntest du z.B. überprüfen, ob zwei Stellen vor diesem Substring eine ) steht (wie bei der Vorwahl) oder sonst noch weitere Kriterien überprüfen, die eine PLZ ausschliessen.
    - Mach das für alle Substrings zwischen zwei Leerzeichen für die gesamte Zeile.

    Geht aber sicherlich auch eleganter!
    P.S.:
    Alles ungetestet aus dem Kopf, kann Spuren von Fehlern enthalten.


Anmelden zum Antworten