Page 1 sur 1

Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 11:45
par Serge973
Bonjour à tous,
Je viens de m'inscrire sur ce forum que je trouve très bien conçu.
Bien évidemment, j'ai un souci pour lequel je viens solliciter votre aide.

J'ai besoin de créer un fichier Batch devant d'exploiter un fichier en entrée et obtenir un fichier en sortie.
Chaque ligne du fichier en entrée doit être ré-écrite dans le fichier en sortie.
Le batch doit extraire une chaîne de caractères délimitée par le séparateur @
Une ligne peut contenir un à n séparateur @ ou pas de séparateur.
Si la ligne ne possède pas de séparateur @, elle doit être ré-écrite dans le fichier en sortie.
Chaque ligne du fichier en sortie doit présenter le séparateur en fin de ligne.

Je ne possède hélas aucune expérience en Batch DOS.
Mon idée était de chercher à faire un remplacement du séparateur @ par un saut de ligne puis de traiter les cas "à part".

Je viens d'achever la lecture de l'ensemble des forums de la planète et je sèche.

J'ai bien essayé quelques syntaxes, hélas sans grand succès.
Par exemple :
@echo off
cls
for /f "delims=@" %%a in ('type "%1"') do call :commande %%a
goto :eof
:commande
set ligne=%1
set ligne=%ligne:@=eol%
@echo %ligne% >>fichier2.txt

En vous remerciant tous de votre aide.
Cordialement

Description du fichier en Entrée :
AAAAAAA@BBBBBBB@CCCCCC
DDDDD@EEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
HHHHH@JJJJJ@KKKKK@LLLLL
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG@

Description du fichier en Sortie attendu:
AAAAAAA@
BBBBBBB@
CCCCCC@
DDDDD@
EEEEEE@
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF@
HHHHH@
JJJJJ@
KKKKK@
LLLLL@
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG@

Re: Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 16:17
par Dodoche28
Bonjour Serge973 :D
Ton programme fonctionne très bien!
:arrow: Je suis sur que tu as pas mis le fichier en paramètre lors de l'exécution de ton programme! :P

Code : Tout sélectionner

@echo off
cls
for /f "delims=@" %%a in ('type "%1"') do call :commande %%a
goto :eof
:commande
set ligne=%1
set ligne=%ligne:@=eol%
@echo %ligne% >> fichier2.txt
Pour mettre en paramètre ton fichier, il faut que tu déplace ton fichier texte sur le batch et par magie ton programme va s'ouvrir une fraction de seconde et tu vas voir apparaitre le fichier "fichier2.txt".
:arrow: Si tu veux que le résultat soit de la forme AAAA@, il faut supprimer la ligne "set ligne=%ligne:@=eol%"!
J'espère avoir était clair :D

Re: Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 19:19
par Serge973
Bonsoir Dodoche28

Un grand merci de ta promptitude et de ta réponse.
Je te confirme que ce script fonctionne mais hélas pas tout à fait comme je le souhaite.
Voici le code du script une fois corrigé selon tes recommandations.

@echo off
cls
for /f "delims=@" %%a in ('type "%1"') do call :commande %%a
goto :eof
:commande
set ligne=%1
@echo %ligne% >> fichier2.txt

Ce script se nomme Batch01.bat
Les données à traiter se trouvent dans un fichier quant à lui nommé DataSource.txt et contient les lignes suivantes :
AAAAAAA@BBBBBBB@CCCCCC
DDDDD@EEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
HHHHH@JJJJJ@KKKKK@LLLLL
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG@

Je lance la commande suivante depuis une console DOS :
Batch01.bat DataSource.txt
J'obtiens bien en sortie un fichier nommé fichier2.txt qui contient le résultat suivant :
AAAAAAA
DDDDD
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
HHHHH
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

Et c'est là le problème, il me manque les données ci-dessous et le séparateur en fin de chaque ligne.
BBBBBBB
CCCCCC
EEEEEE
JJJJJ
KKKKK
LLLLL

De toute évidence, le traitement s'arrête dès la présence du premier séparateur trouvé ici '@'

Si tu as une autre idée, je suis preneur, autrement j'envisage de passer par une macro Visual Basic mais beaucoup moins pratique pour mon projet.

En te remerciant
Salut
Serge

Re: Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 21:17
par Dodoche28
Mercii pour ce compliment Serge :D
C'est avec grand plaisir de t'aider ;)

Code : Tout sélectionner

@echo off
cls
for /f "delims=@" %%a in ('type "%1"') do call :commande %%a
goto :eof
:commande
set ligne=%1
set ligne=%ligne:@=eol%
@echo %ligne%@ >> fichier2.txt
:arrow: Sur la dernière ligne, elle permet de mettre le contenu de la variable "ligne" suivi de @ dans le fichier "fichier2.txt"
Si tu veux des explication je suis a ta disposition :P

:idea: PS: Tu m'as donné une très bonne impression de toi et j'espère que tu "nous" aidera à dynamiser ce forum. 8-)

