Thema: Delphi Handynummer zu ordnen

Einzelnen Beitrag anzeigen

QuickAndDirty

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

Re: Handynummer zu ordnen

  Alt 14. Okt 2008, 14: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 = '0then
            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 = '0then
            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 = '00then
          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?
  Mit Zitat antworten Zitat