maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDernière intervention 9 avril 2010
-
7 févr. 2007 à 15:53
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 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"
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 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:
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDerniè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
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 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
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 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?
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
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDerniè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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 :
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDerniè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]
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 !!!!
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 +
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDerniè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]