Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    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 :
    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
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    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 :
    1
    2
    [....]PAS|FINLIGNE1[...]
    LIGNE2
    Deviennent :

  3. #3
    Membre confirmé
    Homme Profil pro Ludo
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludo
    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 : 165
    Points : 214
    Points
    214

    Par défaut

    avec un petit "|" et un "sort" ça doit pouvoir le faire...

  4. #4
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    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 confirmé
    Homme Profil pro Ludo
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludo
    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 : 165
    Points : 214
    Points
    214

    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 :
    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
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    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 confirmé
    Homme Profil pro Ludo
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludo
    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 : 165
    Points : 214
    Points
    214

    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
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    Par défaut

    Ludo40190,

    Je travaille sous Windows 7 et/ou Windows Server 2008 R2.
    Mon script est le suivant :
    Code :
    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 confirmé
    Homme Profil pro Ludo
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludo
    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 : 165
    Points : 214
    Points
    214

    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 :
    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
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    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
    Nouveau Membre du Club
    Étudiant
    Inscrit en
    juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2007
    Messages : 113
    Points : 39
    Points
    39

    Par défaut

    * Claquer au vent bien sûr...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •