Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anrufmonitor --> Einer Rufnummer den Namen zuordnen (https://www.delphipraxis.net/179484-anrufmonitor-einer-rufnummer-den-namen-zuordnen.html)

Sir Rufo 12. Mär 2014 08:03

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
 
Zitat:

Zitat von ringli (Beitrag 1251594)
Zitat:

Zitat von Sir Rufo (Beitrag 1251497)
:shock: Controls sind zum Anzeigen von Daten gedacht und nicht als Datenspeicher!

Ja weiß ich. Deswegen habe ich ja nach einer cleveren Lösung gefragt obwohl die Möglichkeiten des Grids ja wirklich verlockend sind... :oops:

Na dann bau dir doch da einfach was ...

Anfangen müsstest du mit der Beschreibung, was geht rein und was soll rauskommen.

Also eventuell so?
Delphi-Quellcode:
type
  TPhoneNumberResolver = class abstract
  public
    function GetPersonFrom( const APhoneNumber : string ) : string; virtual; abstract;
  end;
Eine simple konkrete Klasse wäre dann z.B.
Delphi-Quellcode:
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;
Je nachdem wie gut deine Programmierkenntnisse voranschreiten, kannst du die konkrete Ableitung noch verbessern oder eine neue, raffiniertere zusammenbauen.

Deine Anwendung selber bleibt aber gleich, denn die spricht nur die abstrakte Klasse an und der Aufruf bleibt gleicht ;)

Sir Rufo 12. Mär 2014 08:39

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
 
Und hier eine Klasse, die Telefonnummern in Abhängigkeit des Kontexts normalisiert und vergleicht
Delphi-Quellcode:
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;
UPDATE
Jetzt frisst das Teil eigentlich (fast) alles
Code:
NormalizeNumber:
+49 89 BEIL => 2345
+49 89 2345 => 2345
(089) 2345 => 2345
+48 89 234-5 => 0048892345
Diese (komischen) Konstrukte
Code:
+49 (089) 2345
frisst er nicht (mag er auch nicht) ;)

ringli 12. Mär 2014 18:40

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.

Garfield 14. Mär 2014 07:10

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.

QuickAndDirty 14. Mär 2014 13:04

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
 
Zitat:

Zitat von Garfield (Beitrag 1251965)
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.

Internationale telefonieren ist super übel.

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.

p80286 14. Mär 2014 14:42

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
 
Hast Du dafür Quellen?
das sind sehr interessante Informationen.

Gruß
K-H

QuickAndDirty 14. Mär 2014 16:31

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
 
Zitat:

Zitat von p80286 (Beitrag 1252023)
Hast Du dafür Quellen?
das sind sehr interessante Informationen.

Gruß
K-H

Ich habe mir das alles mal mühsam recherchiert.
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.

Garfield 17. Mär 2014 06:59

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen
 
Zur Rufnummeranzeige hab ich dies gefunden: http://www.ip-phone-forum.de/showthread.php?t=126270

p80286 17. Mär 2014 09:52

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.
Seite 2 von 2     12   

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