Gestion de séparateur

Résolu
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010 - 7 févr. 2007 à 15:53
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 8 févr. 2007 à 11:20
Bonjour,
j'ai un fichier texte de 25 lignes avec des inscriptions séparées par des ##@##
exemple :

                TOMATE ##@## BON
                POIREAU ##@## PASBON
                etc...

j'aimerai créer un petit module permettant de vérifier si dans un textbox est présent TOMATE ou POIREAU et si oui alors de remplacer tomate par "BON" et poireau par "PASBON" sachant que le fichier de 25 lignes peut augmenter il est préférable de ne pas liste sur le projet en lui même "TOMATE" "POIREAU" etc... ;)

le contenu du textbox est "j'adore les courgettes c'est très tomate en revanche les poivrons c'est poireau"

j'espère m'être fait comprendre :D
d'avance merci

123

34 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 févr. 2007 à 09:37
MAIS QUEL BLAIREAU J OUBLIE LE CODE.

Option Explicit 

Private C_Concordance As New Collection 

Private Sub Form_Load() 
Dim NumFile As Integer 
Dim Ligne As String 
Dim Split_Ligne() As String 

    NumFile =  FreeFile 

    Open "C:\Test.txt" For Input As NumFile 
        While Not  EOF (NumFile) 
            'On lit ligne par ligne le fichier de correspondance
            Line Input #NumFile, Ligne 
            'On "casse" la ligne suivant le séparateur ","
            ' => toi tu peux mettre "##@##" si tu veux
            Split_Ligne =  Split(Ligne, ",") 
            'On ajoute à notre collection l'élément a droite du séparateur
            'avec en Clé l'élément de gauche
            Call C_Concordance.Add( Trim (Split_Ligne(1)), Trim(Split_Ligne(0))) 
        Wend 
    Close NumFile 

    'Juste pour la présentation
    Me.Width  = 6915 
    Text1.Width =  6045 
    Text2.Width = 6045 
    Text1.Text = "j'adore les courgettes c'est très tomate en revanche les poivrons c'est poireau" 
End Sub 

Private Sub Text1_KeyPress(KeyAscii As Integer) 
    'Si l'utilisateur appuie sur la touche entree du textbox1
    If KeyAscii = vbKeyReturn Then Text2.Text = ReplacePhrase(Text1.Text) 
End Sub 

Private Function ReplacePhrase(ByVal Phrase As String) As String 
Dim Mots() As String 
Dim i As Integer 
    'On récupère tout les mots de la phrase
    Mots = Split(Phrase) 
    'Pour chaque motes de la phrase on le remplace
    'éventuellement par le mots souhaités
    For i =  LBound (Mots) To UBound(Mots) 
        ReplacePhrase  = ReplacePhrase & GetConcordance(Mots(i)) & " " 
    Next 
End Function 

Private Function GetConcordance(ByVal StrVal As String) As String 
On Error GoTo HandleError 
    'petite fonction permettant de récupérer
    'dans la collection l'élément correspondant a une clé
    GetConcordance = C_Concordance(StrVal) 
Exit Function 
HandleError: 
    'Si la clé est absente => erreur d'execution donc
    'la fonction retourne le mot d'entrée
    GetConcordance = StrVal 
End Function 

@+: Ju£i?n
Pensez: Réponse acceptée
3
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
7 févr. 2007 à 16:01
Salut, vois du coter des sources et topics sur le sujet, ce n'est pas ce qui manque! Codix également! Et après voir l'utilisation des fonction split, instr, replace etc...

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 16:04
je le fait en ce moment même Drikce06 mais bon si quelqu'un peut m'aider c'est mieux normal ;) merci quand même d'avoir prêté attention à ma demande
bonne journée Drikce06

123
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
7 févr. 2007 à 16:10
ce bête petit exemple devrait te permettre de regler ton problème :

' Dim i As Integer

Dim res()
As
String

Dim a
AsString "blaxxxblaxxxblaxxxblaxxxbla"res a.Split(

"xxx".ToCharArray, StringSplitOptions.RemoveEmptyEntries)

For i = 0
To res.GetUpperBound(0)MsgBox(res(i))

Next

Hvb aka Batto
bato.ltd at gmail.com
0

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

Posez votre question
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
7 févr. 2007 à 16:14
j'avais même pas vu qu'il y avait des reponses, desolé.
Au passage Drikce06, il est preferable, en .net, d'utiliser tastring.IndexOf plutot que "instr" car la premiere est integré au framework et marchera donc pour touts les langages .Net 

Hvb aka Batto
bato.ltd at gmail.com
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 16:17
j'arrive pas à faire fonctionner ce code désole je vais encore essayer

123
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
7 févr. 2007 à 16:24
J'ai mis le "dim i as integer" en commentaires sans le faire exprès.
Et ce code est du .net, car tu as posté dans la catégorie .net, ce n'est pas le cas?

Dis moi ou est generée l'erreure...

Hvb aka Batto
bato.ltd at gmail.com
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 16:32
mince oui désolé petite erreur c'est pas du .net :s

