[VB] DEBUTANT : Remplacer X caracteres dans une variables

DEBUTANT : Remplacer X caracteres dans une variables [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 21-09-2002 à 23:05:12    

bonjour,
Je lis un fichier que je charge dans une liste box.
Ce chargement fonctionne, mais je voudrais lors de l'insertion de la ligne du fichier, remplacer le caractère ";" par un espace " ".Ce caractère est présent plusieurs fois sur la ligne.
La ligne est chargé dans une variable. donc finalement c'est l expréssion d'une variable, avec une substitution de caractères.
 
qq'1 a t-il une solution.
 
De la meme manière je décompose cette ligne en tableau, et chaque element (separateur = ";" ), est ensuite utilisé dans des calculs.Mes opérations fonctionnent, je declare ce tableau avec des varaibles de type Integer. mais quand je les réaffiche, ma valeur "07" devient par exemple "7", comment afficher une variable avec un format particulier (je connais peu vb, mais sous linux cela aurait été printf "%-04d" $MAVAR) c'est à dire appliquer un format d'affichage.
 
Merci de vos reponses.

Reply

Marsh Posté le 21-09-2002 à 23:05:12   

Reply

Marsh Posté le 22-09-2002 à 11:27:20    

Salut,
 
Pour remplacer ton caractère dans un variable tu peux utiliser l'instruction 'Replace'
ex:
 
Replace(variable,";"," " )
 
Pour ce qui est de la deuxième partie du message, si j'ai bien compris la question (remplacer un entier ex '7' en '07' à l'affichage tout en le laissant en entier...) je ne connais pas la réponse (je ne pense pas que ce soit possible mais je suis pas un maître en VB...)
 
Si par contre tu ne veux que le remplacer à l'affichage tu peux utiliser ceci (mais ton 7 ne sera plus un entier)
(x est ta variable)
tu places x dans une chaine
dim CHx as string
CHx = str(x)
 
if len(CHx) < 2 then
    CHx = "0" & CHx
end if
msgbox (CHx)
 
J'espère avoir répondu à tes questions!


Message édité par C17 le 22-09-2002 à 11:30:09

---------------
C17
Reply

Marsh Posté le 22-09-2002 à 11:28:56    

C17 a écrit a écrit :

Salut,
 
Pour remplacer ton caractère dans un variable tu peux utiliser l'instruction 'Replace'
ex:
 
Replace(variable,";"," " )
 
Pour ce qui est de la deuxième partie du message, si j'ai bien compris la question (remplacer un entier ex '7' en '07' à l'affichage tout en le laissant en entier...) je ne connais pas la réponse (je ne pense pas que ce soit possible mais je suis pas un maître en VB...)
 
Si par contre tu ne veux que le remplacer à l'affichage tu peux utiliser ceci (mais ton 7 ne sera plus un entier)
(x est ta variable)
tu places x dans une chaine
dim CHx as string
CHx = str(x)
 
if len(CHx) < 2 then
    CHx = "0" & CHx
end if
msgbox (CHx)
 
J'espère avoir répondu à tes questions!
 




 
Désolé, je me suis trompé de bouton... Je voulais simplement éditer mon message et non y répondre!


Message édité par C17 le 22-09-2002 à 11:30:54

---------------
C17
Reply

Marsh Posté le 22-09-2002 à 12:04:32    

C17 a écrit a écrit :

Salut,
 
Pour remplacer ton caractère dans un variable tu peux utiliser l'instruction 'Replace'
ex:
 
Replace(variable,";"," " )
 
Pour ce qui est de la deuxième partie du message, si j'ai bien compris la question (remplacer un entier ex '7' en '07' à l'affichage tout en le laissant en entier...) je ne connais pas la réponse (je ne pense pas que ce soit possible mais je suis pas un maître en VB...)
 
Si par contre tu ne veux que le remplacer à l'affichage tu peux utiliser ceci (mais ton 7 ne sera plus un entier)
(x est ta variable)
tu places x dans une chaine
dim CHx as string
CHx = str(x)
 
if len(CHx) < 2 then
    CHx = "0" & CHx
end if
msgbox (CHx)
 
J'espère avoir répondu à tes questions!




C'est exacetement ce' que je voulais pour la variable. Effectivement sans même altérer la variable, on peut a l'affichage "concaténer" des zeros et les valeurs par des if, mais je cherchais une methode permettant de définir de manière globale le format d'affichage de mes variables.
 
En tout les cas merci bcp.
 
Autre question :
 
Je tri des tableaux de variables sur un index. Je fais du tri çà bulles , pas très performant mais bien plus simple à coder pour qq'1 comme moi qui n'est pas programmeur.lorsque je tri un index unique (enfin on va dire une colonne, tout va bien), je le fait d'ailleurs pour 3 colonnes, mais lorsuqe j'essaye de trier COLONNE1 ET COLONNE2 ET COLONNE3 Ba soit le PC bloque, soit le tri n'est pas bon.  
Je code si col(i)>col(i+1) OR (col(i)>=col(i+1) AND col2(i)>col2(i+1)) or (col(i)>=col(i+1) AND col2(i) >= col2(i+1) AND col3(i) > col3(i+1))
 
C'est pas si j ai ete tres clair là !


Message édité par kicest le 22-09-2002 à 12:08:32
Reply

Marsh Posté le 22-09-2002 à 20:31:29    

Y a pas un indice qui piétine ou des données triées qui sont reprises dans la boucle à l'infini ? Un mode Pas à Pas ne permet pas de suivre l'évolution du programme ?
 
Sinon, pour être plus clair/lisible, on peut décomposer
 
