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

Informix Discussion :

Codes Ascii sous Informix V10


Sujet :

Informix

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Codes Ascii sous Informix V10
    Bonjour a tous.

    Je suis en train de tenter de développer une routine sous Informix qui utilise les conversion caractere <> Code Ascii

    Le problème est qu'il existe une fonction ascii() ... Sous la V11

    Sous V10, je m'arrache les cheveux pour pouvoir effectuer ces conversions.

    J'ai bien tenté de créer une table qui contient les différents caracteres et leur valeur ascii, ca marche, mais uniquement pour les caracteres visibles (et vu que je veux utiliser cette routine pour des caracteres genre ascii 202, je suis a nouveau coincé)

    Quelqu'un aurait il une idée pour me sortir de ce bourbier ?

    Merci de votre aide !!

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 35
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Sur la page http://www.iiug.org/software/index_MISC.html, il faut télécharger le package (ascii.tgz) de la ligne:

    ascii Package for ASCII() and CHR() functions - numbers to characters and vice versa [MISC, SQL] Download Info

    Lorsqu'il est décompressé:


    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
    $ dbaccess - << @@
    > create database test;
    > @@
     
    Database created.
     
     
     
    Database closed.
     
     
    $ dbaccess test asciitbl.sql
     
    Database selected.
     
     
    Table created.
     
     
    Permission revoked.
     
     
    Permission granted.
     
     
    Database closed.
     
    $ dbaccess test << @@
    > load from 'ascii.unl' insert into ascii;
    > @@
     
    Database selected.
     
     
    255 row(s) loaded.
     
     
     
    Database closed.
     
    $ dbaccess test ascii.sql
     
    Database selected.
     
     
    Routine created.
     
     
    Database closed.
     
    $ dbaccess test chr.sql
     
    Database selected.
     
     
    Routine created.
     
     
    Database closed.
     
    $ dbaccess test << @@
    > SELECT ASCII("HELLO") FROM systables WHERE tabid = 1;
    > @@
     
    Database selected.
     
     
     
    (expression)
     
              72
     
    1 row(s) retrieved.
     
     
     
    Database closed.

    Hope this help.

  3. #3
    Invité
    Invité(e)
    Par défaut ascii2iso
    Petit shell que j'utilisais :

    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
    # ascii2iso
     
    clear
    cat << EOF
     
    Outil de traduction des caractères accentués ASCII en caractères accentués ISO :
     
            à â ç é è ë ê î ï ô û ù ° ½ §
     
            Alt/144 = "E" (Alt/144 -> E accent aigu)
            Alt/254 = "-" (Alt/254 -> puce)
            Alt/249 = "-" (Alt/249 -> Gros point centré)
     
    EOF
     
    while true
    do echo "répertoire source : \c"
    read REP
    if [ ! -d "$REP" ]
    then echo "Répertoire $REP inexistant !!!"
         continue
    else break
    fi
    done
     
    cd $REP
    if [ $? -ne 0 ]
    then echo "Impossible de se positionner sous $REP"
         exit
    fi
    echo "nom des fichiers à convertir (syntaxe unix) : \c"
    read NOM
    export CPT=0
    for i in `ls ${NOM} 2>/dev/null`
    do CPT=`expr $CPT + 1`
       echo "Convertion de $i" 
       cat $i | sed -f ../tools/ascii2iso.sed > $i.tmp
       if [ $? -ne 0 ]
       then echo "Erreur lors de la convertion de $i !!!"
            rm -f $i.tmp
       else mv $i.tmp $i
       fi
    done
     
    echo "\n\nNombre de fichier(s) converti(s) : $CPT"
     
    # asciiTOiso.sed
     
    # s/…/à/g
    # s/ƒ/â/g
    # s/‡/ç/g
    # s/‚/é/g
    # s/Š/è/g
    # s/ˆ/ê/g
    # s/‰/ë/g
    # s/Œ/î/g
    # s/‹/ï/g
    # s/“/ô/g
    # s/–/û/g
    # s/—/ù/g
    # s/ø/°/g
    # s/«/½/g
    # s//§/g
    # s//E/g
    # s/þ/-/g
    # s/ù/./g
    Sur la 18ème ligne : "nom des fichiers à convertir (syntaxe unix) : \c"
    il y a en principe le caractère Bel (007) devant "\c" mais il semble ne pas avoir été transféré par mon copier-coller.

    Ce shell utilise le fichier ../tools/ascii2iso.sed (en commentaire dans le shell) :

    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
    s/…/à/g
    s/ƒ/â/g
    s/‡/ç/g
    s/‚/é/g
    s/Š/è/g
    s/ˆ/ê/g
    s/Œ/î/g
    s/‹/ï/g
    s/“/ô/g
    s/–/û/g
    s/—/ù/g
    s/ø/°/g
    s/«/½/g
    s//§/g
    s//E/g
    s/þ/-/g
    s/ù/-/g
    Evidemment, j'ai l'équivalent en sens inverse : iso2ascii
    ... et pour les fins de lignes, et pour les caractères semi-graphiques, etc.

    Pour les autres caractères ASCII, il suffit de compléter.

  4. #4
    Membre habitué
    Homme Profil pro
    Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Inscrit en
    Octobre 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 105
    Points : 162
    Points
    162
    Par défaut
    Bonjour,


    autres suggestions un peu plus dans les "clous".
    Tu écris une stored procedure que tu appelles chr ( pour coller à l'usage général ).
    paramètre entrant: valeur numérique smallint
    paramètre sortant: valeur char char(1)
    tu fais une construction style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if invalue = 32 THEN
        return  " " ;
    elif  invalue = 33 THEN
        return "!" ;
    elif  invalue = 34 THEN
        return "\"" ;
    etc....
    end if
    C'est un peu le principe du switch /case en C, donc ça ne devrait pas être trop lent à l’exécution, et l'avantage c'est que quand tu passeras à la version 11 ( attention la 10 est en fin de support !), tu n'auras pas de code à changer, juste supprimer la procédure stockée...
    Inconvénient:

    d'une façon générale, dans la mesure où le stored procedure language le permet, les stored procedures sont un moyen "harmonieux et efficace" de palier à certains manques au niveau des fonctions "built-in".

    Sinon la stored procedure de Joathan Leffler sur www.iiug.org est très bien, mais elle t'oblige à créer une table.
    ftp://ftp.iiug.org/pub/informix/pub/ascii.tgz

    Mais dis moi, cette conversion, n'aurais tu pas avantage à la coder dans l'application. J'explique:
    il est plus performant de faire la conversion une seule fois dans l'application et passer la valeur convertie à la requête, plutôt que le moteur exécute la fonction à chaque rangée traitée. Ce principe peut d'ailleurs t'empêcher d'utiliser des index et donc ralentir très sérieusement ta requête...


    A méditer
    Cordialement,
    Eric

Discussions similaires

  1. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 01h27
  2. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04
  3. Code ASCII d'une touche sous Mozilla
    Par SPA dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/02/2005, 08h47
  4. [TP]Code ASCII.
    Par franck H dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 18/01/2004, 19h28
  5. Fonction EXTRACT sous Informix
    Par lord_of_ankou dans le forum Informix
    Réponses: 3
    Dernier message: 20/08/2003, 17h37

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