IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

conversion ASCII vers EBCEDIC [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    F�vrier 2005
    Messages
    20
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 20
    Par d�faut conversion ASCII vers EBCEDIC
    Bonjour � tous,

    Je re�ois tout les jours des fichiers venant d'un AS400.
    Lorsque je les ouvre avec UltraEdit, les valeurs hexad�cimales de certains carat�res sont mauvaises. Par contre, lorsque je converti d'ASCII vres EBCEDIC, j'obtient les valeurs Hexa que j'attendais.

    Donc, il s'agit d'un probl�me de conversion de mon fournisseur.
    Quelqu'un peut me dire comment je peux transformer une valeur ASCII vers EBCEDIC?

    Merci d'avance.

  2. #2
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    Il n' y a pas de compatibilit� entre ASCII et EBCDIC,

    il faut donc utiliser une table de conversion:

    voici en exemple de tables :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    // AsciiEbcdic.h
    // tables de conversion ASCII->EBCDIC // EBCDIC -> ASCII
    // par Djob.
     
    // il peut y avoir quelques erreurs...
     
     
    const unsigned char ascii_to_ebcdic [256] =
    {
     0  , 1  , 2  , 3  , 55 , 45 , 46 , 47 , 22 , 5  , 10 , 11 , 12 , 13 , 14 , 15 ,
     16 , 17 , 18 , 19 , 60 , 61 , 50 , 38 , 24 , 25 , 63 , 39 , 28 , 29 , 30 , 31 ,
     64 , 79 , 127, 123, 91 , 108, 80 , 125, 77 , 93 , 92 , 78 , 107, 96 , 75 , 97 ,
     240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 122, 94 , 76 , 126, 110, 111,
     124, 193, 194, 195, 196, 197, 198, 199, 200, 201, 209, 210, 211, 212, 213, 214,
     215, 216, 217, 226, 227, 228, 229, 230, 231, 232, 233, 74 , 224, 90 , 95 , 109,
     121, 129, 130, 131, 132, 133, 134, 135, 136, 137, 145, 146, 147, 148, 149, 150,
     151, 152, 153, 162, 163, 164, 165, 166, 167, 168, 169, 192, 106, 208, 161, 7  ,
     32 , 33 , 34 , 35 , 36 , 21 , 6  , 23 , 40 , 41 , 42 , 43 , 44 , 9  , 10 , 27 ,
     48 , 49 , 26 , 51 , 52 , 53 , 54 , 8  , 56 , 57 , 58 , 59 , 4  , 20 , 62 , 225,
     65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 81 , 82 , 83 , 84 , 85 , 86 , 87 ,
     88 , 89 , 98 , 99 , 100, 101, 102, 103, 104, 105, 112, 113, 114, 115, 116, 117,
     118, 119, 120, 128, 138, 139, 140, 141, 142, 143, 144, 154, 155, 156, 157, 158,
     159, 160, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
     184, 185, 186, 187, 188, 189, 190, 191, 202, 203, 204, 205, 206, 207, 218, 219,
     220, 221, 222, 223, 234, 235, 236, 237, 238, 239, 250, 251, 252, 253, 254, 255
    };
     
    extern const unsigned char ebcdic_to_ascii [256] =
    {
     0  , 1  , 2  , 3  , 156, 9  , 134, 127, 151, 141, 10, 11 , 12 , 13 , 14 , 15 ,
     16 , 17 , 18 , 19 , 157, 133, 8  , 135, 24 , 25 , 146, 143, 28 , 29 , 30 , 31 ,
     128, 129, 130, 131, 132, 10 , 23 , 27 , 136, 137, 138, 139, 140, 5  , 6  , 7  ,
     144, 145, 22 , 147, 148, 149, 150, 4  , 152, 153, 154, 155, 20 , 21 , 158, 26 ,
     32 , 160, 161, 162, 163, 164, 165, 166, 167, 168, 91 , 46 , 60 , 40 , 43 , 33 ,
     38 , 169, 170, 171, 172, 173, 174, 175, 176, 177, 93 , 36 , 42 , 41 , 59 , 94 ,
     45 , 47 , 178, 179, 180, 181, 182, 183, 184, 185, 124, 44 , 37 , 95 , 62 , 63 ,
     186, 187, 188, 189, 190, 191, 192, 193, 194, 96 , 58 , 35 , 64 , 39 , 61 , 34 ,
     195, 97 , 98 , 99 , 100, 101, 102, 103, 104, 105, 196, 197, 198, 199, 200, 201,
     202, 106, 107, 108, 109, 110, 111, 112, 113, 114, 203, 204, 205, 206, 207, 208,
     209, 126, 115, 116, 117, 118, 119, 120, 121, 122, 210, 211, 212, 213, 214, 215,
     216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
     123, 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 232, 233, 234, 235, 236, 237,
     125, 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 238, 239, 240, 241, 242, 243,
     92 , 159, 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 244, 245, 246, 247, 248, 249,
     48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 250, 251, 252, 253, 254, 255
     
    };
    et un exemple d'utilisation de ces tables (2 fonctions de conversion ASCII->EBCDIC/EBCDIC->ASCII

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    //---------------------------------------------------------------------------
    // convertit un ficher texte ASCII en EBCDIC
    void __fastcall ConvertASCIIToEBCDIC(String ASCIISource,String EBCDICDest)
    {
       if(!FileExists(ASCIISource)) return;
     
       TFileStream * FileSource = new TFileStream(ASCIISource,fmOpenRead);
       TFileStream * FileDest = new TFileStream(EBCDICDest,fmCreate	);
       int buffer_size = 255;              // arbitraire
       int taille_source = FileSource->Size;
       if(taille_source<buffer_size){
              buffer_size =  taille_source;
              char * buffer = new char[buffer_size];
              FileSource->Read(buffer,buffer_size);
              for(int i=0;i<buffer_size;i++){
                 buffer[i]= ascii_to_ebcdic[buffer[i]];
              }
              FileDest->Write(buffer,taille_source);
       }else{
           int nb_be = taille_source / buffer_size; //nombre de boucle contenant de 255
           int nbc_restants =  taille_source % buffer_size; //nombre de caractères restants à la fin
           for(int i=0;i<nb_be;i++){
              char * buffer = new char[buffer_size];
              FileSource->Read(buffer,buffer_size);
              for(int i=0;i<buffer_size;i++){
                    buffer[i]= ascii_to_ebcdic[buffer[i]];
              }
              FileDest->Write(buffer,buffer_size);
              delete buffer;
           }
           if(nbc_restants!=0){
              char * buffer = new char[nbc_restants];
              FileSource->Read(buffer,nbc_restants);
              for(int i=0;i<nbc_restants;i++){
                 buffer[i]= ascii_to_ebcdic[buffer[i]];
              }
              FileDest->Write(buffer,nbc_restants);
              delete buffer;
           }
       }
       delete  FileSource;
       delete  FileDest;
    }
    //------------------------------------------------------------------------
    // convertit un ficher texte  EBCDIC en ASCII 
     
    void __fastcall ConvertEBCDICtoASCII(String EBCDISource,String ASCIIDest)
    {
       if(!FileExists(EBCDISource)) return;
     
       TFileStream * FileSource = new TFileStream(EBCDISource,fmOpenRead);
       TFileStream * FileDest = new TFileStream(ASCIIDest,fmCreate	);
       int buffer_size = 255;
       int taille_source = FileSource->Size;
       if(taille_source<buffer_size){
              buffer_size =  taille_source;
              char * buffer = new char[buffer_size];
              FileSource->Read(buffer,buffer_size);
              for(int i=0;i<buffer_size;i++){
                //unsigned pour obtenir un entier>0 pour les caractères dont la valeur>127
                 unsigned char c = buffer[i];
                 unsigned char c2 = ebcdic_to_ascii[(int)c];
                 buffer[i]= c2;
              }
              FileDest->Write(buffer,buffer_size);
              delete buffer;
       }else{
           int nb_be = taille_source / buffer_size; //nombre de boucle contenant
           int nbc_restants =  taille_source % buffer_size;
           for(int i=0;i<nb_be;i++){
              char * buffer = new char[buffer_size];
              FileSource->Read(buffer,buffer_size);
              for(int i=0;i<buffer_size;i++){
                 unsigned char c = buffer[i];
                 unsigned char c2 = ebcdic_to_ascii[(int)c];
                 buffer[i]=c2;
              }
              FileDest->Write(buffer,buffer_size);
              delete buffer;
           }
           if(nbc_restants!=0){
              char * buffer = new char[nbc_restants];
              FileSource->Read(buffer,nbc_restants);
              for(int i=0;i<nbc_restants;i++){
                 unsigned char c = buffer[i];
                 unsigned char c2 =ebcdic_to_ascii[(int)c];
                 buffer[i]= c2;
              }
              FileDest->Write(buffer,nbc_restants);
              delete buffer;
           }
       }
       delete  FileSource;
       delete  FileDest;
    }
    //------------------------------------------------------------------------
    voil� , si �a peut t'aider....

Discussions similaires

  1. Conversion Ascii vers Hexa
    Par Alckolo dans le forum C#
    R�ponses: 4
    Dernier message: 14/11/2011, 12h20
  2. Conversion ASCII vers Hexa
    Par PtiBruno dans le forum C
    R�ponses: 3
    Dernier message: 25/02/2008, 09h40
  3. [Conversion] D�cimal vers caract�re (Ascii)
    Par Hokage dans le forum D�buter
    R�ponses: 2
    Dernier message: 01/10/2007, 11h39
  4. conversion UTF8 vers ASCII en C
    Par znarf dans le forum C
    R�ponses: 2
    Dernier message: 05/07/2006, 13h55
  5. Conversion texte Ascii vers Image ou Pdf
    Par davydreyAXESS dans le forum Windows
    R�ponses: 2
    Dernier message: 04/04/2006, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo