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] Manipulation de texte dans un fichier : insérer un retour chariot tout les x caractères spécifiques


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Electronicien

    Informations forums :
    Inscription : juillet 2019
    Messages : 5
    Points : 6
    Points
    6
    Par défaut [BATCH] Manipulation de texte dans un fichier : insérer un retour chariot tout les x caractères spécifiques
    Bonjour à toutes et tous.

    Je suis face à une problématique qui va en faire sourire certains, mais qui est bloquante pour moi...

    Je dispose d'un fichier texte d'UNE SEULE ligne, TRES longue (plusieurs centaines de milliers de caractères).

    Cette ligne se compose sous la forme suivante :
    |dupont|pierre|52|lotissement du chene|87000|limoges|durand|jacques||lieu dit toto|75000|paris|etc...

    Donc : |nom|prenom|num rue|complement adresse|code postal|ville| LA STRUCTURE EST TOUJOURS IDENTIQUE, d'un bout à l'autre du fichier (cet exemple est simplifié pour une meilleure compréhension)

    Je souhaite comme vous l'avez deviné, insérer un saut de ligne touts les 7 "|" (pipe) dans cet exemple (c'est en réalité tous les 28) tout en conservant mon contenu de fichier tel quel, pipes compris

    J'ai tenté avec FOR /F avec token et delim et j'envoie la sortie dans une fonction qui récupère les variables et les écrit dans un fichier texte. C'est du (sale) bricolage, et en plus ça marche pas : j'arrive à sortir ma première ligne, écrire mon retour à la ligne, mais le FOR ne parcourt pas le reste du fichier. C'est là que je coince...

    En gros, il faudrait que je puisse parcourir mon fichier caractère par caractère tout en sortant tout ça au fur et à mesure dans un fichier texte, compter les pipe que je rencontre et tous les "x" pipe, insérer un retour chariot et continuer comme ça jusqu'au bout.
    Le but étant d'obtenir un fichier bien propre pour import dans un tableur.

    J'ai tenté en batch car c'est le seul "langage" que je connaisse un tout petit peu (j'envisage de me former sur Python qui me semble être la meilleure alternative pour un débutant qui a de petits besoins ponctuels...)

    Merci d'avance aux réponses qui pourront éclairer ma lanterne 🙂

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    juillet 2014
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 3 100
    Points : 5 604
    Points
    5 604
    Par défaut
    Besoin simple pas si simple
    Je te conseil le PowerShell qui est de base dans Windows même si Python est un très bon langage et pourrait être choisi.

    Voici un exemple un peu détaillé

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $input_file = ".\test.txt"
    $output_file = ".\test_out.txt"
    $longueur = 7
    $separator = "|"
     
    $content = Get-Content -LiteralPath $input_file -Raw
     
    $spl = $content.Split($separator)
    $spl_grp = for ($i = 0 ; $i -lt $spl.Count ; $i += $longueur) 
    {
        $spl[$i..($i + $longueur - 1)] -join $separator
    }
    $out_str = $spl_grp -join "`n"
     
    Set-Content -Value $out_str -LiteralPath $output_file -NoNewline

    PS1 : La fin de ligne ne contient pas le "retour chariot"
    PS2 : L'encodage des fichiers n'est pas spécifié

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Electronicien

    Informations forums :
    Inscription : juillet 2019
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je suis toujours bluffé par ce genre de réponse...

    Je t'imagine, il est 8h20, tu as une cracotte dans une main et un café dans l'autre, tu embauches à 9h et tu te dis : "tiens, ça m'inspire, je vais lui pondre un petit bout de code vite fait..."😄

    Il m'aura fallu plus de temps pour faire fonctionner PowerShell sur mon PC (il se lançait puis se refermait immédiatement), que pour transformer mon fichier...

    Un ENORME merci, tout a fonctionné comme souhaité ! 👍👍👍

    J'ai pu ensuite importer mon csv dans Libre office Calc, faire un peu de mise en forme (des espaces qui trainaient de ci de là en début/fin de cellules)

    J'ai été bluffé par la vitesse à laquelle ce script a exécuté les commandes : plus de 3 millions de caractères à traiter, la fenêtre a du rester ouverte a peine 1 seconde...

    Merci Eric, très sincèrement ! 😀🙂😃

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    juillet 2014
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 3 100
    Points : 5 604
    Points
    5 604
    Par défaut
    lol

Discussions similaires

  1. [Batch] Retour chariot tous les N caractères
    Par DIESEL66 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 24/05/2018, 09h17
  2. Concaténer 2 fichiers txt sous SAS avec retour chariot
    Par valboubou dans le forum SAS Base
    Réponses: 2
    Dernier message: 03/02/2014, 17h52
  3. Réponses: 6
    Dernier message: 17/06/2009, 17h58
  4. Retours chariot entre les balises HTML
    Par micfont999 dans le forum Langage
    Réponses: 3
    Dernier message: 09/10/2007, 20h45
  5. [C#] Comment insérer des retours chariot dans une chaine de caractère ?
    Par tazmania dans le forum Accès aux données
    Réponses: 4
    Dernier message: 30/10/2006, 10h27

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