Votre question

coller une variable devant toute les valeurs d'1 chaine

Tags :
  • Ascii
  • Programmation
Dernière réponse : dans Programmation
17 Octobre 2007 00:12:39

Bonjour,
Je voudrais réaliser un collage de « E » devant chaque caractère de la chaine d’une variable « valeur » mais dans un 1er temps j’ai besoin de savoir :

1)
Afficher Le chiffre ASCII d’un caractére avec la syntaxe Chr(caractère%)
Test = "a"
print Chr (Test) ‘comment afficher le chiffre ASCII par la variable Test

2)
Variable = "E"
Comment coller une variable devant toute les valeurs d'une chaine
Valeur = "abc"
Pour afficher le résultat : EaEbEc
On imaginant qu'on ne connaît que le nombre de caractère contenue dans la valeur soit 3.
Je n'est pas vraiment de solution adéquate, mise à part :
Coller "E" tout les « i » caractère dans la valeur en faisant une boucle de 0 à 2
Sachant que i = i + 1
If i = 3
Goto fin ' aller à l'étiquette fin

Donc valeur2 = valeur + "E" (tout les i caractère) ‘voilà l’instruction que je cherche à réaliser.

En gros valeur2 est incrémenté de "E" à chaque boucle et à un endroit déterminé par le nombre "i". (Du moins pour cette technique)

Si quelqu’un à l’instruction qu’il me manque pour c’est deux partie différente, je l’en remercie par avance.
Bon soir.


seb.

Autres pages sur : coller variable devant valeurs chaine

17 Octobre 2007 00:26:11

Bonsoir,

C'est en quel langage ?

Vu que CHR est peut etre CHR$ dans certains cas ...
18 Octobre 2007 22:12:25

Exuse moi,
C'est en visual Basic (vb)
Mais c'est vrai que moi aussi je me demandais si "$" était juste pour le VB et Php,

merci A+

seb
a c 232 L Programmation
19 Octobre 2007 10:55:34

Salut,

CHR est pour convertir un code ASCII en charactère. Il me semble que tu veux le contraire. C'est ASC qu'il te faut.

Après, pour ton autre problème, avec une boucle, tu dois pouvoir faire ça !
21 Octobre 2007 00:45:14

Merci,
Oui c'est bien pour convertir un caractère en code ASCII
J'ai trouvé un petit example:
"A"= ASC("A")

Alors je suggére :
print ASC("A") ' pour afficher le nombre 65


Je voudrais réaliser un collage de « E » devant chaque caractère de la chaine d’une variable « valeur » mais dans un 1er temps j’ai besoin de savoir :

Comment faire pour coller un caractère dans une variable en partant de la gauche.
Ex : pour coller le caractère « E » au deuxième rand du mots « test » pour avoir ce résultat: « tEest »

C'est la fonction "coller + endroit" qui m'embéte et que je n'arrive pas à résoudre, mais bon... ;-)

merci A+

Seb


a c 232 L Programmation
21 Octobre 2007 10:33:20

Alors, voici toutes les fonctions qui pourraient te servir :
Len(string) : calcul de la longueur d'une chaine
Left$(string, int) : récupération des "int" premiers caractères de la chaines
Right$(string, int) : idem mais en partant de la droite.

Si tu as une chaine de 10 caractères, et que tu veux ajouter un caractère au niveau du 5ème caractère :
MyString = "ABCDEFGHIJ"
Print Left$(MyString,5) & "X" & Right$(MyString,5)
21 Octobre 2007 23:03:02

Merci,
C'est éxactement se que je cherchais.
Je vais regarder et essayer de créer un bon code.

A+

Seb
24 Octobre 2007 23:01:21


Bonjours,
J’ai écris le code qui doit modifier la variable “texte” soit ‘’abc’’ pour le modifier en texte=‘’EaEbEc’’
Code:

Sub collage()
Dim texte As string
Dim texte1 As string
Dim nb, nb1 As variant

Texte1 = "abc"
Texte = texte1
Nb = Len(texte1) ‘nb =3
Nb1 = nb – 1 ‘nb1=2 (voir PS1)

