Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > Informix
Informix Forum d'entraide Informix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/05/2011, 11h18   #1
Invité de passage
 
Inscription : mars 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 5
Points : 1
Points : 1
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 !!
MacCarel81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h46   #2
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 23
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 23
Points : 29
Points : 29
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 :
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.
nelem75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 22h54   #3
Membre habitué
 
Inscription : novembre 2007
Messages : 103
Détails du profil
Informations personnelles :
Âge : 64
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2007
Messages : 103
Points : 109
Points : 109
Par défaut ascii2iso

Petit shell que j'utilisais :

Code :
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 :
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.
IFA2377 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 12h46   #4
Membre régulier
 
Homme Eric Vercelletto
Achitecte Informix SGBD et applications
Inscription : octobre 2010
Messages : 63
Détails du profil
Informations personnelles :
Nom : Homme Eric Vercelletto
Âge : 51
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : Achitecte Informix SGBD et applications
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 63
Points : 95
Points : 95
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 :
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
begooden-it est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h14.


 
 
 
 
Partenaires

Hébergement Web