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 :

Ecriture fichier ligne par ligne, lancement impossible


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut Ecriture fichier ligne par ligne, lancement impossible
    Bonjour,

    Dans un vbs que j'ai fais, je voudrai qu'il puissent écrire des fichiers. A ce niveau là tout va bien. Seulement, j'aurais voulu que ces fichiers puissent être lancer, mais là impossible il ne veut pas ce lancer.

    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
    '------------------------------------------------------------------------------------------------
     
     
    Sub Ecriture_Fichier ( Nom_fichier,nombre_lignes,Fichier_Ecriture )
     
    	Dim fso, fichier, i, Verification
     
     
    	Set fso = CreateObject("Scripting.FileSystemObject")
    	Set fichier = fso.OpenTextFile(Nom_fichier, ForWriting, True)
     
    	i = 0
    	Do while i < nombre_lignes
     
    		i = i+1 
     
    		If Not i = nombre_lignes Then
     			fichier.Write Fichier_Ecriture(i) & vbCr
    		Else
    			fichier.Write Fichier_Ecriture(i)
    		End If
     
    		Veille 500,0
     
    	Loop
     
    	fichier.Close
     
     
    End Sub
     
     
     
    '------------------------------------------------------------------------------------------------
     
     
     
     
    Sub Ecriture_Fichier_Mode_Msdos ( Nom_fichier,nombre_lignes,Fichier_Ecriture )
     
    	Dim i,Commande_msdos
     
    	i = 0
    	Do while i < nombre_lignes
     
    		i = i+1 
     
    		If Not Fichier_Ecriture(i) = "" Then
    			Commande_msdos = "echo " & Fichier_Ecriture(i) & " >> " & Nom_fichier
    			Executer_commande_msdos Commande_msdos
    		End If
     
    	Loop
     
     
    End Sub
     
    '------------------------------------------------------------------------------------------------

    J'ai donc essayer plusieurs truc, comme écrire le fichier à la manière ms-dos.

    Par ce que en fait, ça marche très bien, il arrive bien à écrire chaque ligne, mais si je lance ce fichier, il ne marche pas comme il est sensé le faire. Pourtant, si je le réenregistre avec n'importe quel logiciel, il fonctionne cette fois. J'ai essayer de ralentir la copie pour être sûr que ça ce passe bien, mais ça marche pas, je sais pas d'où ça viens. Pourtant, je referme bien les fichier après avoir écrit.

    ps: Même si je lance manuellement le fichier copie, il ne marche pas.
    ps: Pour des copie en .vbs ou .bat j'ai tester.

    Quelqu'un aurrais une idée de mon problème?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut peut être un problème de compréhension de caractères...
    Salut Fragios,

    La première idée qui me vient à l'esprit concerne les caractères d'espacement et de retour chariot... Etant donné que tu ne nous donne pas le log d'erreur de lancement du fichier je ne peux jurer de rien évidemment . Le fait que cela marche avec les autres logiciels (à syntaxe équivalente) me laisse supposer que l'encodage des dits caractères peut poser problème.
    Alors, au cas où, tu peux toujours essayer d'utiliser les constantes vb :

    vbCr --> retour de charriot
    vbCrLf --> retour de chariot plus saut de ligne
    vbLf --> Saut de ligne
    vbNullChar --> Caractère ayant la valeur 0
    vbTab --> Tabulation horizontale

    Et il en existe d'autres...

    Bon courage à toi !

    -M@rc0-

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    1. C'est quoi le fichier que tu veux lancer ? Un script ?
    2. Sans le code de la fonction Executer_commande_msdos on ne pourra pas savoir si l'erreur viens de cette fonction.
    3. Que contient Fichier_Ecriture ?


    Bref tu nous parles d'un problème et donne la moitié des infos.
    Reprends le problème et réexplique nous dès le début comme si tu devais expliquer à des personnes qui ne savent pas ce que tu fais !!!

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour ne pas te "prendre" la tête avec les retour chariots... utilise

    WriteLine


  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut Désolé... :(
    Sorry j'avais lu un peu vite... du coup j'avais pas vu que tu utilisais vbCr !
    Encore désolé et j'espère que ton problème se réglera vite
    -M@rc0-

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Bonsoir,

    Merci de m'avoir répondu.

    Au cas où, je vous le re-précise, j'utilise un .vbs pour écrire un fichier.
    Après vérification. Si j'ecris un vbs, ça marche, mais un .bat, ou batch ne marche pas :s .

    La première idée qui me vient à l'esprit concerne les caractères d'espacement et de retour chariot... Etant donné que tu ne nous donne pas le log d'erreur de lancement du fichier je ne peux jurer de rien évidemment . Le fait que cela marche avec les autres logiciels (à syntaxe équivalente) me laisse supposer que l'encodage des dits caractères peut poser problème.
    Pour les retours chariots, dans une des mes fonctions, j'utilise en effet une constance vb "vbCr".
    Et il n'y a pas de message d'erreur (batch^^), le programme ce coupe rapidement, en disant simple, la commande est pas reconnut. Quelque soit la commande, il plante sur la 1er. Comme ça pour tester j'ai utiliser la commande "copy", et il bug en me mettant Null en nom de fichier copier. -_-


    1. C'est quoi le fichier que tu veux lancer ? Un script ?
    2. Sans le code de la fonction Executer_commande_msdos on ne pourra pas savoir si l'erreur viens de cette fonction.
    3. Que contient Fichier_Ecriture ?
    1. C'est un batch
    2. C'est un code simple, ça viens pas de la, car même avec l'autre fonction ça ne marche pas, mais là voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Executer_commande_msdos (commande_msdos)
     
    	Dim fso, lancement
     
    	Set fso = CreateObject("WScript.Shell")
     
    	commande_msdos = "cmd /c " & commande_msdos	
    	lancement = fso.run(commande_msdos, 0, true)
     
    End Sub
    3. Rien de bien spécial, j'ai fait un bat de base pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    title battest
     
    copy battest.bat test_copie.txt
     
    pause
    Désolé de ne pas avoir précisé plus, mais je pensais cela inutile vus ce que c'est.
    ^^



    pour ne pas te "prendre" la tête avec les retour chariots... utilise
    Merci du conseil, au début je l'utilisais, mais à la fin du script ça saute un ligne du coup. Alors j'ai fait éviter ça. L'histoire que ce soit propre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Not i = nombre_lignes Then
     			fichier.Write Fichier_Ecriture(i) & vbCr
    		Else
    			fichier.Write Fichier_Ecriture(i)
    		End If

    Sorry j'avais lu un peu vite... du coup j'avais pas vu que tu utilisais vbCr !
    Encore désolé et j'espère que ton problème se réglera vite
    Pas grave, merci de ton aide tout de même. ^^


    --------------------------------------
    Edit:
    -----------------------------------------------------------------

    Tenez, la fonction qui écrit dans un fichier, celle qui focntionne pour un vbs mais pas un bat.

    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
    Sub Test_ecriture ()
     
    	Dim Chemin, i
    	Dim Fichier_Ecriture(100000)
     
     
    	Chemin = "battest.bat"
     
    	i = 0	
    	i = i+1
    	Fichier_Ecriture(i) = "title battest"
    	i = i+1
    	Fichier_Ecriture(i) = ""
    	i = i+1
    	Fichier_Ecriture(i) = "copy battest.bat test_copie.txt"
    	i = i+1
    	Fichier_Ecriture(i) = ""
    	i = i+1
    	Fichier_Ecriture(i) = "pause"
     
     
    	Ecriture_Fichier Chemin,i,Fichier_Ecriture	
    	Chemin = chr(34) & Chemin & chr(34)	
    	'Ecriture_Fichier_Mode_Msdos Chemin,i,Fichier_Ecriture
     
    	Wscript.CreateObject("wscript.Shell").Run(Chemin)
     
    End Sub

    --------------------------------------
    Edit:
    -----------------------------------------------------------------

    J'oubliais de vous dire, moi je pensais aux type de 'codage'.
    Genre Ansi, ou ms dos, par exemple, si vous connaissez.
    Mais je ne trouve pas comment le définir, lors de l'écriture.

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Fragios Voir le message
    ...mais si je lance ce fichier, il ne marche pas comme il est sensé le faire. Pourtant, si je le réenregistre avec n'importe quel logiciel, il fonctionne cette fois....
    tu as essayé avec notepad ?


    si tu ne veux pas (pour d'obscure raison) utiliser WriteLine ... utilise au moins vbCrLf , sous dos et windows le caractère de terminaison de ligne et "vbCrLf"


  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    tu as essayé avec notepad ?
    Oui j'ai essayé. Et là ça marche si je réenregistre.

    si tu ne veux pas (pour d'obscure raison) utiliser WriteLine ... utilise au moins vbCrLf , sous dos et windows le caractère de terminaison de ligne et "vbCrLf"
    A merci, je ne savais pas, je test tout de suite.

    ---------------
    Edit:
    ---------------------------------------

    Woua! Bravo, merci ça marche parfaitement comme ça!
    Tout ça par ce que j'ai voulu faire propre. -_-

    Merci beaucoup en tout cas ça m'aider beaucoup!

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Merci du conseil, au début je l'utilisais, mais à la fin du script ça saute un ligne du coup. Alors j'ai fait éviter ça. L'histoire que ce soit propre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not i = nombre_lignes Then
     			fichier.Write Fichier_Ecriture(i) & vbCr
    		Else
    			fichier.Write Fichier_Ecriture(i)
    		End If
    Tu peux faire un test pour déterminer la dernière ligne et quand même utiliser writeline :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not i = nombre_lignes Then
     			fichier.WriteLine Fichier_Ecriture(i)
    		Else
    			fichier.Write Fichier_Ecriture(i)
    		End If
    C'est mieux que vbCrLf.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut Mais euh.... :(
    si tu ne veux pas (pour d'obscure raison) utiliser WriteLine ... utilise au moins vbCrLf , sous dos et windows le caractère de terminaison de ligne et "vbCrLf"
    Sniff... je l'avais dit avant pour "vbCrLf". Sniff...

    enfin lol : content que tu ais résolu ton problème !

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Tu peux faire un test pour déterminer la dernière ligne et quand même utiliser writeline
    Oui aussi, si vous dites que c'est mieux. ^^
    Je vais l'utiliser maintenant alors .

    Sniff... je l'avais dit avant pour "vbCrLf". Sniff...
    Oui. Je voulais pas changer car je pensais pas que ça venais de là, ça m'apprendra. A pas tout essayer.

    En tout cas, merci à vous tous pour votre aide!

    Et pour conclure: Encore Windows qui fait des sienne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. Opération sur un fichier et lecture ligne par ligne
    Par teunniq dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 03/06/2014, 17h57
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  5. Ecriture ligne par ligne dans un fichier texte
    Par PhDt76 dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/12/2008, 17h11

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