123
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
7 févr. 2007 à 16:40
ce n'est pas très different en vb6, comme l'a dit Drikce, fais une recherche sur la fonction split...

Hvb aka Batto
bato.ltd at gmail.com
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 16:42
je cherche je cherche ;)
mais bon je suis un débutant donc...

123
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 17:22
Bonjour maxsecurite2,

J'ai peut-être tort de penser celà, mais il me semble que tu t'es lancé dans une acrobatie bien inutile, avec tes séparateurs ##@##...

Regarde (pour le cas où) ce que fais ceci :

Une form avec 1 bouton de commande command1

Code :

Private Sub Command1_Click()
  Open "d:\voilou.txt" For Input As #1
  While Not EOF(1)
    Input #1, toto, tata
    MsgBox toto & " " & tata
  Wend
End Sub


Private Sub Form_Activate()
  Open "d:\voilou.txt" For Output As #1
    Write #1, "poireau", "bon"
    Write #1, "tomate", "pas bon"
    Write #1, "alors ?", "c'est bon ?"
  Close #1
End Sub

Remplace chez toi le chemin de fichier que j'ai mis en rouge. 
Voilà déjà une manière simple ! Il en existe une encore meilleure mais plus complexe et elle n'est pas utile pour seulement 25 lignes
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 17:24
Gaffe !  J'ai oublié d'ajouter Close #1 après Wend !
Rajoute-le
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 17:37
non non il ne faut surtout pas que les noms soient visibles dans le projet d'ou mon "acrobatie bien inutile" :) merci quand même de m'avoir aidé franchement je despère je trouve pas c'est bien triste

123
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 18:15
Euh....

Tu n'as apparemment pas compris ce que je te disais !

si ton fichier est construit comme le fait l'événement activate :

tu n'as plus besoin de l'écrire ainsi :

    TOMATE ##@## BON
     POIREAU ##@## PASBON

qui t'oblige à utiliser instr avec  ##@##  (pour savoir si Tomate est bon ou pas bon !) : tu le sais imédiatement
rien ne t'empêche, si tu le préfères, de faire ton fichier texte à la main !
Voilà la tête qu'il faut qu'il aie :

"poireau","bon"
"tomate","pas bon"
"alors ?","c'est bon ?"

C'est tout !

pour le reste (qui est autre chose) tu utilises le Replace comme celà t'a été signalé.
Enfin ! Fais comme tu l'entends, ma foi....
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 18:23
voici ton code :)

Private Sub Command1_Click()
  Open "d:\voilou.txt" For Input As #1
  While Not EOF(1)
    Input #1, toto, tata
    MsgBox toto & " " & tata
  Wend
End Sub Private Sub Form_Activate()
  Open "d:\voilou.txt" For Output As #1
    Write #1, "poireau", "bon"
    Write #1, "tomate", "pas bon"
    Write #1, "alors ?", "c'est bon ?"
  Close #1
End Sub

donc forcément je dois écrire poireau tomate alors et sa il ne le faut surtout pas voila ce que je veut dire [auteurdetail.aspx?ID=615490 jmfmarques]

123
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 18:30
Je suis sourd, ou tu es muet...

Allons donc :
Voilà ce que tu as écrit :
j'ai un fichier texte de 25 lignes avec des inscriptions séparées par des ##@##
exemple :

                TOMATE ##@## BON
                POIREAU ##@## PASBON
                etc...

Il a bien fallu l'écrire, ce fichier, non ? (à la main ou autrement, mais l'écrire !)
et que tu pourrais très avantageusement remplacer par un fichier de 255 lignes écrites ainsi

"TOMATE ","BON"
 "POIREAU","PASBON"
etc..

ce qui ferait que tu n'aurais plus à utiuliser du tout Instr !!!!
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 18:33
Ecoute...
Je vais te laisser te dépatouiller un peu....
Quand tu auras terminé : montre ta solution et je te montrerai alors comment y arriver bien plus agilement avec ce que je t'ai exposé...
A +
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 18:35
je vais essayer ta technique mais bon cela me parait étrange ;)

123
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 18:41
Un coup de pouce :
D  ans ce bout de code (voir plus haut) :
Input #1, toto, tata

toto est ton article (tomare, etc...) et tata est sa qualité (non, pas bon...)

Dans ta textbox :
1) tu vois si tu as écrit le mot poireau
2) tu cherches (boucle) dans ton fichier (les valeurs toto) la correspondance (tata) pour toto = "poireau"
3) tu remplaces "poireau" par la valeur de tata ...


 


Vas-y en confiance.
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
7 févr. 2007 à 18:45
franchement j'ai essayé et je crois que je ne comprend pas ton code source malheuresement c'est quoi toto tata si c'est pour représenter une ligne sachant que la liste peut évoluer c'est compliqué :) je pense que l'on c'est mal compris ou c'est moi qui comprend rien (c'est fort possible) mais jespère que avant ce soir je saurai faire ce que je recherche et en tout cas ne crois pas que je critique ton code [auteurdetail.aspx?ID=615490 jmfmarques]

123
0
Rejoignez-nous