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 :

diviser un fichier texte sous windows


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut diviser un fichier texte sous windows
    bonjour,
    je veux diviser un fichier texte sous Windows. j'ai utilisé la commande suivante en utilisant l'invite commande :
    C:\split -l 250 test
    cette commande permet de deviser le fichier test chaque 250 lignes.
    le problème : les sous fichiers sont nommées aa ab ac ... moi je veux les nommées test1 test2 ... comment je peux faire ??
    merci d'avance

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Cette commande Split est une commande externe ? c'est quoi son help ?

  3. #3
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28

  4. #4
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Une solution en batch et pas besoin d'une commande externe
    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
    @echo off
    setLocal EnableDelayedExpansion
    set limit=250
    set file=test.txt
    set lineCounter=1
    set filenameCounter=1
     
    set name=
    set extension=
    for %%a in (%file%) do (
        set "name=%%~na"
        set "extension=%%~xa"
    )
     
    for /f "tokens=*" %%a in (%file%) do (
        set splitFile=!name!!filenameCounter!!extension!
        if !lineCounter! gtr !limit! (
            set /a filenameCounter=!filenameCounter! + 1
            set lineCounter=1
            echo Created !splitFile!.
        )
        echo %%a>> !splitFile!
     
        set /a lineCounter=!lineCounter! + 1
    )

  5. #5
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut
    merci pour votre aide
    malheureusement je ne connais pas ce type de code 'batch' ! où je peux le mettre ? explique moi un peu plus s'il vous plait.

  6. #6
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Citation Envoyé par amoula91 Voir le message
    merci pour votre aide
    malheureusement je ne connais pas ce type de code 'batch' ! où je peux le mettre ? explique moi un peu plus s'il vous plait.
    Ok, c'est très simple, juste vous copiez et collez ce code dans votre notepad (Bloc-notes) et enregistrer le sous par exemple Splitme.bat avec le même fichier test.txt dans le même dossier puis exécuter le fichier batch par double-clic et le tour est joué

  7. #7
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut
    oh ça marche très bien. vraiment merci beaucoup

  8. #8
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Citation Envoyé par amoula91 Voir le message
    oh ça marche très bien. vraiment merci beaucoup
    Dans ce cas il ne faut pas oublier les +1 et de passer la discussion en

  9. #9
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut
    oui ça y est

  10. #10
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut
    avec un fichier de taille 4 Go ça ne marche pas ?!

  11. #11
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Il y a une autre solution à tester en vbscript par glisser déposer ( Drag and Drop )
    Il suffit de copier et coller ce code dans le notepad et enregistrer le sous le nom par exemple Splitme.vbs.
    Code VBS : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    'Copyright BenGolgoth
    'Script qui permet de découper un fichier en plusieurs fichiers de x lignes.
    
    'Utilisation :
    ' On passe le fichier à découper en paramètre du script (par un drag and drop)
    ' Le script demande alors à l'utilisateur le nombre de lignes qu'il veut par fichier et
    ' s'il y a des en-têtes (l'en-tête ne peut faire qu'une ligne).
    ' Le traitement est terminé une fois que le message de fin de traitement est apparu.
    ' Les fichiers créés ont le même nom que le fichier passé en paramètre sauf qu'ils ont
    ' un numéro juste avant l'extension.
    
    'Constantes pour l'utilisation des fichiers
    Const ForReading = 1, ForWriting = 2, SFSO = "Scripting.FileSystemObject", WSS = "Wscript.Shell"
    
    'Variables object pour les fichiers
    Dim oFSO, oFileIn, oFileOut
    
    'Numéro du fichier courant, Numéro de la ligne courante, Nombre de ligne du fichier en entrée
    Dim iCurrentFile, iCurrentLine, iNbLine
    
    'En-tête du fichier en entrée, Paramètres du script, Fichier en entrée passé en paramètre, Fichier en sortie
    Dim sHeader, sArg, sFileIn, sFileOut
    
    'Booleen qui va me permettre de savoir si le fichier contient un en-tête ou non
    Dim bHeader
    
    'Initialisation des variables
    Set oFSO = Wscript.CreateObject(SFSO)
    iCurrentFile = 1
    iCurrentLine = 1
    
    'On récupère les arguments
    Set sArg = WScript.Arguments
    
    'Il n'y a qu'un argument, c'est le fichier en entrée.
    'S'il y en a d'autres, on affiche un message d'erreur et on sort du script.
    If sArg.Count <> 1 Then
        MsgBox "Veuillez passer en paramètre le fichier à découper."
        WScript.Quit
    End If
    
    'On récupère le premier (et unique) argument.
    sFileIn = sArg(0)
    
    'On demande à l'utilisateur le nombre de lignes qu'il désire dans ses fichiers de sortie
    iNbLine = CLng(InputBox("Entrez le nombre de lignes de chaque fichier de sortie :", "CutFile",1000))
    
    'On demande à l'utilisateur s'il y a un en-tête sur la première ligne du fichier en entrée à
    'reproduire dans les fichiers en sortie (des titres de colonnes par exemple)
    bHeader = MsgBox("Le fichier passé en paramètre contient-il un en-tête à reproduire dans les fichiers de sortie ?", vbYesNo, "CutFile")
    
    'Ouverture du fichier à découper
    Set oFileIn = oFSO.OpenTextFile(sFileIn, ForReading, True)
    
    'On récupère l'en-tête du fichier s'il y a besoin
    If bHeader = vbYes Then sHeader = oFileIn.ReadLine
    
    'Ouverture du premier fichier de résultat
    Set oFileOut = oFSO.OpenTextFile(oFSO.GetParentFolderName(sFileIn) & "\\" & oFSO.GetBaseName(sFileIn) & iCurrentFile & "." & oFSO.GetExtensionName(sFileIn), ForWriting, True)
    
    'On affiche l'en-tête s'il y a besoin
    If bHeader = vbYes Then oFileOut.WriteLine sHeader
    
    'Tant qu'on n'arrive pas à la fin du fichier en entrée
    Do While Not oFileIn.AtEndOfStream
        'On copie la ligne en cours du fichier en entrée dans le fichier de sortie en cours
        oFileOut.WriteLine oFileIn.ReadLine
    
        'Si on arrive au nombre de lignes sélectionné par l'utilisateur, on ferme le fichier
        'de sortie et on ouvre le suivant
        If iCurrentLine = iNbLine Then
            iCurrentLine = 0
            oFileOut.Close
            iCurrentFile = iCurrentFile + 1
            Set oFileOut = oFSO.OpenTextFile(oFSO.GetParentFolderName(sFileIn) & "\\" & oFSO.GetBaseName(sFileIn) & iCurrentFile & "." & oFSO.GetExtensionName(sFileIn), ForWriting, True)
    
            'On affiche l'en-tête dans le nouveau fichier de sortie s'il y besoin
            If bHeader = vbYes Then oFileOut.WriteLine sHeader
        End If
    
        'On passe à la ligne suivante
        iCurrentLine = iCurrentLine + 1
    
    Loop
    
    'On ferme tous les fichiers
    oFileOut.Close
    oFileIn.Close
    
    'On libère la mémoire
    Set oFileIn = Nothing
    Set oFileOut = Nothing
    Set oFSO = Nothing
    
    MsgBox "Traitement terminé", vbOkOnly ,"CutFile"

  12. #12
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut
    merciiiiiiiiiiiiii

  13. #13
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Citation Envoyé par amoula91 Voir le message
    merciiiiiiiiiiiiii
    Càd ça marche ou non pour un fichier de 4 Go ??

  14. #14
    Membre actif
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Par défaut
    oui ça marche très bien

  15. #15
    Nouveau candidat au Club Avatar de manu_katz
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Par défaut
    Citation Envoyé par amoula91 Voir le message
    oui ça marche très bien
    Salut,

    Me concernant, j'ai voulu tester le script VBS sur un fichier de 3,40 Go et il m'affiche une erreur "Chemin d'accès introuvable", à la ligne 59.

    J'ai essayé de passer dans un répertoire créé à la racine de C:\ histoire de vérifier que cela ne proviendrait pas d'un chemin avec espace mais le résultat est identique.

    Une idée ?

  16. #16
    Membre émérite
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Par défaut
    Bonjour,

    Pour info j'ai testé la version avec le .bat. Ça fonctionne bien sauf que cela supprime les espaces se trouvant en début de ligne. Pour éviter cela, il faut ajouter delims= en fin d'option (pour éviter que l'espace ne soit le séparateur) :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=* delims=" %%a in (%file%) do (

    Bloon

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut
    Merci pour les 2 solutions proposées. La 1ère avec le script .bat fonctionne de mon côté, par contre, je n'arrive pas à faire fonctionner la 2nde avec le script .vbs . La fenêtre avec le message "Veuillez passer en paramètre le
    fichier à découper" s'ouvre mais pas moyen de glisser/déposer un fichier .txt . Rien ne se passe.

    Edit : j'ai finalement compris comment cela fonctionne. Il faut pour cela glisser/déposer le fichier texte sur l'icone du script .vbs dans l'explorateur windows.

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut Demande s'il vous plait
    Comment passer en paramètre le fichier à decouper avec le script ci-après ?

    Citation Envoyé par hackoofr Voir le message

    Il y a une autre solution à tester en vbscript par glisser déposer ( Drag and Drop )
    Il suffit de copier et coller ce code dans le notepad et enregistrer le sous le nom par exemple Splitme.vbs.
    Code VBS : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    'Copyright BenGolgoth
    'Script qui permet de découper un fichier en plusieurs fichiers de x lignes.
    
    'Utilisation :
    ' On passe le fichier à découper en paramètre du script (par un drag and drop)
    ' Le script demande alors à l'utilisateur le nombre de lignes qu'il veut par fichier et
    ' s'il y a des en-têtes (l'en-tête ne peut faire qu'une ligne).
    ' Le traitement est terminé une fois que le message de fin de traitement est apparu.
    ' Les fichiers créés ont le même nom que le fichier passé en paramètre sauf qu'ils ont
    ' un numéro juste avant l'extension.
    
    'Constantes pour l'utilisation des fichiers
    Const ForReading = 1, ForWriting = 2, SFSO = "Scripting.FileSystemObject", WSS = "Wscript.Shell"
    
    'Variables object pour les fichiers
    Dim oFSO, oFileIn, oFileOut
    
    'Numéro du fichier courant, Numéro de la ligne courante, Nombre de ligne du fichier en entrée
    Dim iCurrentFile, iCurrentLine, iNbLine
    
    'En-tête du fichier en entrée, Paramètres du script, Fichier en entrée passé en paramètre, Fichier en sortie
    Dim sHeader, sArg, sFileIn, sFileOut
    
    'Booleen qui va me permettre de savoir si le fichier contient un en-tête ou non
    Dim bHeader
    
    'Initialisation des variables
    Set oFSO = Wscript.CreateObject(SFSO)
    iCurrentFile = 1
    iCurrentLine = 1
    
    'On récupère les arguments
    Set sArg = WScript.Arguments
    
    'Il n'y a qu'un argument, c'est le fichier en entrée.
    'S'il y en a d'autres, on affiche un message d'erreur et on sort du script.
    If sArg.Count <> 1 Then
        MsgBox "Veuillez passer en paramètre le fichier à découper."
        WScript.Quit
    End If
    
    'On récupère le premier (et unique) argument.
    sFileIn = sArg(0)
    
    'On demande à l'utilisateur le nombre de lignes qu'il désire dans ses fichiers de sortie
    iNbLine = CLng(InputBox("Entrez le nombre de lignes de chaque fichier de sortie :", "CutFile",1000))
    
    'On demande à l'utilisateur s'il y a un en-tête sur la première ligne du fichier en entrée à
    'reproduire dans les fichiers en sortie (des titres de colonnes par exemple)
    bHeader = MsgBox("Le fichier passé en paramètre contient-il un en-tête à reproduire dans les fichiers de sortie ?", vbYesNo, "CutFile")
    
    'Ouverture du fichier à découper
    Set oFileIn = oFSO.OpenTextFile(sFileIn, ForReading, True)
    
    'On récupère l'en-tête du fichier s'il y a besoin
    If bHeader = vbYes Then sHeader = oFileIn.ReadLine
    
    'Ouverture du premier fichier de résultat
    Set oFileOut = oFSO.OpenTextFile(oFSO.GetParentFolderName(sFileIn) & "\\" & oFSO.GetBaseName(sFileIn) & iCurrentFile & "." & oFSO.GetExtensionName(sFileIn), ForWriting, True)
    
    'On affiche l'en-tête s'il y a besoin
    If bHeader = vbYes Then oFileOut.WriteLine sHeader
    
    'Tant qu'on n'arrive pas à la fin du fichier en entrée
    Do While Not oFileIn.AtEndOfStream
        'On copie la ligne en cours du fichier en entrée dans le fichier de sortie en cours
        oFileOut.WriteLine oFileIn.ReadLine
    
        'Si on arrive au nombre de lignes sélectionné par l'utilisateur, on ferme le fichier
        'de sortie et on ouvre le suivant
        If iCurrentLine = iNbLine Then
            iCurrentLine = 0
            oFileOut.Close
            iCurrentFile = iCurrentFile + 1
            Set oFileOut = oFSO.OpenTextFile(oFSO.GetParentFolderName(sFileIn) & "\\" & oFSO.GetBaseName(sFileIn) & iCurrentFile & "." & oFSO.GetExtensionName(sFileIn), ForWriting, True)
    
            'On affiche l'en-tête dans le nouveau fichier de sortie s'il y besoin
            If bHeader = vbYes Then oFileOut.WriteLine sHeader
        End If
    
        'On passe à la ligne suivante
        iCurrentLine = iCurrentLine + 1
    
    Loop
    
    'On ferme tous les fichiers
    oFileOut.Close
    oFileIn.Close
    
    'On libère la mémoire
    Set oFileIn = Nothing
    Set oFileOut = Nothing
    Set oFSO = Nothing
    
    MsgBox "Traitement terminé", vbOkOnly ,"CutFile"

  19. #19
    Membre éprouvé
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Novembre 2004
    Messages : 388
    Par défaut
    Bonjour,

    J'utilise 7zip avec zero compression et en renommant les extensions en txt. mais c'est que de la bidouille et il n'est peut être pas adapter pour tout les usages !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2007, 13h54
  2. Comment ouvrir un fichier text sous Java ?
    Par mpascolo dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/10/2006, 14h59
  3. Réponses: 4
    Dernier message: 18/05/2006, 15h00
  4. feof et fichier texte sous unix
    Par Magicmax dans le forum C
    Réponses: 7
    Dernier message: 07/12/2005, 08h16
  5. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29

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