For k = 0 To nb1 ‘0 à 2
For L = 1 To nb ‘1 à 3
i = k + L ‘1ér boucle i=1 puis 2é=3 et 3é=5
Left$(texte, i) & "E" ‘ texte est modifié 3 foies de suite avec collage de « E » (voir PS2)
Print texte ‘afficher les résultat final « EaEbEc »
Nexte L
Nexte K
End

PS1 : Pour éviter de décrémenter Nb1 à chaque boucle je me suis demandé s’il fallait pas plutôt écrire « Len(texte1) - 1 » soit « 3 – 1=2 »

PS2 : la variable « texte » est modifié à trois reprises pour ces rands là :
EaEbEc
1 3 5

J’espère ne pas avoir fais (trop) d’erreur,

Salut

Seb
a c 232 L Programmation
25 Octobre 2007 13:55:57

Salut,

Euh, il ne me semble pas que ça fasse ce que tu veux. Tu as deux boucles, donc, i va être égal à :
1,2,3 (première boucle de k)
2,3,4 (deuxième boucle de k)
3,4,5 (troisième boucle de k)
soit : 1,2,3,2,3,4,3,4,5 un peu plus que ce que tu veux ! :) 

J'aurais dit ça moi :

  1. Sub collage()
  2. Dim texte As string
  3. Dim texte1 As string
  4. Dim nb, nb1 As variant
  5. Dim i As Integer
  6.  
  7. texte1 = "abc"
  8. texte = texte1
  9. nb = Len(texte1)
  10.  
  11. For k = 0 To nb-1 ' de 0 à 2
  12. texte = Left$(texte, k*2) & "E" & Right$(texte, nb-k*2)
  13. ' Tour 1 : k*i=0*2=0; Texte = "" & "E" & "abc"
  14. ' Tour 2 : k*i=1*2=2; Texte = "Ea" & "E" & "bc"
  15. ' Tour 3 : k*i=2*2=4; Texte = "EaEb" & "E" & "c"
  16. Nexte k
  17.  
  18. Sub




Note : j'ai jamais vraiment fait de VB donc peut y avoir des erreurs...
25 Octobre 2007 21:12:16

Bonjour
Oui c vrai tu à raison, j'ai fait une erreur au niveau des boucles.
Mais au départ j'avais choisi une seul boucle.

Par contre se que je ne comprends pas c pourquoi écris-tu :
& Right$(texte, nb-k*2) car pour :

Left$(texte, k*2) je vois bien l'explication en bas et je pensais qu'en pseudo-code sa voulait dire "depuis la gauche sur var texte la place0 est "E" ( soit mettre E à l'emplacement 0)

C'est pour sa qu'il faut que je comprenne mieux se qui se passe avec : & Right$(texte, nb-k*2)


Moi aussi je débute tout juste en VB (j’apprends doucement) mais sinon toi tu à l'air de bien connaître la programmation en tout genre,

Aller merci
A+ Seb
a c 232 L Programmation
25 Octobre 2007 22:27:45

Alors, le Right$(texte, X) récupère les X derniers caractères de la chaine texte.

Si tu fais :
Right$("abc", 2) ça va te retourner : "bc" (les deux derniers caractères).



Aie, ça me fait penser que j'ai oublié quelque chose.
Il faut ajouter nb = nb+1 pour augmenter la valeur de la chaine (vu que tu ajoutes un E, la longueur de la chaine augmente).

Si tu as une chaine de 5 caractères ("abcde") et que tu veux ajouter un caractère au caractère 3, tu fais Left$("abcde", 3) & "Z".
Ce qui va te donner : "abcZ". Sauf que tu n'auras plus le reste de la chaine ("de"), le Right$("abcde", 5-3) va te permettre de récupérer les 2 derniers caractères manquant, donc "de".

Si tu concatènes le tout, ça va te donner :
Left$("abcde", 3) & "Z" & Right$("abcde", 2) = "abcZde"

