Comment remplacer les valeurs d'un tableau par celles d'un autre ? [Résolu]

cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention - 14 nov. 2008 à 12:34 - Dernière réponse : cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention
- 20 févr. 2011 à 11:42
Bonjour,
Dans une fonction de décryptage (vraiment simplifiée!), j'ai deux "tableau de valeurs" L et N et je voudrai remplacer les valeurs de N par celles de L. Ce qui donne par exemple :

Function

decryptage()
Dim L() AsString = {"", "j", "c", "x", "p", "s", "z", "a", ...}

Dim N() AsInteger = {"1000", "1011", "1022", "1033", "1044", "1055", "1066", "1077", "1088", ...}

Me.TextBox1.Text = Replace(TextBox2.Text, N, L)                

My.Forms.Exemple.TextBox1.Text = Me.TextBox1.Text

EndFunction

La 'textbox2' ne contient que des nombres mis a la suite.

Mais le problème est que ça ne passe pas : "Une valeur de type 'Tableau à 1 dimension(s)de Integer' ne peut pas être convertie en 'String' " et c'est la même chose avec L. J'ai cherché mais je n'ai pas trouvé comment faire.

Est- ce qu'une personne aurait la solution?
Et par la même occasion,est- il possible de "traiter" les charactères d'une 'Textbox' trois par trois ( par exemple : les trois premiers, puis les trois suivants, ...)?
Merci d'avance
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 14 nov. 2008 à 13:21
3
Merci
Bonjour,

Dim N() AsInteger = {"1000", "1011", "1022", "1033", "1044", "1055", "1066", "1077", "1088", ...}

AS INTEGER ????? Pas plutôt As String ?

Il faut faire une boucle :

