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 Discussion :

ebcdic to ascii


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut ebcdic to ascii
    Bonjour,
    pour convertir un fichier ebcdic en ascii je fais ça

    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
     
     
    #include <stdio.h>
    #include <string.h>
    #include <memory.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    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
     
    };
     
     
     
    int file_conv (const char *FileSource, const char *FileDest)
    {
      int ret = 0;
      FILE *src = NULL;
      FILE *dst = NULL;
      /*char buffer[BUFSIZ];*/
     
     
     
       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;
    }
    Merci

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    T'as oublié de dire ou est-ce que t'as un problème, mais bon, ça se voit qu'il y en a un peu partout alors ...

    1. Ce n'est pas du C. Il n'y a pas d'opérateurs new et delete en C.
    2. Ce programme, s'il fonctionnait, n'est pas portable (unistd.h : UNIX, memory.h : je ne sais pas).
    3. Tu utilise l'opérateur -> sur des char * (FileSource et FileDest).
    4. src et dst ne sont pas utilisées
    5. Pas la moindre trace d'une fonction portable ...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut
    je t'explique mon problème: j'ai un fichier FileSource de données EBCDIC qui contient des zones packés
    que je veux convertir en fichier FileDest de données ASCII


    je peux le faire avec une chaine de caractère main j'arrive pas à le faire pour un fichier de données.

    Merci

    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
    97
     
    nouvelle version
     
    #include <stdio.h>
    #include <string.h>
    #include <strings.h>
     
    void    ASCII_to_EBCDIC ( long, char *) ;
    void    EBCDIC_to_ASCII ( long, char *) ;
     
     
     
       /*
        *    EBCDIC to ASCII translation table
        */
        static char EBCDIC_translate_ASCII [ 256 ] =
        {
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
            0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
            0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
            0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
            0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
            0x2E, 0x2E, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
            0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x2E, 0x3F,
            0x20, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x2E, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
            0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
            0x2D, 0x2F, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x7C, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
            0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
            0x2E, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
            0x69, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
            0x72, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
            0x7A, 0x2E, 0x2E, 0x2E, 0x5B, 0x2E, 0x2E,
            0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x2E, 0x2E, 0x2E, 0x2E, 0x5D, 0x2E, 0x2E,
            0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
            0x49, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
            0x52, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x5C, 0x2E, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
            0x5A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
            0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
            0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E
        } ;
     
    /*
     *      EBCDIC_to_ASCII (string conversion)
     */
    void    EBCDIC_to_ASCII ( long buf_length, char *buf_addr)
    {   int i;
        unsigned char temp;
        for (i=0; i < buf_length; i++)
        {
            temp = (unsigned char) buf_addr[i];
            buf_addr[i] = EBCDIC_translate_ASCII[temp];
        }
    }
     
     
     
     
    void  main ( void )
    {
        char in_buffer[255];
        int junk;
     
        printf("\nEBCDIC-ASCII.c\n");
        printf(  "==============\n");
     
        /* EBCDIC characters in the buffer: ,%_>?         */
     
        printf("The next 4 lines should match\n");
     
        strcpy(in_buffer, "øôóôñòðððððÆ2");
        printf("EBCDIC data: %s\n", &in_buffer);
        EBCDIC_to_ASCII ( sizeof ( in_buffer ), in_buffer ) ;
        printf("ASCII  data: %s\n\n", &in_buffer );
     
     
        /* EBCDIC characters in the buffer: ABCDE         */
     
        printf("The next 4 lines should match\n");
     
        strcpy(in_buffer, "ÇÙøôóôñòðððððÆ2");
        printf("EBCDIC data: %s\n", &in_buffer);
        EBCDIC_to_ASCII ( sizeof ( in_buffer ), in_buffer ) ;
        printf("ASCII  data: %s\n\n", &in_buffer );
     
     
        printf("\nBye...\n");
    }

Discussions similaires

  1. convention EBCDIC to ASCII
    Par jeha dans le forum Langage
    Réponses: 3
    Dernier message: 04/04/2011, 16h53
  2. EBCDIC vers ASCII
    Par bernard59139 dans le forum z/OS
    Réponses: 5
    Dernier message: 24/12/2010, 15h59
  3. Réponses: 0
    Dernier message: 15/11/2009, 01h35
  4. Datastage Conversion EBCDIC vers ASCII
    Par erick_m33 dans le forum DataStage
    Réponses: 0
    Dernier message: 22/12/2008, 10h41
  5. Conversion ASCII -> EBCDIC et le caractère RES
    Par StanRex dans le forum Windows
    Réponses: 5
    Dernier message: 17/09/2006, 21h27

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