Recherche dans un fichier texte occurence d'une variable

cs_gni Messages postés 3 Date d'inscription lundi 1 septembre 2003 Statut Membre Dernière intervention 19 novembre 2004 - 18 nov. 2004 à 15:53
cs_gni Messages postés 3 Date d'inscription lundi 1 septembre 2003 Statut Membre Dernière intervention 19 novembre 2004 - 19 nov. 2004 à 20:52
Bonjour,

je crée à partir d'un fichier un autre fichier
comme une suite de valeur numerique séparée par un retour chariot comme suit

1122334455663
1111111111111
1111111111111
1111111111111
1111111111111
3344444444444
...

Ce fichier est trés long et à partir de ce fichier mon programme vb va en fonction de l'existence et du nombre x de la valeur numérique
faire x action

je n'arrive pas à faire cette routine par exemple pour l'exemple ci dessus si je cherche 1111111111111 mon programme va effectuer 4 actions
dois je garder mon fichier de recherche comme cela ou créer un fichier indexé (mais je n'ai pas trouvé d'aide en vb pour cela) pour facilité ma recherche

merci d'avance

/Nicolas

6 réponses

gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
18 nov. 2004 à 16:07
Salut gni,

1er exemple de base : dérouler toutes les lignes de ton fichier et compter le nb de fois que tu trouves strictement la chaine que tu veux (comprendre par sctrictement que la ligne lue est IDENTIQUE à la chaine recherchée (on pourrait faire la ligne lue contient la chaine recherchée)

public sub Essai(p_Chaine as string)
dim NumFichier as integer ' n° de fichier
dim NomFichier as string ' nom du fichier
dim Compteur as integer ' compteur d'occurence
dim Ligne as string ' ligne lue

NumFichier = Freefile ' init de l'index du fichier
NomFichier = "c:\toto.txt" ' défini le nom du fichier
compteur = 0 ' init du compteur d'occurence

' ouverture du fichier en mode lecture
open Nom Fichier for input as NumFichier
' boucle tant que ce n'est pas la fin du fichier
do while not eof(NumFichier)
' récupère la ligne de texte
Line Input #NumFichier, Ligne
' compare la ligne récupérée à la chaine de caractère recherchéeif ligne p_chaine then compteur compteur + 1
loop

end sub

tu peux remplacer if ligne p_chaine then compteur compteur + 1
par
if instr(ligne,pchaine)>0 then compteur=compteur+1
(la fameuse variante qui dit que la chaine est contenue dans la ligne texte

Bon courage Guich
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
18 nov. 2004 à 16:10
xcuz, t'en fait une fonction et tu retourne le nb d'itérations trouvées

> public function Essai(p_Chaine as string) as integer
tu colles tout le code que je t'ai mis plus haut puis

return compteur
End function
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
18 nov. 2004 à 16:13
Maintenant, selon ton besoin, on pourrait aussi imaginer une fonction qui déroule tout ton fichier, et liste toutes les chaines de textes différentes et compte le nombre de fois que chacune apparait.

Si ça t'intéresse, je te donne du code, mais là je dois m'absenter 10-15 minutes.

Sinon, bon courage pour la suite de ton projet

Guich
0
cs_gni Messages postés 3 Date d'inscription lundi 1 septembre 2003 Statut Membre Dernière intervention 19 novembre 2004
18 nov. 2004 à 16:26
Merci beaucoup pour ton aide et ta rapidité Guich.

je vais commencer à travaillé sur ce code.
sinon pour le code qui prepare le fichier pour faire

chaine1 1
chaine2 4
chaine3 3

je ne sais pas encore, en fait mon code peut preparer ce fichier(mais je dois le modifier, je veux bien ton code)
mais en fait le plus important c'est l'accés au fichier quand je recherche l'occurence (en terme de rapidité)
merci de vos conseils.

Nicolas
0

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

Posez votre question
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
18 nov. 2004 à 17:08
voila un code testé ok :

Public Type Chaine
AChercher As String
NbOccurences As Integer
End Type

Public Type MonTab
Chaines() As Chaine
NbChaines As Integer
End Type

Public MaRecherche As MonTab
Sub main()
FxImport
FxExport
End Sub

Public Sub FxImport()
Dim NumFichier As Integer
Dim NomFichier As String
Dim i As Integer
Dim Ligne As String

MaRecherche.NbChaines = 0
NumFichier = FreeFile
NomFichier = "c:\src.txt"

Open NomFichier For Input As NumFichier
Do While Not EOF(NumFichier)
Line Input #NumFichier, Ligne

If MaRecherche.NbChaines <> 0 Then
For i = 1 To MaRecherche.NbChaines
If MaRecherche.Chaines(i).AChercher = Ligne Then
MaRecherche.Chaines(i).NbOccurences = MaRecherche.Chaines(i).NbOccurences + 1
GoTo jump_Trouve
End If
Next i
End If
MaRecherche.NbChaines = MaRecherche.NbChaines + 1
ReDim Preserve MaRecherche.Chaines(MaRecherche.NbChaines)
MaRecherche.Chaines(MaRecherche.NbChaines).AChercher = Ligne
MaRecherche.Chaines(MaRecherche.NbChaines).NbOccurences = 1

jump_Trouve:
Loop
Close #NumFichier

End Sub

Public Sub FxExport()
Dim NumFichier As Integer
Dim NomFichier As String
Dim i As Integer

NumFichier = FreeFile
NomFichier = "c:\result.txt"

Open NomFichier For Append As NumFichier
For i = 1 To MaRecherche.NbChaines
Print #NumFichier, MaRecherche.Chaines(i).AChercher & vbTab & MaRecherche.Chaines(i).NbOccurences
Next i
Close NumFichier
End Sub

Par contre, dsl, j'ai pas eu le temps de commenté et je dois y aller, je t'explique le tout ce soir ou demain si tu veux.

En gros, j'ai un fichier d'entrée nommé src.txt qui contient
11111
22222
11111
33333
11111
22222

et il me crée un fichier nommé result.txt contenant
11111 3
22222 2
33333 1

par contre, si tu l'exécute plusieurs fois, les resultats vont s'inscrire à la suite les uns des autres, le fichier n'est pas recréé à chaque fois, mais ça c'est totu simple.

Bon courage
0
cs_gni Messages postés 3 Date d'inscription lundi 1 septembre 2003 Statut Membre Dernière intervention 19 novembre 2004
19 nov. 2004 à 20:52
Merci beaucoup de ton aide.
Comme c'est une application qui s'execute plusieurs fois j'hesite à passer par des fichiers lesquels je ne saurais supprimer.
mais je vais peut etre ameliorer mon programme car à la base le fichier
1111
2222
3333
4444

je l'obtiens à partir d'un fichier unicode.
mais je crois que je vais plutot parcourir ce fichier qui est deja present et le traiter.

@+

Nicolas Gni
0
Rejoignez-nous