Gestion de séparateur [Résolu]

maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 15:53 - Dernière réponse : jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

34 réponses

Meilleure réponse
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 8 févr. 2007 à 09:37
3
Merci
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

Merci jrivet 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de jrivet
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 7 févr. 2007 à 16:01
0
Merci
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:
Commenter la réponse de drikce06
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 16:04
0
Merci
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
Commenter la réponse de maxsecurite2
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 7 févr. 2007 à 16:10
0
Merci
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
Commenter la réponse de hvb
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 7 févr. 2007 à 16:14
0
Merci
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
Commenter la réponse de hvb
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 16:17
0
Merci
j'arrive pas à faire fonctionner ce code désole je vais encore essayer

123
Commenter la réponse de maxsecurite2
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 7 févr. 2007 à 16:24
0
Merci
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
Commenter la réponse de hvb
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 16:32
0
Merci
mince oui désolé petite erreur c'est pas du .net :s

123
Commenter la réponse de maxsecurite2
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 7 févr. 2007 à 16:40
0
Merci
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
Commenter la réponse de hvb
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 16:42
0
Merci
je cherche je cherche ;)
mais bon je suis un débutant donc...

123
Commenter la réponse de maxsecurite2
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 7 févr. 2007 à 17:22
0
Merci
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
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 7 févr. 2007 à 17:24
0
Merci
Gaffe !  J'ai oublié d'ajouter Close #1 après Wend !
Rajoute-le
Commenter la réponse de jmfmarques
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 17:37
0
Merci
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
Commenter la réponse de maxsecurite2
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 7 févr. 2007 à 18:15
0
Merci
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....
Commenter la réponse de jmfmarques
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 18:23
0
Merci
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
Commenter la réponse de maxsecurite2
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 7 févr. 2007 à 18:30
0
Merci
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 !!!!
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 7 févr. 2007 à 18:33
0
Merci
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 +
Commenter la réponse de jmfmarques
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 18:35
0
Merci
je vais essayer ta technique mais bon cela me parait étrange ;)

123
Commenter la réponse de maxsecurite2
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 7 févr. 2007 à 18:41
0
Merci
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.
Commenter la réponse de jmfmarques
maxsecurite2 181 Messages postés vendredi 3 janvier 2003Date d'inscription 9 avril 2010 Dernière intervention - 7 févr. 2007 à 18:45
0
Merci
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
Commenter la réponse de maxsecurite2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.