Générer du EBCDIC

ErwanPoudes Messages postés 13 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 5 janvier 2005 - 23 nov. 2004 à 17:53
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 14 déc. 2004 à 15:04
Bonjour,

Je dois générer un fichier codé en EBCDIC via Acess.
Je ne trouve aucune piste nulle part.

A défaut , je suis même pret à utiliser un éditeur de texte Externe qui me convertira mon ascii en EBCDIC...mais même là , je n'en trouve pas (en fait je ne trouve que des convertisseurs EBCDIC-->ASCII, mais jamais de ASCII -->EBCDIC)

Heeeeeeeeelp
Merci d'avance

Air-1 :shy)

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 nov. 2004 à 18:10
UltraEdit le fait....

une simple table de caractères...

static unsigned char a2e[256] = {
0,1,2,3,55,45,46,47,22,5,37,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
};

tu n'a qu'a faire un truc du genre

Car_Ebc = a2e ( asc ( Car_Asc ) )

et ce, caractère par caractère....

j'ai une source la dessus (Asm)

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2004 à 01:53
Va voir :

http://www.vbfrance.com/code.aspx?ID=27776

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
24 nov. 2004 à 12:11
labout

Voic un code
Public Function EBCDICtoASCII(E As String) As String
Dim Conv, I As Long, Ch As String * 1, Res As String

Conv = Array( _
0, 1, 2, 3, 0, 9, 0, 127, 0, 0, 0, 11, 12, 13, 14, 15, _
16, 17, 18, 19, 0, 10, 8, 0, 24, 25, 0, 0, 28, 29, 30, 31, _
0, 0, 0, 0, 0, 0, 23, 27, 0, 0, 0, 0, 0, 5, 6, 7, _
0, 0, 22, 0, 0, 0, 0, 4, 0, 0, 0, 0, 20, 21, 0, 26, _
32, 0, 0, 228, 224, 0, 0, 229, 231, 241, 91, 46, 60, 40, 43, 33, _
38, 233, 0, 0, 232, 0, 0, 0, 236, 223, 93, 36, 42, 41, 59, 94, _
45, 47, 0, 196, 0, 0, 0, 197, 0, 209, 166, 44, 37, 95, 62, 63, _
248, 201, 0, 0, 0, 0, 0, 0, 0, 96, 58, 35, 64, 39, 61, 34, _
216, 97, 98, 99, 100, 101, 102, 103, 104, 105, 0, 0, 240, 0, 254, 0, _
176, 106, 107, 108, 109, 110, 111, 112, 113, 114, 0, 0, 230, 0, 198, 164, _
181, 126, 115, 116, 117, 118, 119, 120, 121, 122, 0, 0, 208, 221, 222, 0, _
162, 163, 0, 0, 0, 167, 0, 0, 0, 0, 172, 124, 175, 168, 180, 0, _
123, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 0, 246, 242, 0, 0, _
125, 74, 75, 76, 77, 78, 79, 80, 81, 82, 0, 0, 252, 249, 0, 0, _
92, 0, 83, 84, 85, 86, 87, 88, 89, 90, 0, 0, 214, 0, 0, 0, _
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, 220, 0, 0, 0)

For I = 1 To Len(E)
Ch = Mid(E, I, 1)
Res = Res & Chr(Conv(Asc(Ch)))
Next I
EBCDICtoASCII = Res
End Function

Public Function ASCIItoEBCDIC(E As String) As String
Dim Conv, I As Long, Ch As String * 1, Res As String

Conv = Array( _
0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 21, 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, 187, 208, 161, 7, _
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
0, 0, 176, 177, 159, 0, 106, 181, 189, 0, 0, 0, 186, 0, 0, 188, _
144, 0, 0, 0, 190, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
0, 0, 0, 0, 99, 103, 158, 0, 0, 113, 0, 0, 0, 0, 0, 0, _
172, 105, 0, 0, 0, 0, 236, 0, 128, 0, 0, 0, 252, 173, 174, 89, _
68, 0, 0, 0, 67, 71, 156, 72, 84, 81, 0, 0, 88, 0, 0, 0, _
140, 73, 205, 0, 0, 0, 204, 0, 112, 221, 0, 0, 220, 0, 142, 0)

For I = 1 To Len(E)
Ch = Mid(E, I, 1)
Res = Res & Chr(Conv(Asc(Ch)))
Next I
ASCIItoEBCDIC = Res
End Function

Utilisation:

Text2.Text = ASCIItoEBCDIC(Text1.Text)
Text4.Text = EBCDICtoASCII(Text3.Text)

@+
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2004 à 12:42
le principe est le même que celui de ma source.....

un petit bémol, labout dans tes fonctions...

For I = 1 To Len(E)
Ch = Mid(E, I, 1)
Res = Res & Chr(Conv(Asc(Ch)))
Next I

ici, Res est réalloué sans arret, alors que l'on connais sa taille finale ( Len(E) ). On pourrait imaginer par exemple....

Res = Space$(Len(E))
For I = 1 To Len(E)
Ch = Mid(E, I, 1)
Mid ( Res , I , 1 ) = Chr(Conv(Asc(Ch)))
Next I

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
24 nov. 2004 à 13:18
labout

pas comprendre, j'ai un exemple qqui marche
@+
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2004 à 16:13
Les deux fonctionnent, oui.

comme tu le fais, VB dois allouer un caractère supplémentaire à chaque iteration. Ce faisant, il doit parfois faire des deplacements mémoire...

alors que puisque connais la taille finale de la chaine, il est plus simple d'allouer ne fois pour toute la quantité voulue et de modifier tel ou tel carctère après coup...

VB est pas le plus pratique pour gérer les chaines de caractères, mais bon!...

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
ErwanPoudes Messages postés 13 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 5 janvier 2005
14 déc. 2004 à 11:52
Ca m'a lair parfait, merci à tous!!!

toutefois, j'ai l'impression qu'une fois passsé dans cette moulinette, mon texte ne sera plus du tout lisible(pour un humain).

Pourtant, j'ai un fichier exemple issu d'un logiciel bancaire professionnel (en fait je tente de générer un fichier ETEBAC, fichier de communication entre un client et sa banque..pour faire des virements en série par exemple qui doit être codé en EBCDIC)...qui est parfaitement lisible lorsque je l'ouvre avec le bloc note (il s'agit d'un fichier .VIG)

Qu'est ce qui cloche exactement??? Est ce que les histoires de codages unicode, ANSI...ont quelques choses à voir???

Voilà comment je procède :
. En VB, à l'aide des différentes données d'une table, je créée une chaine de caractère (une ligne à chaque fois), completement mise en forme (nombre d'espace, pas d'accent, casse..etc) ..parfaitement lisible pour un humain
. Je passe ma ligne de texte dans votre moulinette
. j'inscrit la nouvelle ligne dans un fichier sequentiel (fonctions output...)

Est ce que j'ai faux qq part???

Merci d'avance

Air-1 :shy)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 déc. 2004 à 15:04
Pas sur qu'il te faille passer par l'ebcdic.... l'ebcdic n'est PAS LISIBLE sous un simple Notepad..

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
Rejoignez-nous