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.