AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Zitat:
Anfangen müsstest du mit der Beschreibung, was geht rein und was soll rauskommen. Also eventuell so?
Delphi-Quellcode:
Eine simple konkrete Klasse wäre dann z.B.
type
TPhoneNumberResolver = class abstract public function GetPersonFrom( const APhoneNumber : string ) : string; virtual; abstract; end;
Delphi-Quellcode:
Je nachdem wie gut deine Programmierkenntnisse voranschreiten, kannst du die konkrete Ableitung noch verbessern oder eine neue, raffiniertere zusammenbauen.
type
TSimplePhoneNumberResolver = class( TPhoneNumberResolver ) private FPhoneNumberStrings : TStrings; public constructor Create( APhoneNumberStrings : TStrings ); destructor Destroy; override; function GetPersonFrom( const APhoneNumber : string ) : string; override; end; constructor TSimplePhoneNumberResolver.Create( APhoneNumberStrings : TStrings ); begin inherited Create; FPhoneNumberStrings := TStringList.Create; FPhoneNumberStrings.Assign( APhoneNumberStrings ); end; destructor TSimplePhoneNumberResolver.Destroy; begin FPhoneNumberStrings.Free; inherited; end; function GetPersonFrom( const APhoneNumber : string ) : string; begin Result := FPhoneNumberStrings.Values[APhoneNumber]; end; Deine Anwendung selber bleibt aber gleich, denn die spricht nur die abstrakte Klasse an und der Aufruf bleibt gleicht ;) |
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Und hier eine Klasse, die Telefonnummern in Abhängigkeit des Kontexts normalisiert und vergleicht
Delphi-Quellcode:
UPDATE
type
TPhoneContext = record IntlPrefix : string; IntlNumber : string; NatPrefix : string; NatNumber : string; end; const MunichPhoneContext : TPhoneContext = ( IntlPrefix : '00'; IntlNumber : '49'; NatPrefix : '0'; NatNumber : '89' ); type TPhoneNumberComparer = class private FContext : TPhoneContext; function NumberClearing( const Number : string ) : string; public property Context : TPhoneContext read FContext write FContext; function NormalizeNumber( const Number : string ) : string; function IsSameNumber( const Number1, Number2 : string ) : Boolean; end; { TPhoneNumberComparer } function TPhoneNumberComparer.IsSameNumber( const Number1, Number2 : string ) : Boolean; begin Result := NormalizeNumber( Number1 ) = NormalizeNumber( Number2 ); end; function TPhoneNumberComparer.NormalizeNumber( const Number : string ) : string; begin Result := NumberClearing( Number ); if Result.StartsWith( '+' ) then Result := Context.IntlPrefix + Result.Substring( 1 ); if Result.StartsWith( Context.IntlPrefix + Context.IntlNumber ) then begin Result := Context.NatPrefix + Result.Substring( Length( Context.IntlPrefix + Context.IntlNumber ) ); end; if Result.StartsWith( Context.NatPrefix + Context.NatNumber ) then begin Result := Result.Substring( Length( Context.NatPrefix + Context.NatNumber ) ); end; end; function TPhoneNumberComparer.NumberClearing( const Number : string ) : string; var LIdx : Integer; LChar : Char; begin Result := ''; for LIdx := 0 to Number.Length - 1 do begin case Number.ToUpper.Chars[LIdx] of 'A', 'B', 'C' : LChar := '2'; 'D', 'E', 'F' : LChar := '3'; 'G', 'H', 'I' : LChar := '4'; 'J', 'K', 'L' : LChar := '5'; 'M', 'N', 'O' : LChar := '6'; 'P', 'Q', 'R', 'S' : LChar := '7'; 'T', 'U', 'V' : LChar := '8'; 'W', 'X', 'Y', 'Z' : LChar := '9'; '+', '0' .. '9' : LChar := Number.Chars[LIdx]; else LChar := #0; end; if LChar <> #0 then Result := Result + LChar; end; end; Jetzt frisst das Teil eigentlich (fast) alles
Code:
Diese (komischen) Konstrukte
NormalizeNumber:
+49 89 BEIL => 2345 +49 89 2345 => 2345 (089) 2345 => 2345 +48 89 234-5 => 0048892345
Code:
frisst er nicht (mag er auch nicht) ;)
+49 (089) 2345
|
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Wow! :shock:
Danke das du dir soviel Arbeit gemacht hast SirRufo. :thumb: Ich werde mich am Wochenende daran begeben, deinen Code in mein Programm zu integrieren. |
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
So wie ich mitbekommen habe, werden die nationalen Rufnummern auf Ortskennzahlenprefix, Ortskennzahl und Rufnummer normalisiert. Früher (bis 5.**?) wurde die OKZ weggelassen, wenn der Gesprächspartneer die selbe hatte. Bei internationalen Nummern weiß ich es nicht. Sir Rufos Klasse könnte bei der Wählhilfe sehr interessant sein.
|
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Zitat:
Du hast beim Telefon sogenannte Exitcodes. Exitcode für die Stadt = 0 Exitcode für die Nation = 00 dahinter wählt man dann die Nummer des Länder Knotens+Statdtknoten oder die Nummer des Stadtknotens. Leider gibt es dann noch Mobilfunknetze die gelten als eigene stadt. In Europa ist das mit den Exit codes auf 0 und 00 genormt, aber es gibt Ausnahmen In Italien wurden die Rufnummern knapp. Also hat man dort die 0+Vorwahl in die telefonnummer integriert. Es gibt da keine Stadt Vorwahlen mehr. Ruft man in Südtirol an muss die 0 nach der Vorwahl für Italien mit angewählt werden. Es wird lustiger. Wenn du in den USA bist, ist 00 nicht der nationale exit code sondern 011. Bei Kuba ist es 119 Wenn man von den USA aus bestimmte britische Inseln in der Caribik anrufen will. muss man wiederum kein internationales gespräch führen. In den USA ist außerdem der exit code für die Stadt, von Ort zu Ort verschieden. Telefonieren ohne Standort Informationen geht nicht. |
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Hast Du dafür Quellen?
das sind sehr interessante Informationen. Gruß K-H |
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Zitat:
Aber es gibt diverse Quellen die man findet, wenn man in Google danach sucht. Also es ist einfacher Belege für die Richtigkeit dessen was ich schrieb zu finden, als das von null an zu recherchieren. Also quellen für alles? Such selbst! Wenn dich eine bestimmte Sache interessiert , könnte ich dir evtl helfen. |
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Zur Rufnummeranzeige hab ich dies gefunden: http://www.ip-phone-forum.de/showthread.php?t=126270
|
AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Da hat sich aber einiges getan.
Falls jemand auch einen Einstieg sucht Wikipedia oder World telephone numbering guide Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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