IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Recherche de fichiers inconnus puis ouverture avec le FSO


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Géologue
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Niger

    Informations professionnelles :
    Activité : Géologue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 27
    Points
    27
    Par défaut Recherche de fichiers inconnus puis ouverture avec le FSO
    Bonjour,

    Mon problème est l'ouverture de fichier texte de nom et d'emplacement inconnus.

    Je sais comment parcourir des répertoires et rechercher un fichier donner :

    Pour parcourir les répertoires, je sélectionne mon répertoire de départ avec :
    Set obFolder = objShell.BrowseForFolder (&H0&, "Select the folder to process", &H1&) en suite je fais la boucle suivante :For Each obFile In obFolder.Files -

    Je met dans cette boucle mes conditions de recherche qui portent sur le nom et ou le type du / des fichiers recherchés (ce sont des fichiers de type text, mais d'extension variable).

    La variable CheminFichier = obFolder & "\" & obFile me donne bien le chemin complet avec le nom du /des fichiers trouvés et qui correspondent bien à mes critères.

    Mon problème est le suivant : Je n'arrive pas à ouvrir le fichier trouvé avec FSO.OpenTextFile.

    Comment puis-je insérer CheminFichier ou obFolder et obFile ou obFile.Path (ou toutes autres variables) dans FSO.OpenTextFile pour ouvrir le fichier trouvé et l'utiliser.

    Dans tous les exemples trouvés, les chemins et noms de fichiers sont définis au départ et non pas recherché par le script ...

    Je vous remercie par avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Il est préférable de poster votre code et et de mentionner dans quelle ligne vous avez ce problème

  3. #3
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Sur quel critère cherches-tu ce fichier et tu veux l'ouvrir avec quel mode (écriture,Lecture,etc...) ou bien juste quand tu le trouve tu le lances et tu l'ouvre avec notepad ? ?
    Tu vois il y a tellement de questions que tu devrais répondre pour qu'on puisse s'entendre, sinon tu parles en générale et ta question est encore floue ? ?
    et je t'ai demandé de poster tout le code pas en partie éparpiller par ici et par là ???, on comprend rien de ton problème ???
    Sinon, inspires-toi de ce code [VBS] Moteur de recherche en Vbscript

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Géologue
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Niger

    Informations professionnelles :
    Activité : Géologue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Bonjour Hackoofr,

    Je te répond un peu tard car je suis loin ... au Niger, et surtout avec une connexion internet souvent lente est difficile et coûteuse!!! Je n'ai pas l'ADSL et me connecte avec une clef USB, normalement 3G .....

    C'est l’Afrique ici, dans toute sa splendeur et avec tout ses petits problèmes.

    Etant débutant et programmeur très amateur, je met pas mal de commentaire pour essayer de m'y retrouver .... tu risques donc de trouver mon code un peu brouillon?!

    L'erreur vient ligne 57 / 58. en fait ligne 57, la 58 étant en remarque dans la version présentée. L'erreur est la suivante : "Argument ou appel de procédure incorrect", code : 800A0005.

    En fait je dois sans doute déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	'Constant for reading & writting files
    	Const ForReading = 1
    	Const ForWriting = 2
    	Const ForAppending = 8 'pour ajouter à la fin
    comme je veut lire le fichier je ne devrais avoir besoin pour cette partie que de "ForReading", mais les autres constantes seront utiles pour écrire le fichier de sortie.


    Ma recherche de fichier se fait ici sur son extension (kml), je test donc ligne 54 si les 4 derniers caractère sont égaux à ".kml"

    En suite je veux ouvrir le fichier pour le lire et en extraire des coordonnées qui se trouvent ligne 53 sous la forme :

    "2.021381382353169,13.43211145007023,0 2.020600376251558,13.43279174649024,0 " : ce sont des blocs de 3 nombres. Les nombres étant séparés par une virgule et les blocs par un espace


    Voici donc mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    'Get Application object of the Windows shell.
    	Set objShell = WScript.CreateObject("Shell.Application")
     
    	'Get access to script folder And create the resulting file in it
    	Set FSO = CreateObject("Scripting.FileSystemObject")
    	PATH = FSO.GetParentFolderName(wscript.ScriptFullName) & "\"
     
    	'Ask the user to select a folder
    	Set obFolder = objShell.BrowseForFolder (&H0&, "Select the folder to process", &H1&)
    	'Keep obFolder for Sub programms
     
    	If Not obfolder IS Nothing Then 'si obfolder n'est pas rien!
     
    		'Wscript.echo "Repertoire : " & obFolder
    		'Wscript.echo "Ici on bosse!"
     
    		'Recherche des fichiez *.kml
    		ProcessFolder FSO, PATH, obFolder.self.Path
     
    		MsgBox "Finished"
     
    		Else
     
    			MsgBox "Canceled"
     
    	End If
     
     
    Sub ProcessFolder(FSO, PATH, FolderPath)
     
    	'Wscript.echo "ob Folder (ligne 122) = " & obfolder
     
    	'Get access to the folder
    	Set obFolder = FSO.GetFolder(FolderPath)
     
    	Dim FileName 'Déclarer la variable permet de l'utiliser dans les différents sous programmes
    	Dim Chemin
    	Dim CheminFichier
     
    	'Loop on all the files And process each of them
    	For Each obFile In obFolder.Files
     
    		'Regarde si fichiers présent dans le répertoire
     
    		'FileName = obFile.Name
    		Chemin = obFolder & "\"
    		'Wscript.echo "1 Le chemin est : " & Chemin
    		CheminFichier = obFolder & "\" & obFile.Name
    		'Wscript.echo "1 Le chemin du fichier est : " & CheminFichier
    		'Wscript.echo "1 Le nom du fichier est : " & obFile.Name
     
     
    		If (StrComp(Right(obFile.Name, 4), ".kml", 1) = 0) THEN	
     
    			Wscript.echo "2 Le chemin du fichier est : " & obFile.Path
    			FSO.GetFile (obFile)
    			RL = FSO.OpenTextFile(obFile, ForReading, True)
    			'RL = FSO.OpenTextFile(obFolder & "\" & obFile.Name, ForReading, True)
    			Lignelue = Rl.ReadLine
     
     
    		End If
    	Next
     
    	'Loop on all the subfolders And process each of them
    	'For Each obSubFolder In obFolder.SubFolders
    	'	ProcessFolder FSO, PATH, obSubFolder.Path
    	'Next
     
    End Sub

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Géologue
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Niger

    Informations professionnelles :
    Activité : Géologue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 27
    Points
    27
    Par défaut suite!
    Le fait de déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			'Constant for reading & writting files
    			Const ForReading = 1
    			Const ForWriting = 2
    			Const ForAppending = 8 'pour ajouter à la fin
    me donne le message d'erreur : Redéfinition de nom :'ForReading'; code : 800A04111 pour la ligne ligne 56

    Et ne résous pas mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    'Get Application object of the Windows shell.
    	Set objShell = WScript.CreateObject("Shell.Application")
     
    	'Get access to script folder And create the resulting file in it
    	Set FSO = CreateObject("Scripting.FileSystemObject")
    	PATH = FSO.GetParentFolderName(wscript.ScriptFullName) & "\"
     
    	'Ask the user to select a folder
    	Set obFolder = objShell.BrowseForFolder (&H0&, "Select the folder to process", &H1&)
    	'Keep obFolder for Sub programms
     
    	If Not obfolder IS Nothing Then 'si obfolder n'est pas rien!
     
    		'Wscript.echo "Repertoire : " & obFolder
    		'Wscript.echo "Ici on bosse!"
     
    		'Recherche des fichiez *.kml
    		ProcessFolder FSO, PATH, obFolder.self.Path
     
    		MsgBox "Finished"
     
    		Else
     
    			MsgBox "Canceled"
     
    	End If
     
     
    Sub ProcessFolder(FSO, PATH, FolderPath)
     
    	'Wscript.echo "ob Folder (ligne 122) = " & obfolder
     
    	'Get access to the folder
    	Set obFolder = FSO.GetFolder(FolderPath)
     
    	Dim FileName 'Déclarer la variable permet de l'utiliser dans les différents sous programmes
    	Dim Chemin
    	Dim CheminFichier
     
    	'Loop on all the files And process each of them
    	For Each obFile In obFolder.Files
     
    		'Regarde si fichiers présent dans le répertoire
     
    		'FileName = obFile.Name
    		Chemin = obFolder & "\"
    		'Wscript.echo "1 Le chemin est : " & Chemin
    		CheminFichier = obFolder & "\" & obFile.Name
    		'Wscript.echo "1 Le chemin du fichier est : " & CheminFichier
    		'Wscript.echo "1 Le nom du fichier est : " & obFile.Name
     
     
    		If (StrComp(Right(obFile.Name, 4), ".kml", 1) = 0) THEN	
     
    			'Constant for reading & writting files
    			Const ForReading = 1
    			Const ForWriting = 2
    			Const ForAppending = 8 'pour ajouter à la fin
     
     
    			Wscript.echo "2 Le chemin du fichier est : " & obFile.Path
    			FSO.GetFile (obFile)
    			Set RL = FSO.OpenTextFile(obFile, ForReading, True)
    			'RL = FSO.OpenTextFile(obFolder & "\" & obFile.Name, ForReading, True)
    			Lignelue = Rl.ReadLine
     
     
    		End If
    	Next
     
    	'Loop on all the subfolders And process each of them
    	'For Each obSubFolder In obFolder.SubFolders
    	'	ProcessFolder FSO, PATH, obSubFolder.Path
    	'Next
     
    End Sub

  6. #6
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    As-tu essayé d'ouvrir ton fichier avec cette syntaxe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set RL = FSO.OpenTextFile(obFile, ForReading, True)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Géologue
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Niger

    Informations professionnelles :
    Activité : Géologue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Bonjour PC75,

    oui c'est bien la syntaxe utilisée dans mon dernier code.....

  8. #8
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Citation Envoyé par topor Voir le message
    Le fait de déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			'Constant for reading & writting files
    			Const ForReading = 1
    			Const ForWriting = 2
    			Const ForAppending = 8 'pour ajouter à la fin
    me donne le message d'erreur : Redéfinition de nom :'ForReading'; code : 800A04111 pour la ligne ligne 56
    Je dirais que l'erreur est "logique", puisque tu déclares tes constantes dans une boucle. Donc, au deuxième passage, les déclarations sont déjà faites.
    Il faut que tu sortes tes déclarations de ta boucle for.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Géologue
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Niger

    Informations professionnelles :
    Activité : Géologue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Hi Hi Hi!

    Autant pour moi ... je vais tester cela en mettant ces déclaration hors de la boucle.

    Merci pour la remarque

  10. #10
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 197
    Points
    17 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    'Get Application object of the Windows shell.
    	Set objShell = WScript.CreateObject("Shell.Application")
     
    	'Get access to script folder And create the resulting file in it
    	Set FSO = CreateObject("Scripting.FileSystemObject")
    	PATH = FSO.GetParentFolderName(wscript.ScriptFullName) & "\"
     
    	'Ask the user to select a folder
    	Set obFolder = objShell.BrowseForFolder (&H0&, "Select the folder to process", &H1&)
    	'Keep obFolder for Sub programms
     
    	If Not obfolder IS Nothing Then 'si obfolder n'est pas rien!
     
    		'Wscript.echo "Repertoire : " & obFolder
    		'Wscript.echo "Ici on bosse!"
     
    		'Recherche des fichiez *.kml
    		ProcessFolder FSO, PATH, obFolder.self.Path
     
    		MsgBox "Finished"
     
    		Else
     
    			MsgBox "Canceled"
     
    	End If
     
     
    Sub ProcessFolder(FSO, PATH, FolderPath)
     
    	'Wscript.echo "ob Folder (ligne 122) = " & obfolder
     
    	'Get access to the folder
    	Set obFolder = FSO.GetFolder(FolderPath)
     
    	Dim FileName 'Déclarer la variable permet de l'utiliser dans les différents sous programmes
    	Dim Chemin
    	Dim CheminFichier
     
    	'Loop on all the files And process each of them
    	For Each obFile In obFolder.Files
     
    		'Regarde si fichiers présent dans le répertoire
     
    		'FileName = obFile.Name
    		Chemin = obFolder & "\"
    		'Wscript.echo "1 Le chemin est : " & Chemin
    		CheminFichier = obFolder & "\" & obFile.Name
    		'Wscript.echo "1 Le chemin du fichier est : " & CheminFichier
    		'Wscript.echo "1 Le nom du fichier est : " & obFile.Name
     
     
    		If (StrComp(Right(obFile.Name, 4), ".kml", 1) = 0) THEN	
     
    			Wscript.echo "2 Le chemin du fichier est : " & obFile.Path
    			FSO.GetFile (obFile)
    			RL = FSO.OpenTextFile(obFile, ForReading, True)
    			'RL = FSO.OpenTextFile(obFolder & "\" & obFile.Name, ForReading, True)
    			Lignelue = Rl.ReadLine
     
     
    		End If
    	Next
     
    	'Loop on all the subfolders And process each of them
    	'For Each obSubFolder In obFolder.SubFolders
    	'	ProcessFolder FSO, PATH, obSubFolder.Path
    	'Next
     
    End Sub
    Je me permet d'intervenir, pour que des programmeurs débutants ne soient pas induit en erreur, car ligne 36 il est indiqué en commentaire 'Déclarer la variable permet de l'utiliser dans les différents sous programmes, ben non, puisque leurs portées n'est que pour la sub qui contient leurs déclarations.
    On entend en général pour un sous programme, qu'il est soit dans une Sub soit dans une Function
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Géologue
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Niger

    Informations professionnelles :
    Activité : Géologue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Merci ProgElecT,

    Pour ta remarque qui est la bien venue. Je vais essayer d'en tenir compte. Ce n'est pas facile de se lancer dans la programmation sans aide! et j’apprécie bien votre forum, même s'il ne m'et pas toujours facile d'y accéder ou d'y faire des recherche vu la lenteur de ma connexion.

Discussions similaires

  1. Ouvrir un fichier sans le "locker" avec les FSO
    Par kacedda dans le forum VBScript
    Réponses: 12
    Dernier message: 29/05/2008, 11h03
  2. Recherche de fichiers puis copier avec chemin
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 01/06/2007, 11h54
  3. [VBA]Problème avec les critères d'une recherche de fichier
    Par lucho013 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/04/2007, 23h40
  4. Recherche des fichiers avec ksh
    Par mzt.insat dans le forum Linux
    Réponses: 3
    Dernier message: 15/05/2006, 22h51
  5. Réponses: 2
    Dernier message: 16/06/2005, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo