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 :

[Batch] Compteur du nombre de caractères, ligne par ligne


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut [Batch] Compteur du nombre de caractères, ligne par ligne
    Bonjour,

    Je rencontre actuellement un petit problème, en effet je cherche à réaliser un batch qui me permettrait d'analyser mes fichiers de log.
    J'ai actuellement un problème, certaines lignes de mes logs sont anormalement longue (environ + de 3000 caractères) et je souhaiterai créer un batch qui m'analyse ligne par ligne mon fichier .log et qui me compte si le nombre de caractère est supérieur à 3000. Dans le cas ou la ligne serait > à 3000, je souhaiterai supprimer cette ligne.

    Est-ce possible d'après-vous ?

    N'ayant pas de grande compétence en DOS, je me demandai si vous pouviez m'aider. Vous en remerciant par avance.

    Cordialement

    DevInet

  2. #2
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    normalement ceci devrai fonctionner mais ca me renvoi une erreur chez moi, test chez toi pour voir:
    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
    @echo off & color 0A
    
    
    setlocal enabledelayedexpansion 
    
    for /f "delims=" %%i in ('type fichier.txt') do ( 
    
           echo %%i> line.txt
           set vrLine=%%i
            for /r %%j in (line.txt) do ( 
                           set VrCompt=%%~zj
                           set /a VrCompt-=2
                           if !VrCompt! gtr 3000 switch "fichier.txt" "!vrLine!" ""
                )
           del line.txt
    
      )
    
    endlocal
    
    
    pause>nul
    Pour supprimer les liigne trop longue j'utilise la commande switch.exe, mais il faut la télécharger, regarde dans la faq, la derniere question réponse, il y a un lien de téléchargement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Merci beaucoup de ton aide et, d'après mes premiers test, cela fonctionne.

    Par contre, je n'ai pas vu de code retour d'erreur...

    Ayant observé le fonctionnement, j'aurai une modification à te demander, serai-ce possible, plutôt que de supprimer les ligne > a 3000 caractères, de les déplacer dans un autre fichier texte ?

    Merci encore

    Cordialement

    DevInet

  4. #4
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    tu me dit que le code fonctionne, donc les ligne trops longue sont bien supprimer ?
    si oui c'est normale que tu n'a pas d'erreur, c'est que le code fonctionne, il dait y avoir un probléme de droit sur mon pc, c'est pour cela que j'ai une erreur.

  5. #5
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    Voici la modif:

    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
    @echo off & color 0A
    
    
    setlocal enabledelayedexpansion 
    
    for /f "delims=" %%i in ('type fichier.txt') do ( 
    
           echo %%i> line.txt
           set vrLine=%%i
            for /r %%j in (line.txt) do ( 
                           set VrCompt=%%~zj
                           set /a VrCompt-=2
                           if !VrCompt! gtr 3000 ( 
                                     switch "fichier.txt" "!vrLine!" ""
                                     echo !vrLine!>> linelongue.txt
                              )
                           
                )
           del line.txt
    
      )
    
    endlocal
    
    
    pause>nul

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Merci !

    J'ai testé ce dernier car en fait, il correspond mieux a mon besoin.
    Il fonctionne bien, par contre, lors de l'analyse, les lignes > à 3000 caractères sont bien détéctées et copiées dans le fichier "linelongue.txt" mais ne sont pas remplacée dans le fichier source par un "".

    Est-ce normal ?

    Merci d'avance

    DevInet

  7. #7
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    tu veut dire que les lignes ne sont pas supprimer dans ton log ?

    Tu a bien télécharger la commande switch.exe ???

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Oui j'ai bien récupéré switch.exe.

    Le programme me détecte bien la ligne a plus de 3000 caractère, il me la copie dans le fichier "linelongue.txt" mais il ne me remplace pas cette fameuse ligne trop longue dans le log original par un "" (il devrait le faire avec switch.exe)

    C'est bizarre....

    A la limite, il existerai une fonction genre "couper/coller" de la ligne trop longue vers le fichier "linelongue.txt" ?

    Merci

    DevInet

  9. #9
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    il n'y a pas de fonctione copier coller

    switch n'est pas senssé remplacer la ligne par "" mais juste la supprimer, ben peut être que le ligne est trop longue est que switch est dépasser

  10. #10
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    je vai voir si on peut faire ca en VBS

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    J'ai une question,

    Si je comprend bien, la variable vrLine contient la ligne > a 3000 caractère et c'est cette variable qui est copié temporairement dans un fichier line.txt ?

    PArce que je m'apercois que dans le fichier line.txt, la ligne de plus de 3000 caractères est copié mais pas intégralement, c'est comme si elle était coupée... peut etre que comme elle n'est pas identique a celle contenue dans vrLine, elle ne peut pas etre emplacée, non ?

    (Je réfléchi tout haut...)

    DevInet

  12. #12
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    Citation Envoyé par DevInet Voir le message
    Si je comprend bien, la variable vrLine contient la ligne > a 3000 caractère et c'est cette variable qui est copié temporairement dans un fichier line.txt ?
    Exactement

    Citation Envoyé par DevInet Voir le message
    PArce que je m'apercois que dans le fichier line.txt, la ligne de plus de 3000 caractères est copié mais pas intégralement, c'est comme si elle était coupée... peut etre que comme elle n'est pas identique a celle contenue dans vrLine, elle ne peut pas etre emplacée, non ?
    je ne pensse pas

    mais je sui entrai de tester sa en vbs

    il faut dabor que j'arrive a compter le nombre de caractére en vbs, le reste ca ira tout seul

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Merci en tout cas pour ton investissement !

    PArce que je m'apercois que dans le fichier line.txt, la ligne de plus de 3000 caractères est copié mais pas intégralement, c'est comme si elle était coupée... peut etre que comme elle n'est pas identique a celle contenue dans vrLine, elle ne peut pas etre emplacée, non ?
    Je te confirme qu'après vérification, le problème ne vient pas de là. Mon problème est vraiment localisé au niveau du Switch. En fait, il ne remplace pas la ligne par un blanc...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Bonjour,

    La copie de la ligne fonctionne bien mais c'est le switch qui fait des sienne.

    Tu as déja eu des problèmes avec le switch ?

    Y'aurai pas moyen d'utilsier une autre fonction ?

    Cordialement

    DevInet

  15. #15
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    Citation Envoyé par DevInet Voir le message
    Y'aurai pas moyen d'utilsier une autre fonction ?
    Je n'en connait pas d'autre

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    J'ai résolu mon problème en inversant la balance...

    Je vais travailler sur mes lignes de bonnes longueur en faisant un test < plutot que >.

    En tout cas , ton script de comptage d'un fichier ligne par ligne fonctionne parfaitement, ce qui pourra peut être aider quelqu'un.

    Pour la fonction switch, je me demande si le fait que ma ligne soit une variable ne l'empêche pas de remplacer... c'est à etudier.

    En tout cas, merci de ton aide et de ton investissment.

    Cordialement

    DevInet

    PS : Pour ma part, je concidère mon topic comme résolu.

  17. #17
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    si non j'ai réussi a faire ca en VBS:
    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
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Ci-dessous on indique le chemin du fichier à traiter:
    vrFchTrait = "C:\Documents and Settings\Kookatix\Bureau\fichier.txt"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    Dim fso, f, f2 
    
    set WshShell = WScript.CreateObject("WScript.Shell") 
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    DesktopPath = WSHShell.SpecialFolders("Desktop")
    
    
    Set FichierTXT = WScript.CreateObject("WScript.Shell") 
     Set f = fso.OpenTextFile(DesktopPath & "\lineLongue.txt", 8,true) 
    
    Set objSourceFile = FSO.OpenTextFile(vrFchTrait, 1)
     Do Until objSourceFile.AtEndOfStream
        vrline0 = objSourceFile.ReadLine
         If Len(vrline0) > 3000 then 
                f.writeline(vrline0) 
         Else
                vrLine = vrline & vbCrLf & vrline0
         End If
    
     Loop
    objSourceFile.Close
    
    f.close
    
    
    Const ForReading = 1, ForWriting = 2 
      Set FichierTXT2 = WScript.CreateObject("WScript.Shell") 
       Set f2 = fso.OpenTextFile(vrFchTrait, ForWriting,true) 
       f2.writeline(vrLine) 
    f2.close
    et la c'est nikel

  18. #18
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    Par contre montre moi se que tu a fait en batch STP

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Merci, je vais éplucher cela.

    Bonne journée

    DevInet

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    J'ai réutilisé ton code en changeant juste l'opérateur de comparaison... en soi rien d'extraordinaire mais ca répond bien à mon attente.

    Le script ne te parlera peut etre pas car d'autre batch travaillent à coté sur ce fichier de log :

    @echo off & color 0A
    echo Début du traitement : %time%

    echo Traitement des logs en cours...

    setlocal enabledelayedexpansion

    for /f "delims=" %%i in ('type monlog.log') do (

    echo %%i> linetemp.txt
    set vrLine=%%i
    for /r %%j in (linetemp.txt) do (
    set VrCompt=%%~zj
    set /a VrCompt-=2
    if !VrCompt! leq 900 (
    echo !vrLine!>> newlog.log
    )
    )
    del linetemp.txt

    )

    endlocal

    echo Fin de traitement des logs : %time%

    pause>nul

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [batch] - Compter le nombre de caractères d'une chaîne
    Par koKoTis dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 19/06/2025, 23h01
  2. [XL-2003] Export *.CSV avec nombre de caractère fixe par ligne
    Par IronBibs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/09/2011, 02h55
  3. Compter le nombre d'occurence d'un caractère donné, par ligne du fichier
    Par Bktero dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 23/03/2011, 15h47
  4. Réponses: 3
    Dernier message: 16/10/2007, 20h45
  5. nombre de caractères affichés par camllight
    Par Moi_Emilie dans le forum Caml
    Réponses: 5
    Dernier message: 17/04/2007, 22h46

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