Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction ASC

7 réponses
Avatar
jyM
Amis du jour, bonjour

Petite question (sans doute récurrente dans ce forum, mais je n'ai pas
trouvé la réponse).
La fonction ASC est censée livrer le cose ASCII des caractères lus.
Mais comment déceler les caractères non lisibles (retour chariot par
exemple).

Merci à qui éclairera ma lanterne

7 réponses

Avatar
Jean-marc
jyM wrote:
Amis du jour, bonjour



Ami du soir, Bonsoir !

Petite question (sans doute récurrente dans ce forum, mais je n'ai pas
trouvé la réponse).
La fonction ASC est censée livrer le cose ASCII des caractères lus.



Et c'est bien ce qu'elle fait :-)

Mais comment déceler les caractères non lisibles (retour chariot par
exemple).



Toujours avec Asc.

Vois le programme suivant :

Dim s As String
Dim c As String
Dim i As Long

s = "hello" & vbCrLf & "world"

For i = 1 To Len(s)
c = Mid$(s, i, 1)
Debug.Print Asc(c) & " ";
Next i

Debug.Print

Et voici ce qu'il produit en sortie :

104 101 108 108 111 13 10 119 111 114 108 100

Tu vois le 13 et le 10, respectivement en 6eme et 7emme position ?
Ce sont les codes ascii résultants du décodage de vbCrLf, qui se
décompose en CR (13) et LF (10) qui sont bien les 2 caractères qui
servent à encoder un retour chariot.

Merci à qui éclairera ma lanterne



J'espère qu'elle l'a été :-)

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
jyM
Jean-marc avait soumis l'idée :
jyM wrote:
Amis du jour, bonjour



Ami du soir, Bonsoir !

Petite question (sans doute récurrente dans ce forum, mais je n'ai pas
trouvé la réponse).
La fonction ASC est censée livrer le cose ASCII des caractères lus.



Et c'est bien ce qu'elle fait :-)

Mais comment déceler les caractères non lisibles (retour chariot par
exemple).



Toujours avec Asc.

Vois le programme suivant :

Dim s As String
Dim c As String
Dim i As Long

s = "hello" & vbCrLf & "world"

For i = 1 To Len(s)
c = Mid$(s, i, 1)
Debug.Print Asc(c) & " ";
Next i

Debug.Print

Et voici ce qu'il produit en sortie :

104 101 108 108 111 13 10 119 111 114 108 100

Tu vois le 13 et le 10, respectivement en 6eme et 7emme position ?
Ce sont les codes ascii résultants du décodage de vbCrLf, qui se
décompose en CR (13) et LF (10) qui sont bien les 2 caractères qui
servent à encoder un retour chariot.

Merci à qui éclairera ma lanterne



J'espère qu'elle l'a été :-)

Cordialement,



Merci pour ta réponse. Mais justement je n'obtiens pas ce résultat.
Je veux écrire un petit programme pour reformater des fichiers txt.
Au préalable je fais un test sur un petit fichier qui comporte un mot,
une ligne vide, et 2 autres mots (au total 26 caractères). La commande
ASC produit une liste de 26 codes, mais point de retour chariot, ni de
line feed.

Voici le texte:

through

There and
advanced

Voici la liste des codes obtenus:
116 104 114 111 117 103 104 84 104 101 114 101 32 97 110
100 32 97 100 118 97 110 99 101 100 32

Nota: j'utilise VB6.
As tu une explication?
Merci, @+
Avatar
LE TROLL
Bonjour,

Si tu n'as pas 13 10, c'est peut être que dans ta ligne il n'y a pas
cette valeur, as-tu fais manuellement <Rc> au bout de ta ligne avant
d'enregistrer le fichier, ah ?

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"jyM" a écrit dans le message de
news:
Jean-marc avait soumis l'idée :
jyM wrote:
Amis du jour, bonjour



Ami du soir, Bonsoir !

Petite question (sans doute récurrente dans ce forum, mais je n'ai pas
trouvé la réponse).
La fonction ASC est censée livrer le cose ASCII des caractères lus.



Et c'est bien ce qu'elle fait :-)

Mais comment déceler les caractères non lisibles (retour chariot par
exemple).



Toujours avec Asc.

Vois le programme suivant :

Dim s As String
Dim c As String
Dim i As Long

s = "hello" & vbCrLf & "world"

For i = 1 To Len(s)
c = Mid$(s, i, 1)
Debug.Print Asc(c) & " ";
Next i

Debug.Print

Et voici ce qu'il produit en sortie :

104 101 108 108 111 13 10 119 111 114 108 100

Tu vois le 13 et le 10, respectivement en 6eme et 7emme position ?
Ce sont les codes ascii résultants du décodage de vbCrLf, qui se
décompose en CR (13) et LF (10) qui sont bien les 2 caractères qui
servent à encoder un retour chariot.

Merci à qui éclairera ma lanterne



J'espère qu'elle l'a été :-)

Cordialement,



Merci pour ta réponse. Mais justement je n'obtiens pas ce résultat.
Je veux écrire un petit programme pour reformater des fichiers txt.
Au préalable je fais un test sur un petit fichier qui comporte un mot, une
ligne vide, et 2 autres mots (au total 26 caractères). La commande ASC
produit une liste de 26 codes, mais point de retour chariot, ni de line
feed.

Voici le texte:

through

There and
advanced

Voici la liste des codes obtenus:
116 104 114 111 117 103 104 84 104 101 114 101 32 97 110
100 32 97 100 118 97 110 99 101 100 32

