Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
Delphi XE Architect
|
Re: Strassenname, Hausnummer und Zusatz trennen!?
3. Jun 2009, 16:45
Hallo Jürgen Thomas,
Danke für deine Prozedure. Ich habe diese für mein Programm in eine Funktion gepackt und mit
einen Rückgabetypen TAdresse = record versehen.
LG
Dirk
Delphi-Quellcode:
{
Diese Unit lehnt sich an den Beitrag von Jürgen Thomas an. Ich habe
diese Funktion eigentlich nur um einen eigenen Rückgabetypen
TAdresse erweitert und in eine eigene Unit gepackt. Daher
Danke an Jürgen Thomas.
Quelle : [url]http://www.delphipraxis.net/topic88990,0,asc,0.html[/url]
Dirk Piethan
03.06.2009
}
unit minitools;
interface
uses SysUtils;
type TAdresse = record
STRASSE : STRING;
HAUSNUMMER : INTEGER;
ZUSATZ : STRING;
POSTFACH : STRING;
end;
function Strasse_to_Details( sQuelle: string): TAdresse;
implementation
function Strasse_to_Details( sQuelle: string): TAdresse;
var
c0: char;
s0, s1, s2: string; i0, iNrLaenge: integer;
bNummer: boolean;
sStrasse: string;
iNr: integer;
sZusatz: string;
sPostfach: string;
begin
sStrasse := ' ';
sZusatz := ' ';
sPostfach := ' ';
iNr := 0;
// um unterschiedliche Schreibweisen abzufangen
s0 := AnsiLowerCase(sQuelle);
// Postfach herausholen
s1 := Copy( s0, 1, 8);
s2 := Copy( s0, 1, 2);
if ( (s1 = ' postfach') or (s2 = ' pf') ) then
begin
// Startposition der Nummer suchen
i0 := 0;
repeat
Inc(i0);
until s0[i0] in [' 0'..' 9'];
// beim nächsten Befehl mache ich es mir einfach: max. 6 Ziffern + 2 Leerzeichen
sPostfach := Copy(s0, i0, 8);
end
else begin
// jetzt fehlt die Prüfung, ob überhaupt eine Hausnummer enthalten ist
// oder in den o.g. Fällen 3 und 5 fehlt
// endet die Quelle mit einer Ziffer?
i0 := Length(s0);
bNummer := s0[i0] in [' 0'..' 9'];
// nein: Zusatz herausholen
if ( not bNummer) then
begin
repeat
Dec(i0);
until s0[i0] in [' 0'..' 9'];
// bei der Länge des Zusatzes mache ich es mir einfach; aber es könnte auch
// Situationen geben wie " a Wohnung 03-44", aber das hängt auch davon ab,
// was die Ziel-Datenbank vorsieht
// [/edit]muss vom Original genommen werden
sZusatz := Copy(sQuelle, i0+1, 15);
end;
// jetzt steht i0 auf der letzten Ziffer der Hausnummer
iNrLaenge := 0;
repeat
Dec(i0);
Inc(iNrLaenge);
until not (s0[i0] in [' 0'..' 9']);
// StrToInt führt z.B. bei leerem String zu Exception
try
iNr := StrToInt( Copy(s0, i0+1, iNrLaenge));
except
iNr := 0;
end;
// Rest ist Straße
// [/edit]muss vom Original genommen werden
sStrasse := Copy(sQuelle,1,i0);
Result.STRASSE:=sStrasse;
Result.HAUSNUMMER:=iNr;
Result.ZUSATZ:=sZusatz;
Result.POSTFACH:=sPostfach;
end;
end;
end.
|
|
Zitat
|