coller une variable devant toute les valeurs d'1 chaine
Forum Programmation : coller une variable devant toute les valeurs d'1 chaine
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.
Bonsoir,
C'est en quel langage ?
Vu que CHR est peut etre CHR$ dans certains cas ...
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
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 !
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
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)
Merci,
C'est éxactement se que je cherchais.
Je vais regarder et essayer de créer un bon code.
A+
Seb
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
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 :
Code :
|
Note : j'ai jamais vraiment fait de VB donc peut y avoir des erreurs...
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
Message édité par Sebi17 le 25-10-2007 à 21:13:33
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 ?
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
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
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
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 :
Code :
|
Edit: je n'ai pas testé, donc peut y avoir des erreurs
Message édité par OmaR le 02-11-2007 à 15:43:21
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+
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
Message édité par Sebi17 le 07-11-2007 à 22:46:35
Mod, je suppose que c'est Modulo.
Sinon pour le reste, je ne sais pas trop quoi te dire...
Salut,
sinon ma conversion (le début) était-elle juste ?
merci
A+
Je ne sais pas du tout
Je pense que je vais aller voir sur le site en question.
merci
@+
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
Il y a 501 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
