Précédent   Forum des professionnels en informatique > Autres langages > Général Visual Basic 6 et VBScript > VBScript
VBScript Le forum d'entraide sur VBScript. Avant de poster -> La FAQ VBScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2012, 09h28   #1
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Par défaut Projet de création d'une liste à partir d'un fichier txt

Bonjour,

Un automate me extrait un fichier txt avec des informations et je dois en extraire uniquement les identifiants (exmple ci-dessous : 155 12345678998) et les lister dans un autre fichier txt.

Comment dois-je m'y prendre dans script vbs?

Merci par avance

exemple du contenu du fichier :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 16h04   #2
Membre du Club
 
Padawan Informaticien en recherche d'emploi (Bac+3 Administration des Systèmes et des Réseaux)
Inscription : novembre 2006
Messages : 67
Détails du profil
Informations professionnelles :
Activité : Padawan Informaticien en recherche d'emploi (Bac+3 Administration des Systèmes et des Réseaux)

Informations forums :
Inscription : novembre 2006
Messages : 67
Points : 51
Points : 51
Pour moi ça sent les expressions régulières à plein nez mais avant ça il faut trouver le moyen d'isoler de manière sûre la ligne qui vous intéresse.
Pour ça il faut analyser plusieurs lignes pour déterminer ce qui change et ce qui est commun.

Exemple si je prends la sortie (un extrait) de la commande ipconfig /all chez moi ça donne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Carte Ethernet Connexion au réseau local :
 
   Suffixe DNS propre à la connexion. . . :
   Description. . . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
   Adresse physique . . . . . . . . . . . : FF-FF-FF-FF-FF-FF
   DHCP activé. . . . . . . . . . . . . . : Oui
   Configuration automatique activée. . . : Oui
   Adresse IPv6 de liaison locale. . . . .: fe80::1%10(préféré)
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.1.21(préféré)
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Bail obtenu. . . . . . . . . . . . . . : jeudi 19 janvier 2012 15:29:34
   Bail expirant. . . . . . . . . . . . . : vendredi 20 janvier 2012 15:29:34
   Passerelle par défaut. . . . . . . . . : 192.168.1.1
   Serveur DHCP . . . . . . . . . . . . . : 192.168.1.1
   Serveurs DNS. . .  . . . . . . . . . . : 192.168.1.1
   NetBIOS sur Tcpip. . . . . . . . . . . : Activé
Si je veux récupérer l'adresse MAC (ici adresse physique) je vais déjà isoler la ligne en vérifiant qu'elle contient les termes "Adresse Physique". Jusque là pas besoin des expressions rationnelles. Ensuite il faut récupérer ce qui est après les deux points (là on a besoin des expressions rationnelles je pense ou sinon on peut utiliser split avec le eux point comme délimiteur dans ce cas là) et éventuellement un trim pour enlever les espaces blancs avant et après le texte.
C'était juste un exemple pour exposer le principe.
Là honnêtement ça m'a pas l'air très simple. Mais bon y'a bien une solution à apporter.
Pasokoniidesuka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 08h08   #3
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Tout d'abord merci pour ta réponse. J'ai cherché des exemples sur d'autres forum mais je ne comprends pas comment l'employer dans mon cas le SPLIT.
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 09h21   #4
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

- Existe-t-il un / des points communs pour tes identifiants (Ils commencent par les mêmes chiffres, ils ont la même longueur, ...)

- Cet identifiant est-il TOUJOURS sur la 13ème ligne et à la même position ?

Comme l'a écrit Pasokoniidesuka, il faut que tu sois capable d'isoler de manière certaine ton identifiant.
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h07   #5
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Oui 155 est toujours identique. Le fichier contient plusieurs identifiants dans le fichier.
Merci
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h14   #6
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Re,

Une piste ; tu lis ton fichier texte dans une boucle du style :

Code :
1
2
 
do while InStr(Texte, "155") > 0
Dans cette boucle, tu récupères l'identifiant et tu continues ta recherche.
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h56   #7
Rédacteur
 
Avatar de omen999
 
Inscription : février 2006
Messages : 787
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 787
Points : 1 982
Points : 1 982
bonjour,
le problème des expressions régulières tient à la construction du pattern qui est souvent complexe et difficile à assimiler pour le scripteur occasionnel
dans ton cas, si tous les ID du fichier commencent par 155 suivi d'un espace et de 11 autres chiffres, le pattern est très simple
(j'ai repris le contenu du fichier dans une variable sFile) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sFile = "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"
 
 
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   ' Itère la collection Matches.
  sID = sID & " " & Match.Value
Next 
MsgBox sID
__________________
nomen omen, nemo non omen
le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
pas de questions techniques par mp
omen999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h16   #8
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Merci beaucoup. Effectivement, je suis un débutant dans ce language et j'ai vraiment du mal! Si je souhaite faire appel au fichier txt contenant ces données? et récupérer les numéros d'identifications dans un nouveau fichier txt? comment dois je procéder?
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h41   #9
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Pour récupérer et les lire le fichier txt j'ai trouvé cette fonction
Code :
1
2
3
4
5
6
7
8
9
10
 
Const ForReading = 1, ForWriting = 2 
Dim oFso, f
 
  Set oFso = CreateObject("Scripting.FileSystemObject")
  Set f = oFso.OpenTextFile("d:\fichier.txt", ForReading)
  while Not f.AtEndOfStream 
     wscript.echo f.ReadLine
  Wend
  f.Close
La message box affiche vide

Pour écrire dans un nouveau fichier txt j'ai trouvé cette fonction
Code :
1
2
3
4
5
  Const ForWriting = 2
   Dim fso, f   
 
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("d:\fichier2.txt", ForWriting,true)
J'ai des éléments mais je n'arrive pas...
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h49   #10
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 2 934
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 56
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 2 934
Points : 4 147
Points : 4 147
Envoyer un message via MSN à ProgElecT
Salut

En lieux et place de wscript.echo, essais MsgBox f.ReadLine
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h54   #11
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
ça ne marche pas. Si j'utilise mon code en globalité combiné avec les derniers éléments ça me donne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Const ForReading = 1, ForWriting = 2
Dim oFso, f
 
  Set oFso = CreateObject("Scripting.FileSystemObject")
  Set f = oFso.OpenTextFile("d:\PO.txt", ForReading)
  while Not f.AtEndOfStream
 
WEND
 
Set oRegEx = New RegExp
' définition du pattern
oRegEx.Pattern = "155 \d{11}"
oRegEx.Global=True
Set Matches = oRegEx.Execute("d:\PO.txt")
For Each Match in Matches   ' Itère la collection Matches.
  sID = sID & " " & Match.Value
Next
MsgBox sID
 Const ForWriting = 2
   Dim fso, f   
 
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("d:\fichier2.txt", ForWriting,true)
Je crois je me suis beaucoup emmêlé les pinceaux!!
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h01   #12
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 2 934
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 56
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 2 934
Points : 4 147
Points : 4 147
Envoyer un message via MSN à ProgElecT
Il faut lire la totalité du fichier en une seule fois ReadAll
Code :
1
2
3
4
5
6
7
        Dim FSO, LeFichier
	Dim CheminNomFichier, sFile
Set fso = CreateObject("Scripting.FileSystemObject")
CheminNomFichier = "C:\PersoFrancis\FichierArray.txt"
Set LeFichier = fso.OpenTextFile(CheminNomFichier,1)
sFile= LeFichier.ReadAll
LeFichier.Close
il reste a appliquer la méthode proposé par omen999 avec la variable sFile (dans l'exemple)
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h09   #13
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Combiné avec la méthode de omen999 j'ai un message blanc qui s'affiche
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Dim FSO, LeFichier
	Dim CheminNomFichier, MeTbl
Set fso = CreateObject("Scripting.FileSystemObject")
CheminNomFichier = "d:\PO.txt"
Set LeFichier = fso.OpenTextFile(CheminNomFichier,1)
PourTbl = LeFichier.ReadAll
 
Set oRegEx = New RegExp
' définition du pattern
oRegEx.Pattern = "155 \d{11}"
oRegEx.Global=True
Set Matches = oRegEx.Execute(CheminNomFichier)
For Each Match in Matches   ' Itère la collection Matches.
  sID = sID & " " & Match.Value
Next
MsgBox sID
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h12   #14
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 2 934
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 56
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 2 934
Points : 4 147
Points : 4 147
Envoyer un message via MSN à ProgElecT
Set Matches = oRegEx.Execute(CheminNomFichier)
Code :
Set Matches = oRegEx.Execute(sFile)
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h17   #15
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 2 934
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 56
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 2 934
Points : 4 147
Points : 4 147
Envoyer un message via MSN à ProgElecT
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Dim FSO, LeFichier
	Dim CheminNomFichier, sFile
Set fso = CreateObject("Scripting.FileSystemObject")
CheminNomFichier = "d:\PO.txt"
Set LeFichier = fso.OpenTextFile(CheminNomFichier,1)
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   ' Itère la collection Matches.
  sID = sID & " " & Match.Value
Next
MsgBox sID
Desolé, je ne peux plus suivre, je retourne au travail
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h20   #16
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Merci. ça marche. Par contre, il me les alignes à la queuleuleu...
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h45   #17
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Maintenant je souhaite prendre les valeurs récupérés mais au lieu de m'afficher un message box, il doit me créer un 2ème fichiers pour stocker les ID récupérés. Cela me donne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim FSO, LeFichier , f
Dim CheminNomFichier, sFile
Set fso = CreateObject("Scripting.FileSystemObject")
CheminNomFichier = "d:\PO.txt"
Set LeFichier = fso.OpenTextFile(CheminNomFichier,1)
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   ' Itère la collection Matches.
  sID = sID & " " & Match.Value
Next
'MsgBox sID
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile("d:\fichier2.txt")
With MonFic 'Pour écrire dans le fichier texte
.writeLine  "sID"
End with
ça m'écrit tout bêtement sID au lieu d'insérer les ID !! Comment dois-je m'y prendre?
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h06   #18
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Re,

C'est le contenu de la variable qu'il faut écrire :

Code :
1
2
3
4
 
With MonFic 'Pour écrire dans le fichier texte
.writeLine  sID
End with
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h03   #19
Invité régulier
 
Homme
Technicien maintenance
Inscription : janvier 2012
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 69
Points : 5
Points : 5
Merci ça marche!

Maintenant que mon fichier est créé avec l'ensemble de mes ID, je souhaiterais qu'ils soient disposés non sur une ligne les uns à la suite des autres mais ligne par ligne. Comment dois-je procéder? Merci d'avance
genius2139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h57   #20
Rédacteur
 
Avatar de omen999
 
Inscription : février 2006
Messages : 787
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 787
Points : 1 982
Points : 1 982
ligne 13...
Citation:
sID = sID & vbCrLf & Match.Value
__________________
nomen omen, nemo non omen
le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
pas de questions techniques par mp
omen999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h26.


 
 
 
 
Partenaires

Hébergement Web