AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anrufmonitor --> Einer Rufnummer den Namen zuordnen
Thema durchsuchen
Ansicht
Themen-Optionen

Anrufmonitor --> Einer Rufnummer den Namen zuordnen

Ein Thema von ringli · begonnen am 10. Mär 2014 · letzter Beitrag vom 17. Mär 2014
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 10. Mär 2014, 21:26
Eine Telefonnummer ist auch immer abhängig vom Kontext.

Diese Rufnummern zeigen alle auf den gleichen Anschluss, wenn man sich in Deutschland im Vorwahlbereich 888 befindet:
Code:
00498887654321
+498887654321
08887654321
7654321
Für eine zuverlässige Suche wird also auch der Kontext benötigt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 10. Mär 2014, 22:30
Die Fritzbox gibt nationale Rufnummern mit OKZ und OKZPrefix an. Dabei wird die OKZ bei aktueller Firmware nicht mehr weggelassen, wenn der Anruf aus demselben Vorwahlbereich kommt.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
517 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 11. Mär 2014, 08:47
Danke für die Antworten.

@sx2008: Diese Möglichkeit kannte ich noch gar nicht. Mal sehen ob ich mir daraus etwas basteln kann oder ob ich doch auf die Möglichkeiten vom NextGrid zurückgreife.

@Garfield: Das Fritz!Box Telefonbuch wollte ich eigentlich nicht benutzen, zumal ich mit XML nicht wirklich warm werde...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 11. Mär 2014, 08:58
@sx2008: Diese Möglichkeit kannte ich noch gar nicht. Mal sehen ob ich mir daraus etwas basteln kann oder ob ich doch auf die Möglichkeiten vom NextGrid zurückgreife.
Controls sind zum Anzeigen von Daten gedacht und nicht als Datenspeicher!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 11. Mär 2014, 09:06
ich nehme mal an das NextGrid hat sowas wie das Grid von TMS: SaveAsCsv, SaveAsXml, ...
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
517 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 11. Mär 2014, 21:13
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...

ich nehme mal an das NextGrid hat sowas wie das Grid von TMS: SaveAsCsv, SaveAsXml, ...
Ja, genau so ist es.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 12. Mär 2014, 08:03
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...
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 12. Mär 2014, 08:39
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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (12. Mär 2014 um 09:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Anrufmonitor --> Einer Rufnummer den Namen zuordnen

  Alt 11. Mär 2014, 11:13
@Garfield: Das Fritz!Box Telefonbuch wollte ich eigentlich nicht benutzen, zumal ich mit XML nicht wirklich warm werde...
Mit XML habe ich auch so meine Probleme. Aber für das Lesen der Namen und Nummern braucht man nicht viel. In der Demo sind das auch nur ein paar Zeilen um Namen und Telefonnummern in ein TListView zu übertragen. Sie hat nur den Fehler, das nicht berücksichtigt wird das die maximal drei Telefonnummern vom selben Typ sein können.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:48 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