![]() |
Bestimmte Zahlen aus einem String auslesen
Hallo an Alle,
Ich schmücke meinen ersten Post in diesem Forum direkt mal mit einer kleinen Frage aus. Ich möchte eine Zahl aus einem String auslesen (das ist mir soweit auch gelungen). Nun besteht aber das kleine Problem, dass nur die erste Zahl ausgelesen werden soll und alle anderen Zahlen ignoriert werden sollen. Ein Beispiel wäre folgendes: 15, Hauptstraße / NRW14 Die 15 stellt die Hausnummer da, "Hauptstraße" eben den Straßennamen und "NRW14" zum Beispiel einen kleinen Bezirk. Ich möchte mir lediglich die 15 als Hausnummer ausgeben lassen. Ich habe das momentan mit "CharIsDigit" gelöst, nur da besteht eben das Problem, dass er mir alle Zahlen ausgibt und hintereinander stellt ( die Ausgabe von oben genannten Beispiel ist demnach: "Hausnummer: 1514") Eine Logik habe ich bereits ( er soll mir nur die erste Zahl, die ausgelesen wird, als Hausnummer ausgeben und die andren ignorieren), jetzt hänge ich aber an der Realisierung dieser Logik. :wall: Wie (bzw. mit welchem Befehl) führe ich das am bestmöglichsten aus? |
Re: Bestimmte Zahlen aus einem String auslesen
Position der 1.Ziffer suchen und anschliessend die erste Nichtziffer suchen.
Oder mit Hilfe eines regulären Ausdrucks |
Re: Bestimmte Zahlen aus einem String auslesen
Nimm dir ne Schleife, geh den String durch, bis du bei der ersten Ziffer bist, merk dir die Position, geh weiter, bis du an einer Nicht-Ziffer (oder dem Ende des Strings) angekommen bist und schneid alles dazwischen mit
![]() |
Re: Bestimmte Zahlen aus einem String auslesen
Ok, diese Vorgehensweise ist klar. Bei mir hackt es momentan aber noch ein wenig an der Erfahrung mit welchen Befehlen ich das mache.
Wie gehe ich denn jetzt den String durch un merke mir die Stellen mit Zahlen? Ein kleines Codebeispiel wäre vllt nicht verkehrt. (Tut mir leid, ich bin momentan ein wenig schwer von Begriff^^) |
Re: Bestimmte Zahlen aus einem String auslesen
Zitat:
Delphi-Quellcode:
Also wenn du nur zweistellige Hausnummern hast sollte das ausreichen...
Ausgabe := DeinString[1]+DeinString[2];
|
Re: Bestimmte Zahlen aus einem String auslesen
Zitat:
Das Problem ist aber dabei, dass ich nicht nur eine Adresse habe, sondern weitaus mehr. Und zusätzlich sind da hausnummern dabei, die 3stellig sind, mit "-" verbunden sind oder erst hinter der Adresse stehen. Es gibt dazwischen halt Ausnahmen, welche ich rausfiltern möchte. |
Re: Bestimmte Zahlen aus einem String auslesen
Mal auf die Schnelle dahergetippt:
Delphi-Quellcode:
Wer mag, darf gerne korrigieren/optimieren ;)
function FirstNumber(const sText: string): string;
var i,j: integer; begin SetLength(Result, Length(sText)); j := 0; i := 1; while (i <= Length(sText)) and not(sText[i] in ['0'..'9']) do inc(i); while (i <= Length(sText)) and (sText[i] in ['0'..'9']) do begin inc(j); Result[j] := sText[i]; inc(i); end; SetLength(Result,j); end; [edit] Hab selbst schon was gefunden und korrigiert. [/edit] |
Re: Bestimmte Zahlen aus einem String auslesen
na erstmal suchst du dir die 1. Zahl und von da ausgehend suchst du nahch dem nächsten Nicht-Zahl-Zeichen und in diesem Bereich befindet sich die Zahl.
Delphi-Quellcode:
z.B. jeweil über 'ne Schleife suchen
if (s[i] >= '0') and (s[i] <= '9') then Zahl_gefunden... // oder if s[i] in ['0'..'9'] then Zahl_gefunden... if (s[i2] < '0') or (s[i2] < '9') then keine_Zahl_mehr... // oder if (s[i2] in ['0'..'9']) then keine_Zahl_mehr... // und dann Zahl := Copy(s, i, i2 - i); Ist die Zahl eigentlich immer das Erste, oder kann davor noch etwas außerLeerzeichen vorkommen. Was ist bei Hausnummern mit Zusatz? (z.B. 10a) |
Re: Bestimmte Zahlen aus einem String auslesen
Hallo,
eine kleine Anmerkung, was wenn jemand in Hausnummer 15a wohnt. Währe es da nicht ratsam auch den ersten Buchstaben mitzunehmen wenn er direkt einer Zahl folgt? Grüße Klaus |
Re: Bestimmte Zahlen aus einem String auslesen
Sicherlich, das kann man ja noch verfeinern/erweitern.
|
Re: Bestimmte Zahlen aus einem String auslesen
Delphi-Quellcode:
Das wäre meine Lösung ;). Ist etwas anders als die von Deddy. Ist relativ einfach und etwas kürzer als Deddys Methode :).
function GetFirstNumber(s : string) : string;
var i : Integer; begin for i := 1 to Length(s) do if s[i] in ['0' .. '9'] then Result := Result + s[i] else if Result <> '' then Break; end; |
Re: Bestimmte Zahlen aus einem String auslesen
Dafür habe ich break und Stringkonkatenation vermieden ;)
|
Re: Bestimmte Zahlen aus einem String auslesen
Aber die Bedingung bei Deinen IF Statements liest sich grauenhaft :P.
[EDIT]Uuups ... das war ja gar nicht Deddy. Das war Himitsu mit dem "<= '9'" ;).[/EDIT] |
Re: Bestimmte Zahlen aus einem String auslesen
Wenn die Hausnummer immer als Erstes steht und sich sonst nix Schlimmes davor befindet,
dann vielleicht so (incl. anhängender Buchstaben)
Delphi-Quellcode:
Falls keine Leerzeichen und Co. davor vorkommen können, dann kann die Zeile mit dem Trim entfallen.
function GetFirstNumber(s : String) : String;
var i : Integer; begin s := Trim(s); i := 0; while (i < Length(s)) and (s[i + 1] in ['0'..'9', 'a'..'z', 'A'..'Z']) do inc(i); Result := Copy(s, 1, i); end; |
Re: Bestimmte Zahlen aus einem String auslesen
Wenn das immer in dem Format 15, Hauptstraße / NRW14 kommt, dann würde ich das hier nehmen
Delphi-Quellcode:
cu
function GetHausnummer( Anschrift : string ): string;
var PosKomma : integer; begin PosKomma := Pos( ',', Anschrift ); if PosKomma > 1 then Result := copy( Anschrift, PosKomma - 1 ) else Result := ''; end; Oliver |
Re: Bestimmte Zahlen aus einem String auslesen
Das mit dem Format ist ja die große Frage ;) Ich würde den String-Parameter übrigens als const übergeben.
|
Re: Bestimmte Zahlen aus einem String auslesen
Was haltet ihr eigentlich von der alten Pascal-Funktion val?
|
Re: Bestimmte Zahlen aus einem String auslesen
Zitat:
|
Re: Bestimmte Zahlen aus einem String auslesen
Zitat:
Delphi-Quellcode:
function GetHausnummer(Anschrift : string) : string;
begin Result := Copy(Anschrift, 1, Pos(',', Anschrift)-1); end; |
Re: Bestimmte Zahlen aus einem String auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz