Extraction des ID souhaités parmis d'autres ID

Résolu
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013 - 2 févr. 2012 à 13:07
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013 - 6 févr. 2012 à 17:31
Bonjour,

J'ai un fichier txt avec plein d'identifiant et je souhaiterais extraire seulement ceux que je veux en fonction d'un chiffre clé (catégorie):

Exemple :
155;12345678901
155;12541212525
155;15312124411
etc....

Je souhaiterais récupérer uniquement ceux avec la catégorie "3". Ma fonction ne fonctionne pas puisque mon fichier de sortie est vide!

Voici mon script qui me permet d'avoir ce fichier txt.

Dim FSO, LeFichier, CheminNomFichier, sFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile("\\monserveur\fichier2.txt")
categorie = Mid(sID, 7, 1)
Const ForReading = 1
CheminNomFichier = "\\monserveur\ficdepart.txt"
Set LeFichier = fso.OpenTextFile(CheminNomFichier,ForReading)
sFile = LeFichier.ReadAll
Set oRegEx = New RegExp
' définition du pattern
oRegEx.Pattern = "155 \d{11}"
oRegEx.Global=True
Set Matches = oRegEx.Execute(sFile)
For Each Match in Matches
sID = sID & vbCrLf & Match.Value
sID = Replace(sID, " ",";")
Next
'MsgBox sID
'Pour écrire dans le fichier texte
With MonFic
if categorie = "8" Then 'Valeur à modifier selon catégorie recherchée
End If
.writeLine sID
End with
Monfic.close

21 réponses

genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 17:31
Le problème est solutionné. Merci de l'intérêt que vous avez porté sur ce sujet.
Ce sujet est désormais résolu.
A bientôt

Const ForReading 1, ForWriting 2
Dim fso, WShShell, fic_depart, fic_tmp, fic_final, sFile, lect, ecr
Dim Var_depart, Var_tmp, Var_final, Texte, categorie
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
fic_depart = "\\monserveur\fichier1.txt"
fic_tmp = "\\monserveur\fichiertmp.txt"
fic_final = "\\monserveur\fichier2.txt"
 
'Saisie de la catégorie recherchée
Rech_cat = InputBox("Catégorie recherchée ?","Saisie")
 
'Lecture du fichier de départ
Set Var_depart = fso.OpenTextFile(fic_depart,ForReading)
sFile = Var_depart.ReadAll
Set oRegEx = New RegExp
oRegEx.Pattern = "155 \d{11}"
oRegEx.Global=True
Set Matches = oRegEx.Execute(sFile)
For Each Match in Matches
sID = sID & vbCrLf & Match.Value
sID = Replace(sID, " ",";")
Next
 
'Ecriture du fichier temporaire
Set Var_tmp = fso.CreateTextFile(fic_tmp)
With Var_tmp
.writeLine sID
End with
Var_depart.close
Var_tmp.close
 
'Lecture du fichier temporaire et écriture du fichier final
Set Var_final = fso.CreateTextFile(Fic_final) : Var_Final.close
Set lect = fso.OpenTextFile(Fic_tmp, ForReading)
Set ecr = fso.OpenTextFile(Fic_final, ForWriting)
While Not lect.AtEndOfStream
Texte = lect.ReadLine
Texte = Trim(Texte)
categorie = Mid(Texte, 7, 1)
if categorie = Rech_cat Then
ecr.Writeline Texte
End if	
Wend
lect.Close
ecr.Close
 
'Affichage du fichier final
if fso.FileExists(fic_tmp) Then fso.DeleteFile Fic_tmp, True 'Efface fichier temporaire
WSHShell.Run ("C:\WINDOWS\system32\notepad.exe " & fic_final) 'Ouvre fichier final avec notepad
WScript.Quit
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 févr. 2012 à 13:18
Bonjour,
1) je n'alourdirais personnellement pas mon appli en la chargeant de FSO. (Dir, de VB6, fait l'affaire).
2) ta question finale est donc tout simplement : comment, pour chaque ligne lue de ce fichier, vérifier si la valeur de son 7ème caractère est ou non "3" ?
=>>> fonction Mid !



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
2 févr. 2012 à 13:27
La fonction Mid est utilisé tout en haut de mon script?!!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 févr. 2012 à 13:30
J'ai nettoyé un peu ton code.
a adapter par la suite, mais te voilà avec une base propre :

Dim FSO, File, Match, Categorie
Set FSO = CreateObject("Scripting.FileSystemObject")

categorie = 3

Const ForReading = 1

Set File = FSO.OpenTextFile("a.txt", ForReading)
sContenu = File.ReadAll
File.close

With New RegExp
    .Pattern = "^155;\d\d" & categorie & "\d{8}"
    .Global=True
    .Multiline=True
    Set File = FSO.CreateTextFile("b.txt")
    For Each Match in .Execute(sContenu)
        File.writeLine Match.Value
    Next
    File.close
End with


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0

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

Posez votre question
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
2 févr. 2012 à 14:13
Merci pour ton travail. Le fichier se sortie b.txt est vide alors qu'ils y a bien des ID en catégorie 3.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 févr. 2012 à 14:54
pas vide chez moi...

la catégorie est bien ce '3' en septieme position ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
2 févr. 2012 à 17:10
oui c'est bien cela : 155;12345678901
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 11:38
Pour plus de détail sur mon problème merci de consulter ce lien : http://www.developpez.net/forums/d1176352-3/autres-langages/general-visual-basic-6-vbscript/vbscript/projet-creation-liste-partir-fichier-txt/#post6490043

Le problème reste identique partout. Le fichier des ID est bien créé. Mais c'est la fonction permettant de prendre uniquement une certaine catégorie qui ne marche pas. Cela me vide le fichier.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 12:41
Il nous faudrait aller consulter ce que tu as écrit sur un autre forum pour savoir ce dont tu parles !
Ben ... Non !
Tu l'exposes (et très clairement) ICI !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 12:52
Désolé. Ceci avait pour but de vous montrer le fichier de départ. Mon problème reste à l'identique au message que j'ai posté le jeudi 2 février 2012 à 13:07:24 dans ce FORUM.

Merci de votre aide
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 13:16
Et j'attends donc en ce qui me concerne que tu me montres ce que tu as écrit pour traiter chacune des lignes lues dans ton fichier.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 13:24
Allons bon ...
Et on va en profiter pour t'affranchir de cet inutile faux-ami FSO alors que VB6 t'offre tout !
Regarde ce que fait ceci :
Private Sub Command1_Click()
  Open "D:\bof.txt" For Input As #1
  Do While Not EOF(1)
   Line Input #1, toto
    If Mid(toto, 7, 1) = "3" Then MsgBox toto & " contient un 3 en 7ème position"
   Loop
End Sub

où bof.txt est le fichier qui contiendrait ce que "tu nous as montré"
Le reste, c'est ton affaire.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 13:37
et termine (oubli de le dire) par :
close #1
cela va de soi, mais ...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 14:34
Merci pour ta réponse. J'ai une erreur à la ligne open "\\monserveur\fichier2.txt". Expected end of statement.

Dim FSO, File, Match, Categorie
Set FSO = CreateObject("Scripting.FileSystemObject")

categorie = 3

Const ForReading = 1

Set File = FSO.OpenTextFile("\\monserveur\fichier1.txt", ForReading)
sContenu = File.ReadAll
File.close

With New RegExp
.Pattern = "^155;\d\d" & categorie & "\d{8}"
.Global=True
.Multiline=True
Set File = FSO.CreateTextFile("\\monserveur\fichier_2.txt")
For Each Match in .Execute(sContenu)
File.writeLine Match.Value
Next
File.close
End with

Private Sub Command1_Click()
Open "\\monserveur\fichier_2.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, toto
If Mid(toto, 7, 1) = "3" Then MsgBox toto & " contient un 3 en 7ème position"
Loop
End Sub
close #1
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 14:35
Voici mon fichier1 de départ :

ENTREPRISE
   6    RUE DES ROSES
76000 MONEXEMPLE CEDEX
         TEL 0125635262                            DANS TOUS VOS ECHANGES AVEC NOS EXEMPLES
                                                N'OMETTEZ PAS DE RAPPELER VOTRE IDENTIFIANT
 
 
 
 
                                               LE 19  JANVIER  2012
 
 
          155 12345678998                      MR   DUPOND FREDERIC
 
                                               RUE MANU EXEMPLE
                                               76150 MONEXEMPLE
 
          CREATION OU
           MODIFICATION
 
 
 
     dupond frederic -  TEL : 0103030250 (0,118 E/MN)   FAX :0152452552
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 14:38
Sous quoi développes-tu ? (j'aurais aimé pouvoir éviter cette question - vais-je recevoir un autre Message privé pour avoir "osé" de ta poser publiquement ?) !



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 14:41
et en plus (mais rien à voir avec ton message d'erreur) ton "fichier de départ" n'a pas la structure de celui montré par ton premier message !
Alors ?
Par quelles instructions exactes ce fichier a-t-il donc été écrit ?
Car le mode de lecture dépend largement du mode d'écriture


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 14:52
Voici l'intégralité de mon code de départ :

Dim FSO, LeFichier, CheminNomFichier, sFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile("\\monserveur\fichier2.txt")
categorie = Mid(sID, 7, 1)
Const ForReading = 1
CheminNomFichier = "\\monserveur\fichier1.txt"
Set LeFichier = fso.OpenTextFile(CheminNomFichier,ForReading)
sFile = LeFichier.ReadAll
Set oRegEx = New RegExp
' définition du pattern
oRegEx.Pattern = "155 \d{11}"
oRegEx.Global=True
Set Matches = oRegEx.Execute(sFile)
For Each Match in Matches
sID = sID & vbCrLf & Match.Value
sID = Replace(sID, " ",";")
Next
 
'Pour écrire dans le fichier texte
if categorie = "1" Then 'Valeur à modifier selon catégorie recherchée
MonFic.writeLine (sID)
End If
Monfic.close
 
With CreateObject("CDO.Message")
.From="mail@site.fr"
.To="mail@site.frr"
.Subject="ID à utiliser"
.TextBody="Voici les ID :           "
.AddAttachment("\\monserveur\fichier2.txt")
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "serveurmail"
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Configuration.Fields.Update
On Error Resume Next
.Send
If Err Then MsgBox "Le message n'a pas pu être expédié."
On Error GoTo 0
End With
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 févr. 2012 à 16:12
Sous quoi développes-tu ? (question posée pour la 2ème fois)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
genius2139 Messages postés 12 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 23 octobre 2013
6 févr. 2012 à 17:25
Avec l'application vbs Factory.
0
Rejoignez-nous