Nota: j'utilise VB6.
As tu une explication?
Merci, @+




Avatar
jyM
LE TROLL a présenté l'énoncé suivant :
Bonjour,

Si tu n'as pas 13 10, c'est peut être que dans ta ligne il n'y a pas
cette valeur, as-tu fais manuellement <Rc> au bout de ta ligne avant
d'enregistrer le fichier, ah ?

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr



Bonjour
Non, il s'agit d'un extrait de texte à reformater. je n'ai pas ajouté
ou modifié les caractères.
En tout état de cause, il y a bien un passage à la ligne, et ASC n'a
pas trouvé le code.
Bizarre non ???
%((
Avatar
LE TROLL
Bonjour,

Suite... mais, dans ton texte :

through
There and
advanced

de 27 signes (avec espaces), je présume que tu les mets dans des variables,
soit
dim v as string
v = "through"
v = v & " There and"
v = v & "advanced"

msgbox v ' = through There and advanced

Dans ce cas de figure, pourquoi veux-tu trouver les caractères 13 + 10 ascii
puisque tu ne les mets pas, pour les avoir il faut les mettre, soit :


v = "through" + chr(13) + chr(10)
v = v & " There and" + chr(13) + chr(10)
v = v & "advanced"

Nota bene : chr(13) + chr(10) = constante VB : vbCrLf (vbCr + vbLf)

Ainsi tu les auras !

Si jamais ça ne fonctionne toujours pas, passe ici tout ton code, tes
variables, la façon dont tu entres le texte puis dont tu le testes, on va
trouver, ce doit être à mon sens un petit détail (qui fait les gros
problèmes parfois).

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"jyM" a écrit dans le message de
news:
LE TROLL a présenté l'énoncé suivant :
Bonjour,

Si tu n'as pas 13 10, c'est peut être que dans ta ligne il n'y a pas
cette valeur, as-tu fais manuellement <Rc> au bout de ta ligne avant
d'enregistrer le fichier, ah ?

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr



Bonjour
Non, il s'agit d'un extrait de texte à reformater. je n'ai pas ajouté ou
modifié les caractères.
En tout état de cause, il y a bien un passage à la ligne, et ASC n'a pas
trouvé le code.
Bizarre non ???
%((




Avatar
Jean-marc
jyM wrote:
Jean-marc avait soumis l'idée :



Merci pour ta réponse. Mais justement je n'obtiens pas ce résultat.
Je veux écrire un petit programme pour reformater des fichiers txt.
Au préalable je fais un test sur un petit fichier qui comporte un mot,
une ligne vide, et 2 autres mots (au total 26 caractères). La commande
ASC produit une liste de 26 codes, mais point de retour chariot, ni de
line feed.



Je vois.

Voici le texte:

through

There and
advanced



Voici la liste des codes obtenus:
116 104 114 111 117 103 104 84 104 101 114 101 32 97 110
100 32 97 100 118 97 110 99 101 100 32



OK.

Nota: j'utilise VB6.



Parfait.

As tu une explication?



Oui :-)

Je suppose que tu lis ton fichier ligne à ligne avec line input.
Mieux, je suppose que ton code ressemble à s'y méprendre à ceci:

Dim f As Integer
Dim s As String
Dim i As Integer

f = FreeFile
Open "c:test.txt" For Input As #f
While Not EOF(f)
Line Input #f, s
For i = 1 To Len(s)
Debug.Print Asc(Mid$(s, i, 1)) & " ";
Next i
Wend
Debug.Print
Close #f

J'ai aussi créé un fichier (test.txt) qui contient exactement ceci:
(c'est comme le tien) :

through

There and
advanced

Et devine ce que mon programme affcihe ?
Voici :

116 104 114 111 117 103 104 84 104 101 114 101 32 97 110
100 32 97 100 118 97 110 99 101 100 32

Super ! Je trouve comme toi.

La raison est toute simple:

Quand tu ouvres un fichier avec Open ... for Input ...
et que tu fais des Line Input, et bien les caractères
de saut de lignes ne sont pas lus. (si tu fais du C, c'est
en fait l'inverse d'un fgets() qui lui retourne tout, fin
de ligne compris).

Donc, si tu veux explicitement les fins de lignes, il te faut lire
ton fichier en binaire et traiter le buffer.
Voici par exemple :

Dim f As Integer
Dim i As Integer
Dim buffer As String
Dim FileSize As Long

f = FreeFile
Open "c:test.txt" For Binary As #f
FileSize = LOF(f)
buffer = Space$(FileSize)
Get #f, , buffer
Close #f

For i = 1 To FileSize
Debug.Print Asc(Mid$(buffer, i, 1)) & " ";
Next i
Debug.Print

Si maintenant je fais tourner ce programme :

116 104 114 111 117 103 104 13 10 13 10 84 104 101 114 101
32 97 110 100 32 13 10 97 100 118 97 110 99 101 100 32 13 10

Super : j'ai maintenant bien mes 13 10 aux bons endroits :-)

Si tu veux en savoir plus sur les manips de fichiers, tu peux
voir les articles suivants de la FAQ :
http://faq.vb.free.fr/index.php?question5
http://faq.vb.free.fr/index.php?question9
http://faq.vb.free.fr/index.php?question4

Ces articles sont détaillés et comprennent des exemples de code
"prêts à l'emploi".

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
jyM
C'est exactement ce à quoi je pensais. Oui j'utilise Line Input....
Je vais revoir mon code aujourd'hui.

Merci pour tes conseils éclairés, ainsi qu'au Troll
@+