Oui, j'ai quelques bases en programmation, mais c'est surtout pour la syntaxe, vu qu'elle est différente pour chaque langage, il se peut que mon programme ne fonctionne pas, faudrait peut-être ajouter quelques trucs par ci par là, je ne sais pas trop :) 


As tu bien compris ou pas ?
29 Octobre 2007 22:37:18

Salut,
Oui maintenant j’ai bien compris et c’est déjà plus clair pour moi.
Mais comme sa (avec nb=nb+1) je pense que sa devrais marcher.

Donc

Si je fais :
Left$("abc", 2) ça va me retourner : "ab"
Mais le fait de rajouter & "Z" sa change complètement le sens de la syntaxe puisque du coup sa cible une position de rand et sa y colle dessus.

J’en ais pas besoins mais je me demandais si il y avait une syntaxe pour sélectionner le contenue entre deux caractère ciblé ex : pour « abc » cibler « b » par « ac » (designer seulement « ac »)
Mais je sais qu’on peut le faire avec les deux instructions que tu à déjà cité.
Parfois j’ai pas tout de suite un accès au web..Voilà
Merci A+
Seb
a c 232 L Programmation
30 Octobre 2007 11:55:04

Salut,

Je ne vois pas trop ce que tu veux dire par "ça change complètement le sens de la syntaxe".
Au départ, tu as une chaine de 3 caractères (abc), tu lui ajoutes un Z en 3ème position, ça va te donner une chaine de 4 caractères (abZc).
Après, c'est à toi de te débrouiller, dans ta boucle d'augmenter la valeur pour arriver tout le temps sur le bon emplacement pour ajouter ta lettre.
Pour cela, tu prends quelques exemples et t'essaies de trouver un générique à partir de ça :) 


Sinon, pour sélectionner le contenu entre deux caractères, je ne connais rien de tel en VB (mais je n'ai pas de connaissances des fonctions de VB), mais oui, sinon tu peux le faire avec les deux instructions déjà cités.
Si ta chaine est de plus de 3 caractères (imaginons "abcdefg"), et que tu veux récupérer la lettre entre a et c.
Tu récupères Left$("abcdefg", 2) qui va te donner ab, puis Right$("ab", 1) qui va te donner B.

Maintenant, si tu voudrais pouvoir le faire à n'importe quel endroit (imaginons que la chaine soit "fghijklabcde" et que tu veuilles récupérer la lettre entre a et c, ça serait un peu plus compliqué, vu qu'il faudrait lire les caractères, et tant que tu n'as pas a, tu continues de lire.

Enfin, je sais pas si tu vois ce que je dis :p 
1 Novembre 2007 23:21:17

salut,

je viens tout juste de me reconnecter et pour ce qui est du sens de la syntaxe quand je dis "ça change complètement le sens de la syntaxe"., et bien c'est juste une façon de penser mais sinon je suis d’accord avec toit.


Sinon quand tu dis :
"il faudrait lire les caractères, et tant que tu n'as pas a, tu continues de lire."

Et bien est-ce que tu fais allusion à une autre fonction "Input" ex: Input string (lecture sur chaine de caractère string) ou c’est les même qu’en haut ( ?)

Sinon pour le reste je comprends bien, merci 

A+

Seb
a c 232 L Programmation
2 Novembre 2007 15:42:57

Salut,

Je ne connais pas la fonction Input, je suis allé voir sur la msdn, c'est une fonction pour lire le contenu d'un fichier, donc ça ne va pas.

Ca pourrait être fait toujours avec Left, dans le genre :
  1. dim i as Integer
  2. dim str as String
  3. str = "xyzabcdef"
  4.  
  5. Do While Len(str) > 0 'tant que la chaine n'est pas vide
  6. If Left(str, i) = "a" Then Exit Do ' si le premier caractère est "a" on arrête
  7. str = Right(str,Len(str)-1) 'on enlève la première lettre du mot
  8. Loop


Edit: je n'ai pas testé, donc peut y avoir des erreurs
2 Novembre 2007 22:55:22

Salut
C’est intéressant
Par contre à la 3é lignes je crois qu’il lui manque juste la définition de « i=1 »

J’ai une autre instruction qui permet de rechercher :
InStr (x,Chaine2, Chaine1) ‘permet de rechercher chaine1 dans Chaine2 depuis rand« x » et renvoie le n° de rand de la 1ére lettre.


Sinon j’avais une idée pour sélectionner « c » dans abcde :
Sélection = string – (« ab » + « de ») ‘utiliser Left et Right avec int=2
(Je pense qu’il faut mettre And à la place de « + » mais j’ai pas essayé car j’ai que basic editor sur Word et connais pas assez la procédure).

A+


2 Novembre 2007 23:00:21

Re Salut
Y à un truc très intéressant que j’essaie d’assimiler, c’est un prog que ta surement déjà vue et qui au début je pensais facilement comprendre mais finalement il reste des pts à résoudre, voici le code :


-----------------------------

Dim sLettres As String
Dim lCompteur As Long
Dim lLongueur As Long
Dim lBoucle As Long

'Définition des constantes utiles pour la fonction (Clé et nombre d'itérations de la fonction maximum)
Const CLEF As String = "nbvfdszé""'(-è_ijhgfcKLKjhgyuilM^+)àçiu-('32azsDRtvBhujkoç_è6tre""zsXWqazerfcx<;:<?"
Const NBROTATIONSMAX As Long = 13

