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 :

[batch] Recherche et découpage de fichier


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut [batch] Recherche et découpage de fichier
    Bonjour,

    Je fais appel à la communauté pour une demande urgente. Enfin urgente pour mon patron...

    Mon problème est le suivant:
    j'ai un fichier plat (type csv).
    On va faire simple: ce fichier possède des lignes qui comporte un nom, un mail, et un numéro de commandes. (Voir fichier joint)

    L'idée est de découper ce fichier en n fichiers.
    On doit dispatcher toutes ces lignes dans n fichiers tant qu'on respecte la condition suivante : on ne retrouve jamais une ligne de commande avec une même adresse mail dans un des fichiers

    Exemple (car vous ne devez rien comprendre):

    dans mon fichier initial

    Dupond|dupond@gmail.com|0001
    Martin|martin@gmail.com|0002
    Pierre|pierre@gmail.com|0003
    Dupond|dupond@gmail.com|0004
    Dupond|dupond@gmail.com|0005
    Olivier|olivier@gmail.com|0006
    Pierre|pierre@gmail.com|0007


    il faut transformer ce fichier en 3 fichiers
    fichier 1 :
    Dupond|dupond@gmail.com|0001
    Martin|martin@gmail.com|0002
    Pierre|pierre@gmail.com|0003
    Olivier|olivier@gmail.com|0006

    fichier 2
    Dupond|dupond@gmail.com|0004
    Pierre|pierre@gmail.com|0007

    fichier 3
    Dupond|dupond@gmail.com|0005


    Voilà le casse-tête. Bien sur je n'ai aucune idée du comment. Alors j'ose carrément faire une demande directe. Qui peux me faire un petit script pour y arriver (ou une grosse base de solution).

    C'est un cas désespéré, je ne le ferais pas en temps normal. Mais là, je vous crie "A l'aide !!!! faites moi le petit programme qui m'aidera a obtenir une augmentation !! "

    Bon si vous m'envoyez bouler, je ne vous en voudrait pas, mais si une âme charitable veux bien m'aider, je lui en serais très reconnaissant !!

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    Citation Envoyé par faulk Voir le message
    C'est un cas désespéré, je ne le ferais pas en temps normal. Mais là, je vous crie "A l'aide !!!! faites moi le petit programme qui m'aidera a obtenir une augmentation !! "
    Ben t'oublieras pas de boire un verre à notre santé... Hein...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    for /f "tokens=1,2,* delims=^|" %%i in (tonfichier.csv) do call :trie "%%~i" "%%~j" "%%~k"
    for %%i in (%dynVar%) do set %%~i=
    echo.
    pause
    goto :eof
    
    :trie
    set /a %~2+=1
    call set id=%%%~2%%
    if %id% leq 1 set dynVar=%dynVar% %~2
    echo %~2-^>fichier%id%.txt
    (echo %~1^|%~2^|%~3)>>fichier%id%.txt
    goto :eof

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    Yihaaa, merci.



    C'est ce qu'il me fallait. Je teste et je l'adapte. Ca devrait fonctionner.


    Merci

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    Salut,

    alors j'ai essayé de modifier ton script qui fonctionne parfaitement pour le fichier exemple.

    Mais mon vrai fichier a en réalité une dizaine de colonnes et le mail doit être a la colonne 6.

    J'ai réussi à changer la colonne "de recherche", en positionnant le mail à la 3eme colonne par exemple. Par contre si je fais un fichier avec plus de colonnes, je n'arrive pas obtenir de résultat.

    ma question : quels paramètres je dois changer pour choisir la colonne 6 de recherche sur un fichier avec 10 colonnes.
    La encore c'est un exemple, mais bon je veux aussi comprendre le code, pour pas non plus abuser...

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    J'avance petit à petit sur le sujet,

    j'ai compris comment fonctionne le script, j'ai su changer le code pour choisir ma colonne de recherche (la 10 en l'occurence), j'ai compris comment utiliser les tokens pour prendre en compte plus de colonnes (15).

    Par contre j'ai un probleme pour passer plus de 9 parametres dans la fonction trie: D'apres mes recherches, on ne peut pas avoir plus de 9 parametres, et il faut utiliser un SHIFT .

    Mais comment ?

    voilà mon code :
    @echo off
    for /f "tokens=1-15 delims=^|" %%i in (Mail_expeditions.csv) do call :trie "%%~i" "%%~j" "%%~k" "%%~l" "%%~m" "%%~n" "%%~o" "%%~p" "%%~q" "%%~r" "%%~s" "%%~t" "%%~u" "%%~v" "%%~w"
    for %%i in (%dynVar%) do set %%~i=
    echo.
    pause
    goto :eof

    :trie
    echo %~1^|%~2^|%~3^|%~4^|%~5^|%~6^|%~7^|%~8^|%~9^|%~10^|%~11^|%~12^|%~13^|%~14^|%~15
    set /a %~10+=1

    call set id=%%%~10%%
    pause
    if %id% leq 1 set dynVar=%dynVar% %~10
    pause
    echo %~10-^>fichier%id%.txt
    pause
    (echo %~1^|%~2^|%~3^|%~4^|%~5^|%~6^|%~7^|%~8^|%~9^|%~10^|%~11^|%~12^|%~13^|%~14^|%~15)>>fichier%id%.txt

    goto :eof
    Mais cela ne foncitonne pas, a partir du 10eme parametres,celui ci prenc la valeur de la 1er colonne de la ligne suivante... bref ca foire, je suis pres du but :p

  6. #6
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Tu n'es pas obligé de passer tes 15 paramètres à ta fonction :Trie.
    Tu peux te limiter à 3 : Avant le critère de recherche, le critère de recherche et après le critère de recherche.

    Il te suffit de concaténer en remettant le séparateur pour le avant.
    Pour le après tu peux utiliser le tokens * comme dans l'exemple de minnesota ou faire la même chose que pour le avant.

Discussions similaires

  1. Batch - recherche fichier ou dossier et obtention de la taille
    Par bru38 dans le forum Téléchargements
    Réponses: 0
    Dernier message: 20/02/2014, 17h08
  2. Recherche et découpage de fichier
    Par faulk dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/10/2012, 20h16
  3. Réponses: 4
    Dernier message: 26/03/2010, 14h03
  4. [batch] recherche de fichier sur different lecteurs
    Par dmichel dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 15/12/2008, 12h11
  5. un batch DOS pour "nettoyer des fichiers" ?
    Par RoroMinator dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 12/02/2004, 16h24

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