Création d'un programme permettant de lire un fichier unicode

[Résolu]
Signaler
Messages postés
3
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
23 mai 2008
-
Messages postés
3
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
23 mai 2008
-
Bonjour, voici mon problème:
Je suis apprentis en alternance informatique (1ère année) et mon tuteur me demande de lui programmer en Delphi un programme  capable de lire un fichier unicode, c'est à dire, de le convertir de manière à ce qu'il soit lisible, enregistrable sous un fichier par exemple .doc et  imprimable.
Le seule problème c'est que je commence seulement à aborder la programmation orienté objet sous java en formation.....
Mon tuteur étant d'une compréhension "hors norme", il ma laissé que deux jours pour lui faire ce programme.
N'ayant aucune base en Delphi je demande donc a n'importe quel personne qui maitriserai ce langage de m'aider car la je suis vraiment dans une sale situation...
Pour l'instant le peu de code que j'ai tenté d'écrire est le suivant:
-------------------------------------------------------------------
unit Main;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Buttons;


type
    TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    OpenFileDialog: TOpenDialog;
    Fichier1: TMenuItem;
    Ouvrir1: TMenuItem;
    SaveDialog1: TSaveDialog;
    PrintDialog: TPrintDialog;
    Memo1: TMemo;
    BitBtn1: TBitBtn;
    Enregistrersous1: TMenuItem;
    Enregistrer1: TMenuItem;
    N1: TMenuItem;
    Miseenpage1: TMenuItem;
    Imprimer1: TMenuItem;
    PrinterSetupDialog: TPrinterSetupDialog;
    procedure Quitter1Click(Sender: TObject);
    procedure Ouvrir1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Imprimer1Click(Sender: TObject);
    procedure Miseenpage1Click(Sender: TObject);


    { Déclarations privées }
  public
    { Déclarations publiques }
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.Quitter1Click(Sender: TObject);
begin
      Close;
end;




procedure TForm1.Ouvrir1Click(Sender: TObject);
begin
     if OpenFileDialog.Execute then
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
     Close;
end;


procedure TForm1.Imprimer1Click(Sender: TObject);
begin
      if PrintDialog.Execute then
end;


procedure TForm1.Miseenpage1Click(Sender: TObject);
begin
      PrinterSetupDialog.Execute;
end;


end.
---------------------------------------------------------

Configuration du pc: Windows 2000 pro, Delphi 7 édition pro

5 réponses

Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
Ce n'est certainement pas les autres qui vont faire tout ton programme, tu n'as pratiquement rien fait à part avoi r mis la procedure "Close", le opendialog qui s'execute et qui ne fait rien et le printdialog qui s'execute et qui ne fait rien.

Toutefois, voici une function qui te sera utile pour convertir un texte unicode en string:





function UnicodeToStr(Value: string): string;
var

  I: Integer;

  function HexToStr: string;

  begin

    Result :=  chr(Hex2Dec(Copy(Value, I + 1,2)));

    Inc(I, 2);

   end ;
begin

  I      : = 1;

  Result :=  '';

  try

    repeat

      if Value[I] = '%'  then  Result : = Result + HexToStr

      else 

        Result :=  Result + Value[I];

      Inc(I);

     until  I > Length(Value);

  except

    Result : = '';

  end;
end;
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
Petit oubli

Ajoute ceci au début:






type


  Str002 =   string [2];




Et voici la function Hex2Dec..

function Hex2Dec(Value: Str002): Byte;
var

  Hi, Lo: Byte;
begin

  Hi : = Ord(Upcase(Value[1]));

  Lo :=  Ord(Upcase(Value[2]));

   if  Hi > 57 then Hi : = Hi - 55 

  else 

    Hi :=  Hi - 48;

   if  Lo > 57 then Lo : = Lo - 55 

  else 

    Lo := Lo - 48;

  Result := 16 * Hi + Lo
end;
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
Delphiprog, il faut voir sa du bon côté, peut-être que la réponse va pouvoir aider quelqu'un d'autre que lui! .. Du moins, c'est ce que je me dis pour ne pas peté les plombs...
Messages postés
3
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
23 mai 2008

Bonjour,
Mille pardon pour le retard dans les validations de réponses.
J'ai rencontré des problème de connexion au travail.
Je te remercie enormément pour ton code il m'a aidé grandement à avancer dans mon travail.
Encore désolé pour le retard!
Messages postés
3
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
23 mai 2008

Bonjour,
Mon nouveau problème est le suivant:
Mon entreprise reçoit souvant des lettre provenant de pologne, écrit dans un fichier . doc, et à la police Times New Roman.
Lorsque l'on fait un copier/coller dans un fichier .txt Les caractères spéciaux ne sont pas visibles.
Le but de l'application serait de pouvoir ouvrir le fichier .doc et de le convertir en fichier .txt tout en conservant les caractère d'origine.

Pour le moment, j'essaye de tester (en grand debutant que je suis...) de diverse manière en utilisant les canvas mais cela affiche des caractère bizard comme: []&.
Voici le source dans le lequel on essaye avec les caractère chinois( a savoir que mon tuteur est aussi perdu que moi sur le sujet):

procedure XieHanZi(Canvas:TCanvas; x,y:integer; GB:string);
var
     W:PWideChar;
     GBlength, UNILength, WSize:integer;
begin
     GBLength:=Length(GB);
     WSize:=GBLength*2 + 2;
     GetMem(W, WSize);
     ZeroMemory(W,WSize);
     MultiByteToWideChar(CP_UTF8,0,PChar(GB),GBLength,W,WSize);


  // Get length of UNICODE string
   UNILength:=LStrLenW(W);


  // Write the text
  TextOutW(Canvas.Handle, x,y,W,UNILength);


  // Clean up
  FreeMem(W, GBLength*2+2);
end;




procedure TFrameForm.FormPaint(Sender: TObject);
var
     x : integer;
     y : integer;
     row,col:integer;
const
     hh = 10;
begin


     Canvas.Font.Name   :='Times New Roman';
     Canvas.Font.Style  :=[];


     y:=0;
     Canvas.Font.CharSet:=  ANSI_CHARSET              ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  DEFAULT_CHARSET           ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  SYMBOL_CHARSET            ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  SHIFTJIS_CHARSET          ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  HANGEUL_CHARSET           ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  GB2312_CHARSET            ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  CHINESEBIG5_CHARSET       ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  OEM_CHARSET               ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  JOHAB_CHARSET             ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  HEBREW_CHARSET            ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  ARABIC_CHARSET            ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  GREEK_CHARSET             ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  TURKISH_CHARSET           ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  VIETNAMESE_CHARSET        ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  THAI_CHARSET              ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  EASTEUROPE_CHARSET        ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  RUSSIAN_CHARSET           ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  MAC_CHARSET               ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;
     Canvas.Font.CharSet:=  BALTIC_CHARSET            ;    XieHanZi (Canvas,50,  y, #$01+#$26  ); y:=y+20;


end;


end.

-----------------------------------------------
Merci d'avance pour ta réponse!