Re: Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 23:04
par Serge973
Bonsoir Dodoche28

A mon tour de te remercier pour ces éloges que tu formule à mon égard.
Je tacherais, dans la mesure de mes possibilités, de participer activement à la découverte et l'essor de ce site.

J'ai, dans ma carrière, utiliser pas mal de langages, celui-ci me paraît un peu bizarre en terme de "logique".
Pourtant, j'en ai besoin.
Mon projet consiste à remanier, depuis une application développée en C (interprété) sous Windows, un fichier dont les enregistrements possèdent du texte avec un séparateur l'@ en l'occurrence.
Ce batch, que je cherche désespérément à mettre au point, doit éclater ces lignes en plusieurs lignes autonomes.

En entrée, on peut avoir ceci :
AAAAA@BBBBB@CCCCC@DDDDD
En sortie, je souhaite obtenir ce résultat :
AAAAA@
BBBBB@
CCCCC@
DDDDD@

Or, et ainsi que je te le précisais, mon batch fonctionne mais ne traite pas la suite des autres chaînes de caractères.
Dans mon exemple ci-dessus, il manque :
BBBBB@
CCCCC@
DDDDD@

Désolé de te solliciter, si tu ne trouves pas de solution, je le comprendrais.
Bien cordialement
Serge

Re: Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 23:36
par Dodoche28
Je suis assez d'accord avec toi que le batch n'est pas un langage comme les autres.

J'ai un trou de mémoire :| , pour me simplifier (car je ne suis pas disponible jusqu'à samedi) peut tu me dire si le nombre de colonne délimité par @ et constant?
ou combien il y a maximum de colonne s'il-te-plaît :)

Re: Batch Eclater un fichier avec séparateur

Posté : 04 mai 2011 23:50
par Serge973
Et non, il n'est hélas pas fixe ou constant.
Chaque enregistrement est de longueur variable avec un maximum de 8192 octets.

Ca complique l'affaire
Serge

Re: Batch Eclater un fichier avec séparateur

Posté : 05 mai 2011 00:10
par Dodoche28
Voilà désoler de ne pas avoir trouver mieux mais là dans l'immédiat mon cerveau est un peu à la ramasse :oops:

Procéder:
-Le programme va te permettre de délimiter les colonnes avec @
-Ensuite, il ne prendra que les 9 premières colonnes
-Puis a chaque ligne il va se demander:
------Si la colonne1 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne2 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne3 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne4 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne5 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne6 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne7 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne8 n'est pas vide, tu le mets dans le fichier "fichier2.txt"
------Si la colonne9 n'est pas vide, tu le mets dans le fichier "fichier2.txt"

Code : Tout sélectionner

@echo off
cls
for /f "tokens=1-9 delims=@" %%a in ('type "%1"') do call :commande %%a %%b %%c %%d %%e %%f %%g %%h %%i
goto :eof
:commande
If not "%1"=="" (echo %1@ >> fichier2.txt)
If not "%2"=="" (echo %2@ >> fichier2.txt)
If not "%3"=="" (echo %3@ >> fichier2.txt)
If not "%4"=="" (echo %4@ >> fichier2.txt)
If not "%5"=="" (echo %5@ >> fichier2.txt)
If not "%6"=="" (echo %6@ >> fichier2.txt)
If not "%7"=="" (echo %7@ >> fichier2.txt)
If not "%8"=="" (echo %8@ >> fichier2.txt)
If not "%9"=="" (echo %9@ >> fichier2.txt)
 
:arrow: NOTE: il est possible de rajouter encore plusieurs colonnes (toutes les lettres de l'alphabet)

Si le problème n'est pas résolue, samedi matin, tu peux m'envoyé un message sur ma boite mail (que tu trouve dans mon profile ;) )

Re: Batch Eclater un fichier avec séparateur

Posté : 05 mai 2011 12:36
par Serge973
Bonjour,
J'ai analysé ta dernière proposition et t'en remercie.
Je l'ai essayé et elle fonctionne très bien.

Je retiens cette solution pour le moment en espérant que chacune des lignes ne possèdent guère plus de 9 séparateurs.

Je verrai bien et ne manquerais pas de te tenir informé.

Merci encore pour tout ce dérangement et bravo pour ce site.

Si je peux aider de mon côté, à la hauteur de mon savoir, c'est avec plaisir

Serge

Re: Batch Eclater un fichier avec séparateur

Posté : 06 mai 2011 23:29
par Dodoche28
Bonsoir, :mrgreen:

:arrow: Tu ne m'as pas dérangé, ça ma fait plaisir de t'aider :D Si tu as un problème en batch, tu n'hésite pas à faire signe ;)
:arrow: Je te remercie de ta proposition d'aide et j'y penserais 8-)

:idea: D'ailleurs, euh... Est-ce que tu aurais des compétences (hobbies ou professionnel) en Électronique ou Informatique? :oops:
Si ce n'est pas trop demander/indiscret...
Dorian