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

Scripts/Batch Discussion :

Comment conserver les lignes de commentaires et les lignes vides ? [Batch]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Comment conserver les lignes de commentaires et les lignes vides ?
    Bonjour,
    J'ai le batch suivant qui ne me garde pas les lignes vides ni les lignes de commentaires commençant par ; dans le fichier de sortie

    La ligne ------> rem if "%Text%"=="" @echo. >> sortie.txt
    est une tentative pour conserver les lignes vides, mais elle ne fonctionne pas.

    Comment conserver les lignes vides et les commentaires conformément au fichier d'entrée ?


    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if exist sortie.txt del sortie.txt
    set actif=TOTO
    set new=TITI
    for /f "tokens=*" %%a in (Entree.ini) do call :Remplace "%%a
    exit /b
    :Remplace
    set Text=%~1%
    if "%Text%"=="%actif%" set Text=%new%
    rem if "%Text%"=="" @echo. >> sortie.txt
    echo %Text% >> sortie.txt
    exit /b

  2. #2
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    salut,

    C'est pas clair, sinon

    un commentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ton commentaire >> fichierdesortie.txt
    une ligne vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo. >> fichierdesortie.txt
    et si ta variable %text% risque d'être vide alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo.%text% >> fichierdesortie.txt

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Désolé, j'avais pourtant fait mon max pour être clair du premier coup !

    Je perds les lignes vides et les lignes commençant par le caractère ";" avec le batch que j'ai mis dans le post au-dessus.

    Comment modifier ce batch pour conserver ces lignes ?

    Exemple:

    Si fichier entrée:
    =============================

    Toto
    Titi
    ;ce sont les noms actuels

    Tata
    ;remarques pour rien

    Tutu

    =============================


    Alors mon fichier de sortie actuel vaut:
    =============================
    Toto
    Titi
    Tata
    Tutu
    =============================

    Et je voudrais récupérer ce qui suit, avec lignes vides et lignes commençant par ";", conformément au fichier d'entrée (en gardant la possibilité de traiter la ligne avec "call Remplace"):
    ========================

    Toto
    Titi
    ;ce sont les noms actuels

    Tata
    ;remarques pour rien

    Tutu

    ========================

    J'ai beau chercher, je n'arrive pas à trouver la syntaxe adéquate.
    Merci d'avance pour votre aide.

  4. #4
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    ça c'est for, c'est lui qui supprime les lignes vides et les lignes de commentaires.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par minnesota Voir le message
    ça c'est for, c'est lui qui supprime les lignes vides et les lignes de commentaires.
    Mais comment faire alors dans ce cas ?

    J'ai besoin simplement de changer Titi en Toto dans un Fichier.txt.
    Titi n'apparait qu'une fois dans fichier.txt
    J'ai les valeurs Titi et Toto en variables et aussi dans Titi.txt et Toto.txt.
    J'ai besoin de garder les lignes vides et les lignes de commentaires de Fichier.txt

    Une bonne âme pour me sortir de ce pétrin où je m'enlise ???

    En espérant avoir été précis et concis.

  6. #6
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Ben il faut pas avoir de lignes vides et de commentaires ...
    ou que tu t'arranges pour que ça soit le cas

    Ton entree.ini :
    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
    
    
    Toto
    Titi
    ;ce sont les noms actuels
    
    Tata
    ;remarques pour rien
    
    
    Tutu
    
    
    Toto

    un script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    if exist sortie.txt del sortie.txt
    set actif=Titi
    set new=Toto
    for /f "tokens=1,* delims=:" %%a in ('findstr /n .* entree.ini') do call :remplace "%%b"
    goto :fin
    :remplace
    set text=%~1
    if "%text%"=="%actif%" set text=%new%
    echo.%text% >> sortie.txt
    goto :eof
    :fin
    exit /b
    Le tarif de la prestation :

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    BRAVO et MERCI !


    Ton code fait pile poil ce que j'avais besoin pour être propre en gardant la structure de entree.ini


    Merci encore pour la réponse de grande qualité.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Minnesota, comme je le disais, ton code répond pile poil à mon besoin.
    Peux-tu expliquer STP la subtilité du code qui fait que çà marche ?

  9. #9
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    Merci de passer ton post en résolu...

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Le PB exposé est résolu, donc je passe le post en résolu.

    Pour continuer ce batch et lui faire faire d'autres choses, j'ai besoin qu'on m'explique la subtilité des 2 lignes suivantes:

    1°) for /f "tokens=1,* delims=:" %%a in ('findstr /n .* entree.ini') do call :remplace "%%b"
    (notamment le findstr /n .*)

    2°) echo.%text% >> sortie.txt


    Merci d'avance pour vos éclaircissements.

  11. #11
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Citation Envoyé par mircow Voir le message
    Minnesota, comme je le disais, ton code répond pile poil à mon besoin.
    Peux-tu expliquer STP la subtilité du code qui fait que çà marche ?
    La commande For ne renvoie pas les lignes vides et les lignes commençant par un point-virgule lorsqu'elle parcourt un fichier.
    Si on veut conserver ces lignes dans la sortie de For, il faut faire en sorte que ces lignes commencent par quelques choses d'autre qu'un espace ou un point-virgule. Ensuite, grâce aux Tokens on peut récupérer sur la sortie la partie qui nous intéresse.
    Pour faire cette modification, j'ai choisi d'utiliser Findstr parce que je sais qu'il a le potentiel de faire une recherche dans un fichier et numéroter les lignes correspondantes sous la forme X:Ligne. Note la pertinence du deux-points comme délimiteur. Le paramètre "/n" c'est pour numéroter, et la chaine ".*" est une expression régulière qui dit à Findstr de rechercher zéro ou plusieurs occurrences de n'importe quel caractère, c'est-à-dire toutes les lignes. Ensuite, la sortie de Findstr est transmise à For, "%%a" c'est le numéro de ligne, le délimiteur c'est le deux-points, et "%%b" ben c'est la ligne qu'on récupère et qu'on peut traiter.

    Pour le echo,
    Si la variable text est vide, echo.%text% affiche une ligne vide.
    Si la variable text n'est pas vide, echo.%text% affiche text.

    Et voilà.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    C'est ce que je disais, TROP FORT et PILE POIL BIEN !

    MERCI MINNESOTA POUR TON AIDE TOP NIVEAU !!

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Points : 27
    Points
    27
    Par défaut Besoin d'un petit complément pour un problème quasi similaire
    Bonjour,

    En faisant des recherches pour mon problème je suis tombé sur cette discusion qui répond presque à mon besoin.
    En effet, j'ai aussi un fichier .ini qui contient des lignes vides et des lignes de commentaires commençant donc par un ";".
    Première question : je remarque que le code fourni par Minesotta ajoute dans le fichier de sortie, des espaces à la fin de chaque ligne. Est-il possible (et si oui comment?) de faire en sorte de ne pas avoir ces espaces ?

    Mon fichier .ini contient également des lignes commençant par le caractère ">". (exemple : ">0,5 TexteA TexteB = 0.25")
    Du coup, pour chacune de ces lignes, le code de Minessota essaye de me créer des fichier (dans mon exemple, il me créer un fichier qui s'appelle "0.5")
    Et dans le fichier de sortie, il remplace le contenu de cette ligne par une ligne vide.
    Ceci m'amène à ma seconde question ?
    Comment contourner ce problème et obtenie en sortie la même ligne qu'en entrée ?

    J'espère avoir été clair,
    Merci d'avance pour votre aide

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/09/2009, 10h02
  2. Réponses: 0
    Dernier message: 21/09/2009, 23h41
  3. [MySQL] Comment conserver les retour à la ligne dans MySql ?
    Par lolymeupy dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/05/2008, 13h02
  4. Réponses: 1
    Dernier message: 15/05/2007, 10h19

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