AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Strassenname, Hausnummer und Zusatz trennen!?
Thema durchsuchen
Ansicht
Themen-Optionen

Strassenname, Hausnummer und Zusatz trennen!?

Ein Thema von pumpe · begonnen am 1. Aug 2006 · letzter Beitrag vom 3. Jun 2009
 
Piethan

Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
 
Delphi XE Architect
 
#20

Re: Strassenname, Hausnummer und Zusatz trennen!?

  Alt 3. Jun 2009, 15: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.
Angehängte Dateien
Dateityp: pas minitools_866.pas (2,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz