برنامه نویس

به وبلاگ خودتان خوش آمدید.

برنامه نویس

به وبلاگ خودتان خوش آمدید.

تبدیل کاراکترهای فاکس پرو در ویندوز به نحوی که قابل خواندن باشند (با دلفی)

درصورتی که از دیتابیس فاکس پرو در داس استفاده کنید برای استفاده از ان در ویندوز کاراکتر ها به هم ریخته و ناخوانا میشوند .توابع زیر در دلفی این مشکل را حل میکنند

 

FoxLarge,FoxSmall, WinT, StrDate : string ;

 function  TFmImportInformation.StrRev(StrRev :string):Variant;

var i : integer ;

    Str : string;

begin

  Str := '' ;

  for i := Length(StrRev) downto 1 do

    Str :=  Str + Copy(StrRev,i,1) ;

  Result := Str ;

end;

//------------------------------------------------------------------------------

procedure TFmImportInformation.SetStrDigit(var FlagDigit: Boolean; var Str, StrDigit: string);

var ch : string;

begin

  ch := Copy(Str, Length(Trim(Str)), 1);


  if Length(Trim(ch)) = 0 then

  begin

    if StrDigit <> '' then

      Str := Str+ ' ' + StrRev(StrDigit) + ' ';

    FlagDigit := False;

    StrDigit := '';


    Exit;

  end;


  if FlagDigit then

  begin

    if ( ch[1] in [' ','-','(',')'] ) then

      Str := Str+ StrRev(StrDigit) + ' '

    else

      Str := Str+ ' ' + StrRev(StrDigit) + ' ';

  end

  else

    Str := Str+ StrRev(StrDigit) ;


  FlagDigit := False;

  StrDigit := '';

end;


//------------------------------------------------------------------------------

function TFmImportInformation.Convert(tstr :string):Variant;

var

 i,posi,len1:integer;

 str2,str3,StrDigit,ch:string;

 FlagDigit : Boolean;

begin

    if tStr = '' then

    begin

      Result := '';

      Exit;

    end;

    StrDigit := ''; FlagDigit := False;

    len1 := length(winT);

    tstr := Trim(tstr);

    for i :=Length(tstr)   downto 1 do

    begin

       str3 := copy(tstr,i,1);

       if ( (str3=')') or (str3='(') or (str3='‹') ) then

       begin

         SetStrDigit( FlagDigit, str2, StrDigit );


         //==Agar Character Ghabli Space ya '-' Nist ba Maghabl Space Ezafeh Shavad

         //==KArbord -> Baray Shekastan matn Dar Gozareshat

         ch := Copy(str2, Length(str2), 1);

         if ch <> '' then

           if ( not(ch[1] in [' ','-']) ) then

             str2 := str2+' ';

         //==


         if  str3=')' then

           str2 := str2+'(';


         if  str3='(' then

         begin

           //==Ghabl Az '(' Space Nabashad

           ch := Copy(str2, Length(str2), 1);

           if ch = ' ' then

             str2 := Copy(str2, 1, Length(str2)-1);

           //==

           str2 := str2+') ';

         end;


         if  str3='‹' then

           str2 := str2+'Ü';

       end

       else

       begin

           if str3='ò' then

           begin

             SetStrDigit(FlagDigit, str2, StrDigit);

             str2 := str2+'áÇ';

           end

           else

           begin

               if ((str3<> ' ')  and (str3<>'')) then

               begin

                 posi := pos(str3,FoxSmall);

                 if posi<>0  then

                 begin

                   if ( (posi>=1) and (posi<=10) ) then

                   begin//Digit

                       FlagDigit := True;

                       StrDigit :=   StrDigit + winT[len1-posi+1] ;

                   end

                   else

                   begin//Horof Kochak

                     SetStrDigit(FlagDigit, str2, StrDigit);

                     str2 := str2+ winT[len1-posi+1] ;

                   end;

                 end

                 else

                 begin

                     posi := pos(str3,FoxLarge);

                     if posi<>0  then

                     begin//Horof Bozorg

                       SetStrDigit(FlagDigit, str2, StrDigit);

                       str2 :=  str2+winT[len1-posi+1] + ' ';

                     end

                     else

                     begin//Horof English

                       if ( str3[1] in ['!','@','#','$','%','^','&','*','/','\','+','='] ) or ( IsCharAlphaNumeric(str3[1]) ) then

                       begin

                          FlagDigit:= True;

                          StrDigit := StrDigit+ str3;

                       end

                       else

                       begin

                         str2 := str2+ StrRev(StrDigit) ;

                         if (FlagDigit) and (str3<>'/') and (str3<>'-') then

                           str2 := str2 + ' ';


                         str2 := str2+ str3;

                         StrDigit := '' ;

                         FlagDigit := False;

                       end;

                     end;

                 end;

               end

               else

               begin

                 SetStrDigit(FlagDigit, str2, StrDigit);

               end;

           end;

       end;

    end;

    SetStrDigit(FlagDigit, str2, StrDigit);

    result := Trim(str2);

end;


//------------------------------------------------------------------------------

procedure TFmImportInformation.FormShow(Sender: TObject);

begin

  winT :='áÇȁÖÕËÞÝÛÛÚÚååÎÍ̍ÔÓíáÊäãߐÙØÒÑÐÏÆæŽÂíÇÇ0987654321';

  FoxLarge  := '‚ƒ„…†‡ˆ‰€ý¦ø¢£¤¥¯àïíôö–ñü§©œšž ùùâáæåé똫­”’ò';

  FoxSmall  := '‚ƒ„…†‡ˆ‰€‘þ¦øŽ¢£¤¥¯àðîõ÷—óþ¨ª›Ÿ¡úûãäçèê왬®•“ò';

end;


نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد