Trouver et copier des lignes d'un .csv à l'autre
Résoluadgm1 Messages postés 289 Date d'inscription Statut Membre Dernière intervention -
- Trouver et copier des lignes d'un .csv à l'autre
- Trouver adresse mac - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Partager des photos en ligne - Guide
8 réponses
Bonjour,
Il n'y a pas de difficulté particulière, à l'aide d'une boucle FOR /F tu lis chaque valeur de la première colonne que tu compares avec l'autre fichier.
for /f "tokens=1,* delims=:;," %%A in ('type "export.csv"') do ( findstr "%%A" "export_ok.csv" || echo %%A;%%B>>"export_ok.csv" )
Ca marche impeccable merci encore à toi barnabé toujours là pour les soluces :). J'étais en train de créer un truc tellement plus complexe !!!
Salut je reviens sur ce batch car je me rend compte que si les colonnes sont vides alors il ne les copies pas et décale toutes les colonne qui ne correspondent plus à leur en tete. Y a t 'il moyen de forcer la copie de toute la ligne meme si les cellules sont vides?
merci d'avance
oui voici un csv avec des cellules vides par exemple. Si on en prend un autre csv pour fusioner il y aura des colonnes en moins
https://drive.google.com/file/d/1zeG1mUmxt6fevxRNpGbSjkFQZ_JdqKdK/view?usp=sharing
J'ai localisé le problème, voilà la correction :
@echo off setlocal enableextensions enabledelayedexpansion set "export=ko.csv" set "export_ok=export.csv" rem echo.>>"%destination%" set /a index=0 for /f "eol=$ skip=1 delims=" %%E in ('type "%export%"') do ( set /a index+=1 title Numero de ligne : !index! call :remplissage "%%~E" for /f "eol=$ tokens=1,* delims=:;," %%A in ("!ligne!") do ( echo.Id : %%A findstr "%%A" "%export_ok%" >nul || ( set "newline=%%A;%%B" set "newline=!newline:###=!" echo.!newline!>>"%export_ok%" ) ) ) pause exit :remplissage set "ligne=%~1" :boucle set "ligne=!ligne:;;=;###;!" echo.!ligne! | findstr ";;" >nul && goto :boucle goto :eof
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionen fait j'ai juste un pb cest que dans mon idée mon fichier qui s'appelle export_prof est l export de la base de donnée le plus récent (qui contiendra donc de nouvelle ligne d'utilisateurs) et mon fichier de comparaison qui est plus ancien s'appelle export_prof_ok. Et donc j'aimerai modifier le export_prof_ok du moment pour qu'il aille chercher dans le export_prof les nouvelles lignes à insérer dans le export_prof_ok.
Je suis un peu perdu dans les lignes de commande au niveau des "findstring" quelle valeur je dois modifier.
Car dans ta proposition c'est le export_prof qui devient le nouveau bon fichier mis à jour
Est-ce que c'est mieux comme ça ?
@echo off setlocal enableextensions enabledelayedexpansion set "export_recent=export_prof.csv" set "export_ancien=export_prof_ok.csv" rem echo.>>"%destination%" set /a index=0 for /f "eol=$ skip=1 delims=" %%E in ('type "%export_recent%"') do ( set /a index+=1 title Numero de ligne : !index! call :remplissage "%%~E" for /f "eol=$ tokens=1,* delims=:;," %%A in ("!ligne!") do ( echo.Id : %%A findstr "%%A" "%export_ancien%" >nul || ( set "newline=%%A;%%B" set "newline=!newline:###=!" echo.!newline!>>"%export_ancien%" ) ) ) pause exit :remplissage set "ligne=%~1" :boucle set "ligne=!ligne:;;=;###;!" echo.!ligne! | findstr ";;" >nul && goto :boucle goto :eof
La copie des lignes se fait bien dans le bon sens mais il ya encore le pb des cellules vides qui sont squeezées. C'est peut être la formule "remplissage" qui ne s'applique pas correctement
En fait il y a la colonne vide 2 qui est squeezé mais les colonnes 9 10 et 11 sont bien récupérée vides dans le nouveau .csv
C'est parce que j'ai utilisé le point-virgule au lieu de la virgule, voilà c'est corrigé :
@echo off setlocal enableextensions enabledelayedexpansion set "export_recent=export_profs.csv" set "export_ancien=export_profs_ok.csv" rem echo.>>"%destination%" set /a index=0 for /f "eol=$ skip=1 delims=" %%E in ('type "%export_recent%"') do ( set /a index+=1 title Numero de ligne : !index! call :remplissage "%%~E" for /f "eol=$ tokens=1,* delims=:;," %%A in ("!ligne!") do ( echo.Id : %%A findstr "%%A" "%export_ancien%" >nul || ( set "newline=%%A,%%B" set "newline=!newline:###=!" echo.!newline!>>"%export_ancien%" ) ) ) pause exit :remplissage set "ligne=%~1" :boucle set "ligne=!ligne:,,=,###,!" echo.!ligne! | findstr ",," >nul && goto :boucle goto :eof