Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.958 Beiträge
Delphi 12 Athens
|
Re: Handynummer zu ordnen
14. Okt 2008, 15:55
Hier mal ein spontaner Entwurf, mal einfach so runtergeschrieben
Bitte um Verbesserung vorschläge...vor allem was die Struktur angeht...
Sind da Logische Fehler die ich übersehen habe?
Delphi-Quellcode:
//A.R. meine Funktion, alles meins, alles .....
//Diese Funktion Vergleicht 2 Telefonnummern, KnownNumber und UnknownNumber,
//und erkennt die Nummer auch wenn Amt(InternExitcode),
//Ortsvorwahl/Handynetzvorwahl(Areacode) oder Landesvorwahl(CountryCode)
//des Standorts fehlen.
//
//Momentane Schwächen:
//Die Funktion versteht nur den Standard NationalExitCode "00"
//Die abweichenden NationalExitCodes sind für:
//USA und Canada "011"
//Kuba "119"
//Suedafrika "09"
//diese Exitcodes sind noch nicht implementiert
//Nur als Beispiel: Von Amerika nach Deutschland telefoniert man mit der Vorwahl
//"01149" statt wie sonst üblich "0049" -> der NationalExitCode ist eben ein anderer
Function EqualPhoneNumber(KnownNumber,UnknownNumber,InternExitCode, AreaCode, CountryCode:String):Boolean;
Var i,j,LastIndex:integer;
RemainingKnownNumber,
RemainingUnknownNumber,
MatchingNumber,
RemainingAreaCode,
RemainingCountryCode : String;
//Liefert die erste unterschiedliche stelle oder 0 wenn keine unterschiede bestehen
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;
Begin
Result := false;
UnknownNumber := StringReplace(UnknownNumber,'+','00',[]);
KnownNumber := StringReplace(KnownNumber,'+','00',[]);
if (UnknownNumber <> '') and
(KnownNumber <> '') then
Begin
KnownNumber := ReverseString(KnownNumber);
UnknownNumber := ReverseString(UnknownNumber);
AreaCode := ReverseString(areaCode);
CountryCode := ReverseString(CountryCode);
InternExitCode := ReverseString(InternExitCode);
//Nummer von Rechts an vergleichen
Lastindex := EqualStr(UnknownNumber, KnownNumber);
if LastIndex > 0 then
Begin
RemainingKnownNumber := copy(KnownNumber, LastIndex, Length(KnownNumber));//<-geändert
RemainingUnknownNumber := copy(UnknownNumber, LastIndex, Length(UnknownNumber));//<-Diese geändert
MatchingNumber := copy(KnownNumber, 1, LastIndex);
if RemainingKnownNumber <> '' then
Begin
//Area Code in RemainingKnownNumber entfernen wenn er gleich dem
//Standort ist
Lastindex := EqualStr(RemainingKnownNumber,areacode);
If Lastindex > 0 then
Begin
RemainingAreacode := Copy(Areacode, LastIndex, Length(Areacode));//<-geändert
if RemainingAreacode = '0' then
RemainingKnownNumber := Copy(RemainingKnownNumber, LastIndex, Length(RemainingKnownNumber));//<-geändert
//Sonst nichts enfernen
end
else
RemainingKnownNumber := '';
end;//if RemainingKnownNumber <> '' then
if RemainingKnownNumber <> '' then
Begin
//Country Code in RemainingKnownNumber entfernen wenn er gleich dem
//Standort ist
Lastindex := EqualStr(CountryCode,RemainingKnownNumber);
If Lastindex > 0 then
Begin
RemainingCountryCode := Copy(CountryCode, LastIndex, Length(CountryCode));//<-geändert
if (RemainingCountryCode = '00') then
begin
RemainingKnownNumber := Copy(RemainingKnownNumber, Lastindex, Length(RemainingKnownNumber) )//<-geändert
// Wenn das Programm in den USA laufen würde müste jetzt auf einen
// abweichenden Exitcode(011 für Nordamerika) geprüft werden
end
end
else
RemainingKnownNumber := '';
end;//if RemainingKnownNumber <> '' then
If RemainingKnownNumber <> '' then
Begin
//Amt Entfernen Falls vorhanden
If RemainingKnownNumber = InternExitCode then
RemainingKnownNumber := ''
end; //If RemainingKnownNumber <> '' then
If RemainingUnknownNumber <> '' then
Begin
//Area Code in RemainingUnknownNumber entfernen wenn er gleich dem
//Standort ist
Lastindex := EqualStr(RemainingUnknownNumber,areacode);
If Lastindex > 0 then
Begin
RemainingAreacode := Copy(Areacode, LastIndex, Length(Areacode));//<-geändert
if RemainingAreacode = '0' then
RemainingUnknownNumber := Copy(RemainingUnknownNumber, LastIndex, Length(RemainingUnknownNumber));//<-geändert
//Sonst nichts enfernen
end
else
RemainingUnknownNumber := '';
end;//If RemainingUnknownNumber <> '' then
if RemainingUnknownNumber <> '' then
Begin
//Country Code in RemainingUnknownNumber entfernen wenn er gleich dem
//Standort ist
Lastindex := EqualStr(CountryCode,RemainingUnknownNumber);
If Lastindex > 0 then
Begin
RemainingCountryCode := Copy(CountryCode, LastIndex, Length(CountryCode));//<-geändert
if RemainingCountryCode = '00' then
begin
RemainingUnknownNumber := Copy(RemainingUnknownNumber, Lastindex, Length(RemainingUnknownNumber))//<-geändert
// Wenn das Programm in den USA laufen würde müste jetzt auf einen
// abweichenden Exitcode(011 für Nordamerika) geprüft werden
end
end
else
RemainingUnknownNumber := '';
end;//if RemainingUnknownNumber <> '' then
If RemainingUnknownNumber <> '' then
Begin
//Amt Entfernen Falls vorhanden
If RemainingUnknownNumber = InternExitCode then
RemainingUnknownNumber := ''
end; //If RemainingUnknownNumber <> '' then
result := (RemainingKnownNumber = '') and (RemainingUnKnownNumber = '');//<- diese geändert
end//if LastIndex > 0 then
else
result := true; //Wenn volle übereinstimmung
end;//if (UnknownNumber <> '') and
// (KnownNumber <> '') then
end;
Andreas Monads? Wtf are Monads?
|