Trouver et copier des lignes d'un .csv à l'autre
Résolu/Ferméadgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 - 6 sept. 2023 à 08:39
- Trouver et copier des lignes d'un .csv à l'autre
- Trouver adresse mac - Guide
- Comment copier une vidéo youtube - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
- Aller à la ligne excel - Guide
- Super copier - Télécharger - Gestion de fichiers
8 réponses
14 mai 2023 à 20:35
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" )
14 mai 2023 à 21:46
Ca marche impeccable merci encore à toi barnabé toujours là pour les soluces :). J'étais en train de créer un truc tellement plus complexe !!!
30 août 2023 à 09:48
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
30 août 2023 à 10:41
Salut il faudrait que je fasse des tests, est-ce que tu aurais un échantillon de fichier à me fournir ?
31 août 2023 à 01:26
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
Modifié le 31 août 2023 à 07:43
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 question3 sept. 2023 à 14:27
C'est top ça marche. Merci encore !
Modifié le 5 sept. 2023 à 20:17
en 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
5 sept. 2023 à 21:28
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
Modifié le 5 sept. 2023 à 23:29
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
6 sept. 2023 à 06:47
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
6 sept. 2023 à 08:39
tau top. Merci
5 sept. 2023 à 23:32