Suppression de certaines lignes dans un fichier texte

Résolu/Fermé
Cybmatt Messages postés 4 Date d'inscription vendredi 21 juin 2019 Statut Membre Dernière intervention 21 juin 2019 - 21 juin 2019 à 07:47
Cybmatt Messages postés 4 Date d'inscription vendredi 21 juin 2019 Statut Membre Dernière intervention 21 juin 2019 - 21 juin 2019 à 11:41
Bonjour,

J'ai un traitement automatisé à mettre en place à l'aide d'un fichier batch Windows.
Voici ma problématique :
J'ai tout un ensemble de fichiers plats (format .csv), dont le séparateur est le point virgule. Ils ont tous la même construction :
- une première ligne dont les trois premiers caractères sont "00;"
- n lignes dont les trois premiers caractères sont "01;"

Voici un exemple :
00;20001;ABC;20190617;1224;19;01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
01;123456789;20190617;ABCD;81257033099;20001201906170000001;EUR;1906;25;FR;09055478004;05;1;ZV13;717409;1;1912875;;;;;16;;;;;;;0000048235;;;;;;;;;;;;;;;;1;;;;;;;;;;;21;1;ZPCC;1912875;EUR;XXX AABB
01;123456789;20190617;ABCD;81257033099;20001201906170000002;EUR;1906;25;FR;09045845016;05;1;ZV13;717409;1;1912875;;;;;16;;;;;;;0000048235;;;;;;;;;;;;;;;;1;;;;;;;;;;;21;1;ZPCC;1912875;EUR;XXX CC DD

J'ai pour objectif de :
- rassembler tous les fichiers csv dans un seul et même fichier csv nommé "FVMA_global.csv"
- supprimer dans ce dernier toutes les lignes commençant par "00;" en créant un fichier propre nommé "FVMA_global_<DateDuJour>.csv"

Pour la première étape, pas de souci, j'ai utilisé ce code :
FOR /f %%i in ('dir /B *.csv') do (
IF %%i NEQ FVMA_global.csv type %%i>>FVMA_global.csv
)


Ca me produit donc bien un fichier nommé "FVMA_global.csv"

Je ne parvient pas à faire la deuxième partie du traitement. J'imagine qu'il faut utiliser une boucle "for /f" également, mais je ne parviens pas à faire des tests sur les 3 premiers caractères, et à faire en sorte, en fonction de ce test, de mettre le contenu de la ligne parsée dans un nouveau fichier.csv (qui est le fichier final, nettoyé des lignes en "00;"

Un grand merci d'avance pour votre précieuse aide.
A voir également:

1 réponse

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié le 21 juin 2019 à 10:17
hello
et avec findstr ?
extraire les lignes qui ne commencent pas par 00; (je n'ai pas testé)
findstr  /r /v /c:^00; fichier.csv

ou avec des "
findstr  /r /v /c:"^00;" fichier.csv
0
Cybmatt Messages postés 4 Date d'inscription vendredi 21 juin 2019 Statut Membre Dernière intervention 21 juin 2019
21 juin 2019 à 10:20
Ca ne vas exclure que les lignes commençant par "00;" ? quid si une ligne comporte la chaine "00;" est présente au milieu d'une ligne (et pas en début de ligne) ? Cette même ligne sera aussi exclue ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 juin 2019 à 10:51
le ^ veut dire uniquement en début de ligne
voir help findstr
0
Cybmatt Messages postés 4 Date d'inscription vendredi 21 juin 2019 Statut Membre Dernière intervention 21 juin 2019
21 juin 2019 à 11:41
ça marche nickel, j'ai fait comme ça :
findstr /r /v /c:"^00;" FVMA_global.csv>> FVMA_global2.csv
0