'Définition de la longueur de la chaîne à crypter et de la chaîne de résultat
lLongueur = Len(chaîneACrypter)
sLettres = String(lLongueur, Chr(0))

'Boucler en fonction du nombre de rotations attendues
For lBoucle = 1 To NBROTATIONSMAX
'boucler pour chaque caractère de la chaîne initiale
For lCompteur = 1 To lLongueur
'Remplacer le caractère de la chaîne à crypter par le caractère correspondant à
' le reste de
' la valeur ascii du caractère à crypter
' plus
' la valeur ascii du caractère correspondant dans la clé, multiplié par la longueur de la clé
' quand on le divise par 256
Mid(sLettres, lCompteur, 1) = Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) + _
(Asc(Mid(CLEF, (lCompteur Mod Len(CLEF)) + 1, 1)) * lLongueur)) Mod 256)
'recommencer
Next
'réaffecter la chaîne à crypter par le résultat trouvé pour pouvoir recommencer une itération
chaîneACrypter = sLettres
'Nouvelle itération
Next
'Renvoyer le résultat final
Crypter = sLettres
End Function
-----------------------------




Donc à par « Mod » je reconnais toute les instructions mais j’essaye de traduire 1 exemple en pseudo-code pour une boucle donc juste pour le 1er caractère (et sa clé) soit « D » et « n » je vais essayer de traduire sa :

Mid(sLettres, lCompteur, 1) = Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) +


Pour ((Asc(Mid(chaîneACrypter, lCompteur, 1))

Je suggére :

((La léttre ASCII(du code ASCII(du chiffre de la chaine (D)) + (la suitte)

Pour:

avec : lLongueur = 14
sLettres = 14 (longueur maxi si supérieur à valeur nul)


Si c'est pas trop faux jusque là je n'arrive toujours pas à comprendre cette dernière



Voilà,

(Si C’est tout faux c’est parce que je débute )


Bon weekend A+


Seb
a c 232 L Programmation
23 Novembre 2007 09:29:08

Mod, je suppose que c'est Modulo.

Sinon pour le reste, je ne sais pas trop quoi te dire...
27 Novembre 2007 23:48:07

Salut,

sinon ma conversion (le début) était-elle juste ?
merci
A+
a c 232 L Programmation
28 Novembre 2007 07:18:25

Je ne sais pas du tout :D 
1 Décembre 2007 23:22:58

Je pense que je vais aller voir sur le site en question.
merci

@+
24 Décembre 2007 20:23:01

Salut
Qui pourais m'aider à traduire ces ligne en pseudoCode svp :

Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) + _
(Asc(Mid(CLEF, (lCompteur Mod Len(CLEF)) + 1, 1)) *

Merci et bonne fête à tous...:) 

Seb
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS