IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Découper un fichier CSV en plusieurs fichiers CSV de 3000 lignes


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Par défaut Découper un fichier CSV en plusieurs fichiers CSV de 3000 lignes
    Bonjour Je cherche à écrire un script qui permet de découper un fichier CSV (situé sur mon bureau) en plusieurs fichiers CSV de 3000 lignes maximums.
    Le fonctionnement est simple: j'enregistre chaque ligne dans une variable puis je copie cette variable dans le nouveau fichier créé. Toutes les 3000 lignes un nouveau fichier est créé, et je souhaiterai que les lignes suivantes s'écrivent donc dans ce nouveau fichier.
    J'ai trouvé de nombreux exemples sur internet mais un problème persiste: Tout ce que je copie s'écrit dans le même fichier. (le premier fichier créé)
    J'espère que vous pourrez prendre le temps de me répondre et de trouver une solution à mon problème.
    Voici mon code. Merci d'avance

    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @echo off
    setLocal EnableDelayedExpansion								
     
    set /a limit=3000												
    set file=instance.csv
    set filepath=C:\Users\CQBD1476\Desktop\instance.csv										
    set /a lineCounter=1
    set /a filenameCounter=1
     
    set name=
    set extension=
    for %%a in (%file%) do (									
        set "name=%%~na"										
        set "extension=%%~xa"									
    )
     
    set splitFile=!name!-part!filenameCounter!!extension!
    echo Created !splitFile!.
     
    for /f "tokens=* delims=;" %%b in (%file%) do (					
        if !lineCounter! gtr !limit! (
    		echo --------------------------!limit!-------------------------------
            set /a filenameCounter=!filenameCounter! + 1
    		echo *************************** !filenameCounter! ****************************
            set lineCounter=1
    		set splitFile=!name!-part!filenameCounter!!extension!		
            echo Created !splitFile!.
     
        )
    	echo boucle for numero 		!filenameCounter!
        echo %%b>>%splitFile%								
        set /a lineCounter=!lineCounter! + 1					
     
    )

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Voici une proposition.

    A améliorer, il faudra peut être supprimer les fichiers out déjà existant ...

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    set /a limit=3000
    set file=instance.csv
    set filenameout=instanceOut
     
    set /a lineCounter=1
    set /a filenameCounter=1
    for /F "tokens=*" %%a in (%file%) do (
    	echo %%a>>%filenameout%!filenameCounter!.csv
     
    	if !lineCounter! EQU %limit% (
    		set /a filenameCounter=!filenameCounter!+1
    		set /a lineCounter=1
    	) else set /a lineCounter=!lineCounter!+1
    )

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Par défaut Une solution
    Re

    J'ai réussi à corriger mon code il s'agissait de bien comprendre la différence entre !var! et %var%
    Il fallait encadrer le splitFile avec des "!"


    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    @echo off													
    setLocal EnableDelayedExpansion								
     
    set /a limit=3000												
    set file=instance.csv									
    set /a lineCounter=1
    set /a filenameCounter=1
    set splitFile=nocare
     
    set name=
    set extension=
    for %%a in (%file%) do (									
        set "name=%%~na"										
        set "extension=%%~xa"									
    )
     
     
    for /f "tokens=*" %%b in (%file%) do (
    	set splitFile=!name!-part!filenameCounter!!extension!
        if !lineCounter! gtr !limit! (
            set /a filenameCounter=!filenameCounter! + 1
    		echo fichier !filenameCounter! 
            set lineCounter=1	
        )
        echo %%b>>!splitFile!								
        set /a lineCounter=!lineCounter! + 1						
    )

    Voila, c'est pas forcément le meilleur code mais ça fonctionne

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Marrant ...

Discussions similaires

  1. [Toutes versions] Ventiler mon fichier .csv en plusieurs fichiers .csv
    Par X.e.N.o.N dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/07/2018, 05h11
  2. Convertir CSV en plusieurs fichiers HTML
    Par lmplmp dans le forum Débuter
    Réponses: 6
    Dernier message: 07/06/2012, 16h56
  3. [MySQL] Export CSV de plusieurs fichiers
    Par yamatoshi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/03/2012, 16h50
  4. Découper un fichier vidéo en plusieurs fichier
    Par zoom61 dans le forum Vidéo
    Réponses: 4
    Dernier message: 13/01/2012, 20h40
  5. Réponses: 10
    Dernier message: 27/02/2009, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo