Thema: Delphi Handynummer zu ordnen

Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#24

Re: Handynummer zu ordnen

  Alt 14. Okt 2008, 16:05
Hallo,

da warst Du ja richtig fleißig

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.

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.

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?
  Mit Zitat antworten Zitat