if col(i)>col(i+1) OR (col(i)>=col(i+1) AND col2(i)>col2(i+1)) or (col(i)>=col(i+1) AND col2(i) >= col2(i+1) AND col3(i) > col3(i+1)) then
 
par  
K1 = col(i) > col(i+1)
K2 = col(i) >= col(i+1)
K3 = col2(i) > col2(i+1)
K4 = col2(i) >= col2(i+1)  
K5 = col3(i) > col3(i+1)
 
if K1 OR (K2 AND K3) OR (K2 AND K4 AND K5) then
 
Le tri doit être descendant, croissant ?  
 
for i= 1 to NbLignes - 1
if (col(i) > col(i+1)) then
  X = col(i+1)
  col(i + 1) = col(i)
  col(i) = K
end if
next i
 
Avec cette méthode, faut faire plusieurs passages, me semble-t-il, car on ne compare qu'au suivant.
 
Le Pas à Pas, c'est très pratique pour voir si la logique écrite fait bien ce qu'on désire :D.

Reply

Marsh Posté le 22-09-2002 à 22:05:10    

carbon_14 a écrit a écrit :

Y a pas un indice qui piétine ou des données triées qui sont reprises dans la boucle à l'infini ? Un mode Pas à Pas ne permet pas de suivre l'évolution du programme ?
 
Sinon, pour être plus clair/lisible, on peut décomposer
 
if col(i)>col(i+1) OR (col(i)>=col(i+1) AND col2(i)>col2(i+1)) or (col(i)>=col(i+1) AND col2(i) >= col2(i+1) AND col3(i) > col3(i+1)) then
 
par  
K1 = col(i) > col(i+1)
K2 = col(i) >= col(i+1)
K3 = col2(i) > col2(i+1)
K4 = col2(i) >= col2(i+1)  
K5 = col3(i) > col3(i+1)
 
if K1 OR (K2 AND K3) OR (K2 AND K4 AND K5) then
 
Le tri doit être descendant, croissant ?  
 
for i= 1 to NbLignes - 1
if (col(i) > col(i+1)) then
  X = col(i+1)
  col(i + 1) = col(i)
  col(i) = K
end if
next i
 
Avec cette méthode, faut faire plusieurs passages, me semble-t-il, car on ne compare qu'au suivant.
 
Le Pas à Pas, c'est très pratique pour voir si la logique écrite fait bien ce qu'on désire :D.




Ba c'est balaud, en fait j'ai posté sur le forum, ma réponse !!! Et oui en la rédigeant, j'avais corrigé l'erreur qui plantait mon tri (En fait un >= remplacé par un > ). Ma syntaxe fonctionne donc correctement, en tout cas je ne savais pas que l'on pouvait stocker une expression dans une variable, cela va alléger mon code .....
merci.
 
Encore une question sur ce qui me pose le plus de problèmes les tableaux (array). Je les utilise à outrance, mais je ne connais aucunes methodes pour cet objet.
alors je "boucle" pas mal et cela ralentit mon programme. question très certainement de débutant mais bon je la pose tout de même.
 
J'ai 2 array.
un array assez grand (3000 index de 20 colonnes)
dim array1 (1 to 3000,1 to 20)
 
et un autre tres petit (20 index de 1 colonne)
dim array2 (1 to 20)
 
Les 2 sont remplis, mais maintenant je cherche la manière de connaitre :
 
les lignes de array1, contenant les 20 valeurs de array2.
les lignes de array1, contenant au moins 19 valeurs de array2.
les lignes de array1, contenant au moins 18 valeurs de array2.
Etc etc ...
et meme si c'était possible de préciser de manière variabiliser le nombre de valeurs à trouver de array2 (car array2 peut n'avoir que 3 colonnes par exemple, 20 colonnes etant le maximum)
 
j'ai commencé mais je suis bloqué, je ne sais pas par quel bout prendre ca :
 
voici donc le debut de mes experimentations lol
 
dim a_trouver, trouve as integer
'--------------------------------
'Fixer le nombre de col a trouver de array2
'--------------------------------
a_trouver = 3
trouve = 0
''--------------------------------------------
''Variante trouver tous les colonnes de array2
''a_trouver=ubound(array2)
''--------------------------------------------
for a = lbound(array1) to ubound(array1)
   for b = 1 to 20
       for c = lbound(array2) to ubound(array2)
           if array2(c) = array1(a,b) then
           trouve = trouve + 1
           else
   next b
           end if
           if a_trouver <> trouve then
       next c
           else
           msgbox "La ligne " & a & " de array1 a les val de array2"
           trouve = 0
next a
           end if
       
Mais la je patauge ..............
 
Merci de vos reponses.

Reply

Marsh Posté le 22-09-2002 à 23:34:57    

J'ai les yeux qui se ferment => à voir demain.
 
Attention à ne pas croiser des bornes de boucles !
for a = lbound(array1) to ubound(array1)  
  for b = 1 to 20  
      for c = lbound(array2) to ubound(array2)  
    .......
  next b
          end if  
          if a_trouver <> trouve then  
      next c
 
 
mais  
for a = lbound(array1) to ubound(array1)  
  for b= 1 to 20          
    for c= ...
       ....
    next c
     ...
  next b
   ...
next a
 
On peut sortir d'une boucle "for" en faisant "exit for", mais on ne peut pas croiser les variables.
 
 
On peut stocker une valeur LOGIQUE dans une variable, car le TRUE et le FALSE sont codés -1 (ou +1 selon) et 0.
 
On peut faire test if (A OR B and C) car le compilo considère A comme vrai si <>0 idem pr B et C.


Message édité par Carbon_14 le 22-09-2002 à 23:38:15
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed