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 :

Copie de plus de 4096 caractères par ligne


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut Copie de plus de 4096 caractères par ligne
    Bonjour à tous,

    Je croyais que la solution que j'évoquais dans mon post de ce matin (disponible ici) avait tout réglé mais il reste un petit détail...

    Quand j'utilise le code suivant, les lignes contenant la chaine sont copiées dans le fichier de sortie... mais seulement jusqu'au 4096ème caractère...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Find %CHAINE% %FILE% >>%FILE_SORTIE%
    Si vous avez une solution pour outrepasser cette limite (ou pour en fixer une autre), je vous en serai très reconnaissant.

    Bon appétit à tous,

    Altrensa

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Note additionnelle : Ce qui est bizarre, c'est que les lignes sont coupées à 4096 mais que la ligne suivante est écrite à partir de la 4097ème position de la ligne inachevée.

    Ainsi, les lignes ("|" est à la 4096ème position) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [....]PAS|FINLIGNE1[...]
    LIGNE2
    Deviennent :

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Points : 294
    Points
    294
    Par défaut
    avec un petit "|" et un "sort" ça doit pouvoir le faire...

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Bonjour Ludo40190,

    Merci pour ce retour... Mais le post précédent n'était là qu'à titre d'exemple. En effet, je ne connais pas à l'avance le 4096ème caractère de chaque ligne. Il m'est donc impossible d'effectuer une découpe au caractère.

    De plus, vu que la variable de ma boucle for ne contient que les 4096 premiers caractères, je ne sais pas comment récupérer la fin de la ligne en cours de lecture... Si je pouvais récupérer, dans chaque itération, les éléments suivant ces 4096 caractères, cela résoudrait mon problème...

    Merci quand même

    Bien cordialement,

    Altrensa

  5. #5
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Points : 294
    Points
    294
    Par défaut
    salut,

    Je n'ai pas mis le"|" pour le caractère de ton exemple mais pour sa fonction de renvoyer la sortie d'une commande vers l'entrée d'une autre commande...

    Si j'ai bien compris dans ton fichier de sortie tu as les lignes contenant la chaine, mais si une ligne fait 5000 caractères, tu n'as que les 4096 premiers et les 904 autres à la ligne suivante. C'est ça ?

    Un exemple pour afficher sur la même ligne les 5000 caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ligne_de_5000_caracteres |sort /REC 5000 >fic.log
    et la tu as tous tes caractères sur la même ligne...

    C'est un exemple avec "echo" mais ça s'applique aux autres commandes...

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Bonjour Ludo40190,
    Bonjour à tous,

    En fait, mon problème c'est que les 904 caractères que tu mentionnes sont carrément perdus. Ainsi, dans mon exemple :
    [....]PAS|FINLIGNE1[...]
    LIGNE2
    Devient :
    [....]PAS|LIGNE2

    On a donc perdu "FINLIGNE1"... Cela semble être dû au fait que le string a une taille limite de 4096 caractères en batch.
    Ainsi, le "echo ligne_5000_car" n'en affichera que 4096 et les 904 autres seront perdus...

    De plus, et même si la solution pouvait fonctionner, il reste le problème du "5000" que je ne connais absolument pas à l'avance... Je ne vois donc pas comment utiliser ta proposition.

    Merci, si c'est possible, de me préciser ta pensée afin que je puisse voir comment la mettre en oeuvre avec les contraintes évoquées.

    Bien cordialement,

    Altrensa

  7. #7
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Points : 294
    Points
    294
    Par défaut
    5000 était la à titre d'exemple, mais tu peux spécifier juste le maximum, soit 65535.

    Peux-tu mettre ton script en ligne, pour être sur de comprendre ce qui cloche?
    Aussi tu travailles sur quel OS?

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Ludo40190,

    Je travaille sous Windows 7 et/ou Windows Server 2008 R2.
    Mon script est le suivant :
    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
    @Echo Off
    
    setlocal enabledelayedexpansion enableextensions
    
    set nomFic=%1%
    set cheminFic=%~dp1
    
    Echo Determination des conditions et variables
    set FILE=%nomFic%
    Echo Fichier d'entree : %nomFic%
    set SUPP1="CHAINE 1"
    set SUPP2="CHAINE 2"
    set FILE_IND=%cheminFic%IND_XXX_01.txt
    
    Echo Creation des enveloppes vides ou vidage des fichiers
    Copy nul %FILE_IND% >nul
    Copy nul %FILE_IND%_TMP >nul
    
    Echo Recherche de toutes les lignes que nous voulons
    Find %SUPP1% %FILE% >>%FILE_IND%_TMP
    Find %SUPP2% %FILE% >>%FILE_IND%_TMP
    
    Echo Suppression des lignes en trop et ajout des points-virgules
    for /F "skip=2 delims=" %%i in (%FILE_IND%_TMP) do echo %%i; >>%FILE_IND%
    del %FILE_IND%_TMP
    Le fichier %FILE_IND% contient bien tout ce qui est attendu, sauf pour les lignes ayant initialement plus de 4096 caractères.
    Celles-ci sont, dans le fichier de sortie, coupées au 4096 caractères et la ligne suivante du fichier initiale, trouvée par le find, est écrite à partir du 4097ème caractère dans le fichier de sortie.

    On perd donc les caractères à partir de la 4096ème position des lignes du fichier d'entrée. Sitôt cette barrière passée, on continue la copie par la ligne trouvée suivante, et ce, sans saut de ligne.

    Si je n'ai pas été clair, n'hésitez pas à me dire ce que je dois préciser.

    Bien cordialement,

    Altrensa

  9. #9
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Points : 294
    Points
    294
    Par défaut
    re,

    la j'ai pas trop le temps de tester je verrai ce soir, mais déjà tu peux essayer ça:

    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
    @Echo Off
    
    setlocal enabledelayedexpansion enableextensions
    
    set nomFic=%1%
    set cheminFic=%~dp1
    
    Echo Determination des conditions et variables
    set FILE=%nomFic%
    Echo Fichier d'entree : %nomFic%
    set SUPP1="CHAINE 1"
    set SUPP2="CHAINE 2"
    set FILE_IND=%cheminFic%IND_XXX_01.txt
    
    Echo Creation des enveloppes vides ou vidage des fichiers
    Copy nul %FILE_IND% >nul
    Copy nul %FILE_IND%_TMP >nul
    
    Echo Recherche de toutes les lignes que nous voulons
    Find %SUPP1% %FILE% | sort /REC 65535 >>%FILE_IND%_TMP
    Find %SUPP2% %FILE% | sort /REC 65535 >>%FILE_IND%_TMP
    
    Echo Suppression des lignes en trop et ajout des points-virgules
    for /F "skip=2 delims=" %%i in (%FILE_IND%_TMP) do echo %%i | sort /REC 65535 ; >>%FILE_IND%
    del %FILE_IND%_TMP

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Bonjour à tous et excellente nouvelle année.

    Je viens de tester la proposition que Ludo40190 m'avait faite avant les fêtes.
    Elle ne fonctionne malheureusement pas.
    En effet, en mettant le sort dans les find et le for, j'ai beaucoup d'erreurs "fichier spécifié introuvable" puis, en le mettant que dans le find, je me retrouve dans la même situation que précédemment...

    Encore merci pour cet essai qui, je l'espère en appellera d'autres jusqu'à ce que le flag "résolu" puisse enfin claquer un vent, tout en haut de cette page.

    Bien cordialement,

    Altrensa

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    * Claquer au vent bien sûr...

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/06/2007, 20h56
  2. Limite de 1024 caractères par ligne de code !
    Par Mousmai dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/07/2006, 20h00
  3. [JTextArea] Limiter nombre de caractères par lignes
    Par doudine dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/02/2006, 18h26
  4. Limiter le nombre de caractère par ligne d'un textarea
    Par rantanplan08 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 04/01/2006, 20h31
  5. nombre de caractères par ligne à l'affichage
    Par trotters213 dans le forum Oracle
    Réponses: 3
    Dernier message: 03/11/2005, 10h51

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