Thema: Delphi Handynummer zu ordnen

Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.884 Beiträge
 
Delphi 12 Athens
 
#25

Re: Handynummer zu ordnen

  Alt 14. Okt 2008, 22:42
Zitat von nahpets:
Hallo,

da warst Du ja richtig fleißig
Ja ich kann es nicht ertragen das es sowas nicht schon gibt.

Zitat von nahpets:
Ein erster Test mit
Delphi-Quellcode:
me.lines.clear;
me.Lines.Add(ValueListEditor1.Cells[1,0] + ' ' + ValueListEditor1.Cells[0,0]);
for i := 1 to ValueListEditor1.RowCount - 1 Do begin
  if EqualPhoneNumber(ValueListEditor1.Cells[1,i],ValueListEditor1.Cells[0,i],
     '0', // InternExitCode, 0 für Amt?
     '030', // AreaCode, 030 für Berlin?
     '0049// CountryCode 0049 für Deutschland?
  ) then begin
    me.Lines.Add(ValueListEditor1.Cells[0,i] + ' und ' + ValueListEditor1.Cells[1,i] + ' stimmen überein');
  end else begin
    me.Lines.Add(ValueListEditor1.Cells[0,i] + ' und ' + ValueListEditor1.Cells[1,i] + ' sind unterschiedlich');
  end;
end;
liefert dieses Ergebnis:
Code:
bekannte Nummer unbekannte Nummer
0049171123456 und 0171123456 stimmen überein
+49211123456 und 0211123456 stimmen überein
003906123456 und +3906123456 stimmen überein
123456 und 0211123456 sind unterschiedlich
49211123456 und 0049211123456 stimmen überein
0221123456 und 0123456 stimmen überein
030123456 und 0123456 stimmen überein
Meiner Meinung nach ist der Vorletzte falsch, da AreaCode für Berlin.
ja, das geht schief, hmmm muss ich mal debuggen. Die funktion ist von meiner seite her noch garnicht getestet....

Zitat von nahpets:
Hier hab' ich eine Frage:
Delphi-Quellcode:
RemainingKnownNumber := copy(KnownNumber, LastIndex, Length(KnownNumber)-LastIndex );
RemainingUnknownNumber := copy(RemainingUnknownNumber, LastIndex, Length(RemainingUnknownNumber)-LastIndex );
Warum -LastIndex?
Gegeben seien 004930123456789 und 9123456789
Bis LastIndex stimmen die Nummern von rechts gesehen überein (hier also LastIndex = 10 = erste Abweichung)
copy(RemainingUnknownNumber, LastIndex, Length(RemainingUnknownNumber)-LastIndex ) ergibt copy(987654321039400,10,15 - 10) bzw. copy(987654321039400,10,5) es bleibt also 03940.copy(KnownNumber, LastIndex, Length(KnownNumber)-LastIndex) ergibt copy(9876543219,10,10 - 10) bzw. copy(9876543219,10,0), also ein Leerstring.
Übrig sollten aber bleiben 004930 und 9 um hier die Amtsvorwahl und unsere eigene Vorwahl (AreaCode) und Landesvorwahl (CountryCode) überprüfen zu können.
-LastIndex kann entfallen, dann bekommst Du immer den Rest, auch wenn Length() mehr ergeben sollte, als kopiert werden kann.
naja, jedes sollte in sich eine Abgeschlossene Prüfung sein, bist du sicher das er die 9 nicht mit kopiert?
wie würdest du die stelle umbauen, poste mal bitte die komplette Funktion inkl. der Änderungen,
so einzeln kapier ich das nicht...
Zitat von nahpets:
Auch hier habe ich ein Verständnisproblem:
Delphi-Quellcode:
Function EqualStr( a, b : String) : Integer;
Var I, L, LastIndex:integer;
Begin
  L := Min( Length(a), Length(b) );
  For i := 1 to L Do
  Begin
    if a[i]<>b[i] then
    Begin
      result := i;
      exit;
    end;
  end;
  if Length(a) <> Length(b) then
    Result := succ(L)
  else
    Result := 0;
end;
Wird in der For-Schleife kein Unterschied gefunden aber a und b sind unterschiedlich lang, dann ist als Ergebnis LastIndex um 1 größer als der kürzere der beiden Werte? Dann müsste das obige Copy doch immer einen Leerstring liefern?
Exakt. Das ist beabsichtigt. So das ich den Anfangsindex bekomme ab dem die beiden Nummern unterschiedliche werte enthalten.
Der Kürzere String ist ja dann schon 100% im längeren enthalten und ich muss nur noch den längeren String lokalisieren.

Wenn ich alle Standortinformationen in beiden RemainingsStrings eliminieren kann ist das die selbe Rufnummer.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat