begin process at 2012 02 14 09:51:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

VBA

 > 

Problème de chaînes !!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de chaînes !!!

vendredi 25 février 2005 à 22:27:43 | Problème de chaînes !!!

eric03

Bonjour !

Voila mon souci : sur un formulaire j'ai 'Texte14' rempli avec une référence :
ex.:'Poste de travail'. A l'aide d'un code, il faut que je supprime les mots de moins de 5 lettres (reste 'Poste travail'). Ensuite, je dois remplacer les espaces par des +. ('Poste+travail').

Comment puis-je faire, SVP ???

Merci d'avance !

Eric
vendredi 25 février 2005 à 23:05:03 | Re : Problème de chaînes !!!

tryborg

Réponse acceptée !
Je ne c pas si mon algo est efficace mais ca marche, j'ai bidouillé ca en deux minute :

    Dim i As Long
   
    Machaine$ = "Poste de travail et tout autres chaines de caractères..."
   
    For i = 1 To Len(Machaine$)
        If Mid$(Machaine$, i, 1) = " " Then
            If Mid$(Machaine$, i + 3, 1) = " " Then
                Machaine$ = Left$(Machaine$, i - 1) & "+" & Mid$(Machaine$, i + 4, Len(Machaine$))

            Else:
                Machaine$ = Left$(Machaine$, i - 1) & "+" & Mid$(Machaine$, i + 1, Len(Machaine$))

            End If
        End If
    Next i
   
    Text1.Text = Machaine$ 


Voilivoilou...

 tryborg

samedi 26 février 2005 à 00:32:15 | Re : Problème de chaînes !!!

crenaud76

Réponse acceptée !
Autre proposition :
Function TraiteChaine(ByVal LaChaine As String) As String
Dim M() As String, i As Long, Buffer As String

; On éclat la chaien en mot dans un tableau
M = Split(LaChaine, " ")
; Pour chaque élément de tableau
For i = LBound(M) To UBound(M)
  ; S'il fait moins de 5 car. de long on l'éfface
  If Lenb(M(i))<10 Then M(i) = ""
Next
; On reconstruit la chaine avec des "+" entre les mots
Buffer = Join$(M, "+")
; Tant qu'il y a deux "+" l'un a coté de l'autre
While Instr(Buffer, "++") > 0 
   ; On les remplace par un seul "+"
   Buffer = Replace$(Buffer, "++", "+")
Wend
" On revoie le tampon
TraiteChaine = Buffer
End Function

Avec cela, ça devrait passer
Christophe R
samedi 26 février 2005 à 00:36:57 | Re : Problème de chaînes !!!

tryborg

C une autre possibilité, à partir de VB6 seulement, car je n'ai point cette function Split dans VB5, malheureusement...

 tryborg

samedi 26 février 2005 à 03:49:02 | Re : Problème de chaînes !!!

eric03

Salut !

Merci à vous pour les codes, les deux fonctionnent et vont me servir, car selon les chaînes, on n'arrive pas toujours au même résultat, en appliquant l'une ou l'autre méthode.

Vraiment un grand merci !!!!!


Eric
dimanche 27 février 2005 à 13:27:02 | Re : Problème de chaînes !!!

cqui789

Tu n'obtiend pas la meme chose parceque tryborg ne detecte que les mots de 2 lettres et crenaud76 detecte les mots jusqu'a 9 lettres...

dimanche 27 février 2005 à 13:47:07 | Re : Problème de chaînes !!!

eric03

Tu es dans l'erreur, le code de Triborg ne prend que les mots SUPERIEURS à 2 lettres mais le résultat est parfait. Pour le code de Crenaud76, essaye-le d'abord et tu verra qu'il fonctionne très bien.

Eric
dimanche 27 février 2005 à 15:48:06 | Re : Problème de chaînes !!!

cqui789

Desole Crenaud76, je ne connaissait pas la fonction lenb, que j'ai confondu avec len, je n'ai pas trouve de doc a ce sujet.

pour ce qui est de tryborg, je confirme qu'il ne detecte que les mots de 2 lettres, c'est a dire qu'il te laisse les mots d'une lettre en plus de ceux superieurs a 2 lettre et apres essai, je constate que si 2 mots de 2 lettres se suivent, il laisse le deuxieme

