Datei einlesen und nur Zahlen übernehmen



  • Hallo,

    in meinem Programm wird eine Datei mit Spalten/Feldern eingelesen. Eine Spalte (25 Zeichen lang) enthält Buchstaben und Zahlen.Ich möchte in meine Datenbank nur die ersten Zahlen aus der Spalte einlesen.

    Beispiel

    "70833 " ->70833
    "70834 Stuttgart " ->70834
    "70983 Stuttgarter Str. 14" ->70983

    Wie kann kann man das steuern?

    Gruß

    Alex



  • // Ach ja... Kommentare @junix......
    StrNew=""; // Variable StrNew (AnsiString) wird geleert.
    for (int a=1; a<=9 && a<=StrOld.Length(); a++) //Schleife, die maximal 9-mal durchläuft
       if ('9'>=StrOld[a] && StrOld[a]>='0')  /* Wenn Ascii-Zeichen für '9' größergleich ist als aktuelles Zeichen von StrOld (ebenfalls AnsiString) und aktuelles Zeichen von StrOld größergleich Ascii-Zeichen für '0',... */
          StrNew+=StrOld[a]; //... dann addiere aktuelles Zeichen von StrOld zu StrNew hinzu.
    ShowMessage(StrNew); // Gibt das Ergebnis in einer MessageBox aus.
    


  • Einfach die ersten 5 Zeichen jeder Zeile auslesen (AnsiString::SubString)!?



  • Nein, er will schließlich nur Zahlen einlesen, und wenn dort statt 123456 eben D-123456 steht, soll er auch nur die Zahlen nehmen.



  • Äh Windoof, wenn du schon fertige Quelltexte postest, solltest du vielleicht shcon auch dafür sorgen, dass die dinger kommentiert sind und auch funktionieren wie sie sollten...

    -junix



  • Klugscheisser! 😉
    Probier "D-12345" doch mal mit deinem Beispiel-Code aus ... ooops. 🙂

    Selbstverständlich gehe ich davon aus, dass jede Zeile immer mindestens die PLZ beinhaltet und auch immer mit dieser beginnt, so wie die Beispieleinträge von Alexbrodi andeuten.

    Nachtrag: Mit "Klugscheisser" ist natürlich nicht junix gemeint. 🙂



  • Jansen schrieb:

    Nachtrag: Mit "Klugscheisser" ist natürlich nicht junix gemeint. 🙂

    Natürlich nicht, wie könntest du auch. Aber scheinbar macht es euch beiden Spaß Benutzer zu beleidigen. Naja, zumindest macht es _dir_ Spaß. Was den Inhalt angeht @junix, so muss ich sagen, dass ich nichts dafür kann, dass beim AnsiString der Operator "+=" nicht voll funktioniert. Man könnte natürlich auch hinschreiben "StrNew=StrNew+StrOld[a]". Ansonsten nochmal zu Jansen: Postleitzahlen bestehen nicht immer nur aus Zahlen, sondern sie beginnen eben manchmal auch mit "D-" und weil er sagte, dass er _nur_Zahlen haben will, habe ich das eben nicht mit SubString gemacht, zumal Postleitzahlen auch unterschiedlich lang sind. Und wenn's nicht reicht, nimmst halt statt "for (int a=1;a<=6 && a<=StrOld.Length(); a++)" eben "for (int a=1;a<=9 && a<=StrOld.Length(); a++)".



  • Hör mal zu, Windoofi... Wenn du hier Code Postest, sollte es eigentlich schon dein Ehrgefühl von dir verlangen, dass der Code korrekt ist, und icht einfach "muah, kann ja nix dafür, dass da was nicht richtig funktioniert". Der +=-Operator funktioniert tipp topp gemäss Spezifikation.

    Ahja mich würd noch interessieren wo hier benutzer beleidigt werden? Jansen hat dich nur etwas vom hohen ross geholt, indem er deinen Code (der übrigens erheblich mehr am Ziel vorbei geht, bzw. die grösseren Fehler produziert, wenn "D-" vor der Postleitzahl hängt) kritisiert hat, wie du es dir erlaubt hast an seinem Vorschlag kritik zu üben.

    Dein Ansatz ist so oder so fatal.... du sagst ja selber, dass Postleitzahlen unterschiedlich lang sein könnten. Also wie zum Teufel kommst du auf die blöde idee eine fixe anzahl Zeichen in der schleife zu überprüfen?

    (das war jetzt im Ansatz beleidigend... aber das hast du dir selber eingebrockt)

    -junix



  • junix schrieb:

    Dein Ansatz ist so oder so fatal.... du sagst ja selber, dass Postleitzahlen unterschiedlich lang sein könnten. Also wie zum Teufel kommst du auf die blöde idee eine fixe anzahl Zeichen in der schleife zu überprüfen?

    Ganz einfach: Es gibt eine Maximale Größe von Postleitzahlen, die nämlich genau 9 Zeichen beträgt. Oder hast du schonmal ne Postleitzahl gesehen, die größer ist? - Wenn ja, dann sinds halt ein paar mehr Zeichen, was soll's. Stellst halt statt 9 mehr ein. Jedenfalls ist das genauer und kürzer als SubString.



  • ...genau... die 5 Zeilen sind auf jeden Fall kürzer als SubString... *lol*
    Und deine Postleitzahlen-Theorie ist ja nett aber was ist mit einer kürzeren? Aber natürlich... n paar mehr Zeichen... ok... Ich setz einfach mal auf 12 Zeichen, nu hab ich aber folgende Angabe:

    3000 Bern 1
    1 3 5 7 9 11
     2 4 6 8 10
    

    ich würde mal sagen, deine Routine hatplötzlich eine PLZ 30001... toll ne? Siehs ein, dein Code ist nicht zu Ende gedacht. Das wurde hier jetzt festgestellt, und damit sollte die Diskussion beendet sein.

    Was dir jetzt bleibt sind folgende Möglichkeiten: Du lässt es dabei bewenden (würde ich dir zumindest anraten), oder du bringst eine korrigierte Version. Aber versuch nicht andauernd den mangelhaften Code "korrektzuquatschen", das nervt.

    -junix


Anmelden zum Antworten