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

Signaler
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011
-
cs_hadri1
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011
-
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

Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
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
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
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
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
24
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
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
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
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
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
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
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
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

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.

 
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
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
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
24
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
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

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?

 
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
24
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