dim ltReplace as string(,)=new string(,){{"","1000"},{"j","1011"}, ...

for i as integer =0 to ltreplace.getupperbound(ltreplace,0)
    Montext=montext.replace(ltreplace(i,0),ltreplace(i,1))
next i

A toi d'adapter.

http://nhen0039.chez-alice.fr/index.php

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention - 20 févr. 2011 à 11:42
3
Merci
Histoire de clore le sujet quelques années plus tard et dans le cas ou ça intéresserait quelqu'un qui débute:

je reprend juste le code de NHenry:

Dim montext As String = "..."
Dim ltReplace(,) As String = {{"a", "1000"}, {"b", "1001"}}
For i As Integer = 0 To ltReplace.GetUpperBound(0)
   montext = montext.Replace(ltReplace(i, 0), ltReplace(i, 1))
Next

Merci cs_hadri1 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_hadri1
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 14 nov. 2008 à 13:22
0
Merci
J'oubliais :
Pense à mettre Option Explicit et Strict à On, ça t'aurais hurler une erreur sur ton code.

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 14 nov. 2008 à 14:07
0
Merci
Salut,

C'est pas terrible comme approche.

Je te conseille de passer par un Dictionnary(Of String, Of String) soit une Hashtable (générique si tu connais pas les generics)

Ce qui permettrait d'associer plus facilement tes valeurs;

Exemple:

dico.Add("",
"1000");
dico.Add(''
j","
1011");
...
For each N As string in dico

Me.TextBox1.Text = Replace(TextBox2.Text, N, dico(N))  

Next

Il semble manquer la boucle car les index de tes tableaux ne sont pas utilisé ;-)

Bon coding
Commenter la réponse de nhervagault
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 14 nov. 2008 à 15:21
0
Merci
Bonjour,

Avec le Dictionary, c'est sur KeyValuePair (si mes souvenirs sont bons) qu'il faut faire le For Each.

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention - 14 nov. 2008 à 15:45
0
Merci
J'ai essayé chacune de vos réponses mais aucune ne va.
Avec
"dim ltReplace as string(,)=new string(,){{"","1000"},{"j","1011"}, ...

for i as integer =0 to ltreplace.getupperbound(ltreplace,0)
    Montext=montext.replace(ltreplace(i,0),ltreplace(i,1))
next i"
J'obtiens une erreur avec "ltreplace" dansltreplace.getupperbound(ltreplace,0):
" Une valeur de type 'Tableau à 2 dimension(s)de String' ne peut pas être convertie en 'Integer' "

Avec"Dictionnary(Of String, Of String)" l'erreur est au second "Of String" car "cela ne désigne pas un type"
enfin bon je continue de chercher merci quand meme
Commenter la réponse de cs_hadri1
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 14 nov. 2008 à 15:52
0
Merci
Bonjour,

Change ce morceau de code (petite erreur de ma part) :

for i as integer =0 to ltreplace.getupperbound(ltreplace,0)
    Montext=montext.replace(ltreplace(i,0),ltreplace(i,1))
next i

en

for i as integer =0 to ltreplace.getupperbound(,0)
    Montext=montext.replace(ltreplace(i,0),ltreplace(i,1))
next i

Et ce n'est pas :
Dictionnary(Of String, Of String)
mais
Dictionnary(Of String, String)

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 14 nov. 2008 à 15:53
0
Merci
Bonjour,

On ne se change pas comme ça :§
for i as integer =0 to ltreplace.getupperbound(,0)
devient
for i as integer =0 to ltreplace.getupperbound(0)

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention - 14 nov. 2008 à 16:20
0
Merci
Lorsque j'utilise Dictionnary(Of String, String) j'ai l'erreur "Type 'Dictionnary' non défini" et j'avais essayé avec getupperbound(0) jai une erreur avec .replace(ltreplace(i,0),ltreplace(i,1)) : "La longueur de la chaîne ne peut pas être égale à zéro.  Nom du paramètre : oldValue" que je metteOn a Option Explicit et Strict ou non.J'ai essayé avec oldValue et newValue mais j'ai le même problème.

 
Commenter la réponse de cs_hadri1
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 14 nov. 2008 à 16:48
0
Merci
Bonjour,

Mets
Imports System.Collection.Generics (ou un truc du genre)
sur la premèire ligne de ton fichier

Pour l'erreur, c'est à cause d'une chaine vide (""), à toi de corriger cela.

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 14 nov. 2008 à 16:50
0
Merci
Il faut importer les collections génériques pour utiliser les dictionnary
imports System.Collections.Generic

Pour la deuxieme erreur

elle est normale tu veux transformer "" par "une chaine" c'est pas tres logique.

Bon coding
Commenter la réponse de nhervagault
cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention - 14 nov. 2008 à 17:18
0
Merci
La deuxième erreur est corrigée mais le problème c'est que j'obtiens les même valeur qu'au départ a la place des valeurs modifiées
Commenter la réponse de cs_hadri1
cs_hadri1 24 Messages postés vendredi 2 février 2007Date d'inscription 10 juillet 2011 Dernière intervention - 14 nov. 2008 à 17:54
0
Merci
imports System.
Collections.Generic
ne résout pas du tout mon problème pour les dictionnary, le 'Dictionnary' n'est toujours pas défini.
Je vais songer à une autre méthode
Sinon pour traiter, modifier des chiffres trois par trois par exemple personne n'a d'idée?

 
Commenter la réponse de cs_hadri1
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 14 nov. 2008 à 18:51
0
Merci
Pour les dico
Ou ton autre probleme
Si tu nous mets le code on comprendra mieux

Sinon pour le 3 par 3
Tu utilises une fonction avec un modulo

if compteur Mod 3 = 0 then
traitement quand on selectionne 3 element
end if
Attention de bien prendre les 1 ou 2 derniers caracteres qui ce retrouve seul

autre solution
for i = 0 to i < coll.count step 3
attention il faut que le nombre soit multplie de 3 sinon trouver une solution pour traiter les elements manquant avant ou apres

NB il faut poser sur papier ton raisonnement et le but de ce raisonnement
Il faut chercher un peu et passer du debuggeur

Bon courage
Commenter la réponse de nhervagault

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.