mettons que tu tappe (c'est juste un exemple)

vue de la fenetre a la jetee fin

Crenaud76 donne :
+fenetre+jetee+
Ok si  les + avant et apres ne te genent pas

tryborg donne:
vue+la+fenetre+a+jetee+fin
Garde un 2 lettres et le 1 lettres.

J'ai essaye de refaire le code de Crenaud76 sans le split et plus simple mais je doit avouer que je me suis perdu dans des boucles....
dimanche 27 février 2005 à 16:49:16 | Re : Problème de chaînes !!!

cqui789

Je ne voulait pas rester sur une critique sans proposer ma solution.

Je n'arrivait pas a enlever les premiers et derniers mots si necessaire, il sufisait de rajouter un espace de chaque cote et enlever les + resultants apres...


Function TraiteChaine(ByVal LaChaine As String) As String
Dim PosEsp As Integer, PosEspSuiv As Integer, chaine As String
  ' on ajoute des espaces pour traiter automatiquement les premier et dernier mots
  chaine = " " & LaChaine & " "
  PosEsp = 1 ' position du premier espace, celui qu'on vient de rajouter
  Do Until PosEsp = 0 ' tant qu'il y a un espace a traiter
    ' pointe sur l'espace suivant si il est a moins de 5 positions
    PosEspSuiv = InStr(Mid$(chaine, PosEsp + 1, 5), " ")
    ' remplace l'espace et le mot eventuel par un +
    chaine = Left$(chaine, PosEsp - 1) & "+" & Mid$(chaine, PosEsp + 1 + PosEspSuiv, Len(chaine))
    ' ne passe a l'espace suivant que si pas trouve de mot a remplacer pour le cas de plusieurs mots de moins de 5 lettres se suivant
    If PosEspSuiv = 0 Then PosEsp = InStr(chaine, " ")
  Loop
  ' si au moins un mot de + de 5 lettres trouve, on retire les "+" du debut et de la fin
  TraiteChaine = IIf(Len(chaine) > 2, Mid$(chaine, 2, Len(chaine) - 2), "")
 
End Function


mardi 1 mars 2005 à 09:22:40 | Re : Problème de chaînes !!!

crenaud76

Je détecte tous les mots, quel que soit leur longueur ! je ne m'arrete pas au mot de 9 lettres c'est mon test '< 10' qui vous fait penser cela ?
Le Lenb() retourne la longueur d'une chaine ... en octet, donc le double d'un Len() ! C'est pourquoi, afin de stopper les mots de mois de cinq lettre je fait un test de Lenb(Mot(i)) par rapport à 10 (=5*2).
Pourquoi utiliser Lenb() plutot que Len() !! Car Lenb() est plus rapide que Len(). En effet, Len() fait appel à Lenb et ensuite, il divise le résultat par deux !! On gagne donc une division par deux (d'accord c'est une opération tres rapide : décalage d'un bit sur la droite) mais c'est toujours ca de gagner ! j'ai l'habitude de l'utiliser quand ca ne complique pas le code.
Pour ce qui est des + en début et en fin (je n'avais pas fait attention car j'ai pondu le code sans le tester ) Il suffit de remplacer la dernière ligne par TRaiteChaine = Mid$(Buffer, 2, Len(Buffer)-2) ! Et la, ce n'est pas un Lenb() !! C'est bien un Len() !!
Pour ce qui est de al version Split() en vB5, il existe plein de version de cette fonction (il y en a sans doute içi meme sur ce site, je n'ai pas regardé mais je doute fort que cette question n'ai jamais trouvé de solution !)Sans doute Idem pourle Join() qui doit aussi te manquer en VB5

Christophe R


Cette discussion est classée dans : problème, poste, travail, chaînes


Répondre à ce message

Sujets en rapport avec ce message

PB après installation sur Win 95 [ par Nelly ] Bonjour a tous, voilà mon problème : j'ai développé sur mon poste qui est en Windows95 une appli sous VB6 qui ouvre des bases access et exporte de Problème de librairie [ par spikespiegelsan ] J'ai développé en macro Excel VBA (sous Excel 97) une macro qui utilise des fonctions telles que CURDIR ou MID.Ca fonctionne sur mon poste, mais pas s Poste de travail [ par NHenry ] Comment ouviri le poste de travail, le voisinage réseau, un raccourcis, ... à partir de VB? Merci d'avance. Retour à la ligne [ par sebcar2001 ] Bonjour,Je suis débutant en vb et j'ai un problème.Je cherche à découper des chaînes de caractères avec une instruction Mid. Jusque là aucun problème. problème de dll avec crystal report [ par yoda ] Amis développeur,Je bosse depuis peu sous VB.net et je n'arrive pas à imprimer sur un poste autre que mon poste de développement. Je m'explique....J'a Problème d'installation [ par Tatar ] Bonjour a tous,j'ai fait un programme en VB6 et j'essaie de l'installer sur des portables. Manque de pot, sur les portable, il ne marche pas complètem Objet OLE [ par cybersix ] Bonjour,Voici mon petit problème.J'affiche un fichier word (*.doc) via un objet OLE, l'exécution du programme sur mon poste se déroule sans problème, Problème avec la commande "Chr()" sur mon PC [ par mastere30 ] Bonjour tlm,j'ai une application VBA-Word développée par mes soins au travail. En voulant la reprendre à la maison, en passant sur un "Chr(10)" ou 11, Gestion d'équipes de travail [ par lap2 ] Salut,Je débute en prog et je suis confronté à un problème. Je voudrait pouvoir créer un programme qui me permettrait de savoir comment je travaillera ??? ICONE DU POSTE DE TRAVAIL ??? [IMPORTANT] [ par ScSami ] Comment obtenir l'icone du poste de travail ???Bien entendu, je veux celui utilisé (pas celui par défaut) !Et aussi, dans la foullé, celui de la corbe


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales