Comment remplacer les valeurs d'un tableau par celles d'un autre ?

Résolu
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011 - 14 nov. 2008 à 12:34
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011 - 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

14 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 nov. 2008 à 13:21
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
3
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011
20 févr. 2011 à 11:42
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 nov. 2008 à 13:22
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
14 nov. 2008 à 14:07
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
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 nov. 2008 à 15:21
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
0
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011
14 nov. 2008 à 15:45
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 nov. 2008 à 15:52
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 nov. 2008 à 15:53
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
0
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011
14 nov. 2008 à 16:20
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.

 
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 nov. 2008 à 16:48
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
14 nov. 2008 à 16:50
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
0
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011
14 nov. 2008 à 17:18
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
0
cs_hadri1 Messages postés 24 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 10 juillet 2011
14 nov. 2008 à 17:54
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?

 
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
14 nov. 2008 à 18:51
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
0
Rejoignez-nous