Batch Supprimer des lignes vides d'un CSV
Résolu/Fermé
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
-
Modifié par yusukessj le 25/09/2010 à 16:11
yusukessj Messages postés 267 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 4 janvier 2014 - 2 oct. 2010 à 17:25
yusukessj Messages postés 267 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 4 janvier 2014 - 2 oct. 2010 à 17:25
A voir également:
- Batch Supprimer des lignes vides d'un CSV
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer edge - Guide
- Impossible de supprimer un fichier - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
18 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 25/09/2010 à 16:52
Modifié par dubcek le 25/09/2010 à 16:52
hello
ou
C:> type f1.csv 1;2;3;4 1;2;3;4 1;2;3;4 1;2;3;4 C:> aa > f2.csv C:> type f2.csv 1;2;3;4 1;2;3;4 1;2;3;4 1;2;3;4 C:> type aa.bat @echo off for /F "delims=" %%a in ('type f1.csv') do ( if not %%a=="" echo %%a )
ou
findstr /v "^$" f1.csv > f2.csv
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
Modifié par yusukessj le 25/09/2010 à 17:27
Modifié par yusukessj le 25/09/2010 à 17:27
Je vous remercie beaucoup, ça marche aussi ;)
Il me reste juste un problème au niveau de awk.
J'utilise une commande en awk pour me récupérer une chaîne de caractère entre deux motifs premierMotif et deuxMotif et le >
Ca marche, mais je veut que le premier motif soit premierMotif" il se termine par les double quottes et je ne sais pas comment échappé les doubles quottes en awk. j'ai fait un anti-slash mais ca n'as rien donné :
Je veut (premierMotif) => devient (premierMotif") Mais je ne sais pas échapper les doubles quottes
Il me reste juste un problème au niveau de awk.
J'utilise une commande en awk pour me récupérer une chaîne de caractère entre deux motifs premierMotif et deuxMotif et le >
Ca marche, mais je veut que le premier motif soit premierMotif" il se termine par les double quottes et je ne sais pas comment échappé les doubles quottes en awk. j'ai fait un anti-slash mais ca n'as rien donné :
set A="Rep" cd %A% for /F "delims=" %%a in ('dir /b/s *.htm') do ( awk -F"[<>]" "/premierMotif/{printf """\n%%s""",$3}/deuxMotif/{printf """*%%s""",$3}" "%%a" >> C:\wamp\www\bache\resul.csv )
Je veut (premierMotif) => devient (premierMotif") Mais je ne sais pas échapper les doubles quottes
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
26 sept. 2010 à 08:03
26 sept. 2010 à 08:03
pour éviter ces problèmes de " en ligne de commande DOS, mettre le code awk dans un fichier et exécuter
awk -F"[<>]" -f fichier.awk
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 08:37
26 sept. 2010 à 08:37
Je vient de faire alors deux fichier, premier
parseur.bat
et le fichier.awk
Mais j'ai des erreurs dans la ligne de commandes : ^ parse error
parseur.bat
set A="Rep" cd %A% for /F "delims=" %%a in ('dir /b/s *.htm') do ( awk -F"[<>]" fichier.awk "%%a" >> C:\result.csv )
et le fichier.awk
/premierM/{printf """\n%%s""",$3} /deuxM/{printf """*%%s""",$3}
Mais j'ai des erreurs dans la ligne de commandes : ^ parse error
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
26 sept. 2010 à 08:47
26 sept. 2010 à 08:47
dans un fichier, plus besoin de doubles "" ou %%
/premierM/{printf "\n%s\"",$3} /deuxM/{printf "*%s",$3}
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 09:06
26 sept. 2010 à 09:06
Voici mes deux fichiers :
parseur.bat
fichier.awk
Je vient de lire quand on est dans un fichier externe .awk qu'il faut mettre le séparateurs là => BEGIN { FS="[<>]" }
Mais ça ne marche pas, j'ai cette erreure => ^ backslash not last caracter online
parseur.bat
set A="Rep" cd %A% for /F "delims=" %%a in ('dir /b/s *.htm') do ( awk C:\fichier.awk "%%a" >> C:\result.csv )
fichier.awk
BEGIN { FS="[<>]" } /premierM/{printf "\n%s\",$3} /deuxM/{printf "*%s",$3}
Je vient de lire quand on est dans un fichier externe .awk qu'il faut mettre le séparateurs là => BEGIN { FS="[<>]" }
Mais ça ne marche pas, j'ai cette erreure => ^ backslash not last caracter online
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 26/09/2010 à 09:15
Modifié par dubcek le 26/09/2010 à 09:15
soit FS= dans le fichier soit -F en ligne de commande, c'est la même chose
attention au premier printf, il faut
attention au premier printf, il faut
{printf "\n%s\"",$3}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 09:27
26 sept. 2010 à 09:27
j'ai mis {printf "\n%s\"",$3} Mais c'est le même problème ^ backslash not last caracter online
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 26/09/2010 à 09:38
Modifié par dubcek le 26/09/2010 à 09:38
faire awk -f fichier.awk
je fais ça
je fais ça
C:> type f1.txt 1 2 premierM 1 2 deuxM C:> C:> type aa.awk /premierM/{printf "\n%s\"",$3} /deuxM/{printf "*%s",$3} C:> C:> awk -f aa.awk f1.txt premierM"*deuxM C:>
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 10:05
26 sept. 2010 à 10:05
Merci dubcek, en effet il me manqué awk -f le -f !!
Ca marche très bien, il me reste juste un truc, si vous pourrais m'aider la-dessus
Mon fichier CSV contient des lignes que je veut supprimé automatiquement.
Je veut supprimer toutes les lignes qui commancent par * ou " ou un espace
Merci
Ca marche très bien, il me reste juste un truc, si vous pourrais m'aider la-dessus
Mon fichier CSV contient des lignes que je veut supprimé automatiquement.
Je veut supprimer toutes les lignes qui commancent par * ou " ou un espace
Merci
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 26/09/2010 à 10:18
Modifié par dubcek le 26/09/2010 à 10:18
C:> type f1.txt 1 " 2 * 3 xx 4 C:> C:> findstr /v /c:""" /c:"^*" /c:"^ " f1.txt 1 2 3 4 C:>
avec awk
C:> awk -f aa.awk f1.txt 1 2 3 4 C:> type aa.awk /^[^ "\*]/ {print}
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 10:42
26 sept. 2010 à 10:42
j'ai essaiyer votre solution au ligne de commande, ca marche,
Mais quand je veut l'implémenté dans mon fichier =>
Ca ne marche pas!
Mais quand je veut l'implémenté dans mon fichier =>
findstr /v """ "^*" "^ " first_result.csv >> final.csv pause
Ca ne marche pas!
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
26 sept. 2010 à 10:45
26 sept. 2010 à 10:45
il manque les /c:
findstr /v /c:""" /c:"^*" /c:"^ "
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 10:55
26 sept. 2010 à 10:55
findstr /v /c:""" /c:"^*" /c:"^ " first_result.csv >> final.csv pause
Je ne suis pas dans le repertoire C:\ Il me dit impossible d'ouvrir final.csv
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
26 sept. 2010 à 11:02
26 sept. 2010 à 11:02
mettre les recherches dans un fichier
C:> type f2.txt ^" ^\* ^ <--- il y a un espace C:> C:>findstr /v /g:f2.txt first_result.csv >> final.csv
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 11:37
26 sept. 2010 à 11:37
Merci dubcek, tout marche nikel !!!
un dernier point, si je veut inséré mes données et je veut les numéroté :
/premierM/{printf "\n%s\"",$3} /deuxM/{printf "*%s",$3}
Là où je met un \n (retour à la ligne), je veut écrire un numéro incrémental suivis d'une étoile.
un dernier point, si je veut inséré mes données et je veut les numéroté :
/premierM/{printf "\n%s\"",$3} /deuxM/{printf "*%s",$3}
Là où je met un \n (retour à la ligne), je veut écrire un numéro incrémental suivis d'une étoile.
1* ma phrase 2* ma phrase 3* ma phrase
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 26/09/2010 à 11:51
Modifié par dubcek le 26/09/2010 à 11:51
comme ça
/premierM/{printf "\n%d* %s\"", ++i, $3} /deuxM/{printf "*%s",$3}
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
26 sept. 2010 à 12:04
26 sept. 2010 à 12:04
Je vous remercie infiniment dubcek, je ss un noub en batch, mais je commence à comprendre le fonctionnement grâce à vous!
Merci beaucoup ;)
Merci beaucoup ;)
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
Modifié par yusukessj le 2/10/2010 à 11:12
Modifié par yusukessj le 2/10/2010 à 11:12
J'ai vu qu'on peut demandé à awk de nous ramener le contenu de la ligne suivante, avec getline, mais là je avoir le control de demandé à awk de me rammené la ligne après la ligne suivante et celle après sa suivante;
je m'explique :
je veut qu'il me rammène mes 3 texte désiré séparé par une étoile *
Je vous remerci
je m'explique :
<p class="une_classe"> premier<br/> deuxieme<br/> troisieme </p>
je veut qu'il me rammène mes 3 texte désiré séparé par une étoile *
Je vous remerci
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
2 oct. 2010 à 14:08
2 oct. 2010 à 14:08
C:> type f1.txt <p class="une_classe"> premier<br/> deuxieme<br/> troisieme </p> C:> C:> type aa.awk /une_classe/ {getline ; printf $1 " * " ; getline ; printf $1 " * " ; getline ; print $1} C:> C:> findstr /v "^$" f1.txt | awk -F"<" -f aa.awk premier * deuxieme * troisieme
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
2 oct. 2010 à 15:33
2 oct. 2010 à 15:33
Merci beaucoup dubcek, à ce que je vois à chaque fois qu'on fait getline, il saute de ligne. j'apprend de plus en plus avec vous ;)
le texte à vrai dire, il a 7 tabulations
Est ce qu'on peut ecrire notre texte, mais sans ecrire les tabulations avec ??
le texte à vrai dire, il a 7 tabulations
<p class="une_classe"> ...... 7 tabulations ...... premier<br/> ...... 7 tabulations ...... deuxieme<br/> ...... 7 tabulations ...... troisieme </p>
Est ce qu'on peut ecrire notre texte, mais sans ecrire les tabulations avec ??
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
2 oct. 2010 à 15:57
2 oct. 2010 à 15:57
on définit la tabulation ou < comme séparateur:
C:> findstr /v "^$" f1.txt | awk -f aa.awk premier * deuxieme * troisieme C:>type aa.awk BEGIN{FS="[\t<]*"} ; /une_classe/ {getline ; printf $2 " * " ; getline ; printf $2 " * " ; getline; print $2} C:>
yusukessj
Messages postés
267
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
4 janvier 2014
16
2 oct. 2010 à 17:25
2 oct. 2010 à 17:25
Yes !! ca marche !! merci beaucoup dubcek ;)