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

Linux Discussion :

Sélection fichiers d'un répertoire


Sujet :

Linux

  1. #1
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut Sélection fichiers d'un répertoire
    Bonjour,

    Je dispose d'un répertoire dans lequel se trouve une centaine de fichiers. Ces fichiers doivent servir à remplir une base de données, et vue la structure de la base, il faut sélectionner en premier les fichiers des tables les plus hautes (cela à cause des contraintes de clefs).

    Je voudrais savoir comment je fais sous LINUX pour sélectionner des fichiers en particulier. Je m'explique avec un exemple:

    J'ai trois fichiers: table_1_entreprise.csv, tables_1_employe.csv, table_1_produits.csv

    Ces 3 fichiers peuvent se répéter, et le numéro est alors incrémenté (ex:table_2_entreprise.csv).

    Mon objectif est donc de sélectionnner en premier les fichiers entreprise, donc qui se terminent par entreprise, puis ceux employe, et enfin produits.
    Il me faut donc sélectionner les fichiers selon la terminaison et je n'y arrive pas. Pourriez-vous m'apporter une solution à ce problème?

    Merci par avance

    Mathias

  2. #2
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    J'ai oublié une petite précision,
    Comment sur la même condition sélectionner par exemple les fichiers entreprises et employés?

    Merci

  3. #3
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    fais toi un script perl ou PHP
    Tu inséres dans un tableau les noms des fichiers dans l'ordre où tu veux les utiliser
    ensuite tu parcoures ce tableau et à chaque cellule tu inséres tes données dans ta base.
    Si c'est trop figé comme solution,
    tu peux fonctionner avec des expressions régulières pour ne sélectionner dans un premier temps que les fichiers entreprise que tu classes par ordre alphabétique (attention au classement des noms avec les chiffres si tu as plus de 10 fichiers, il risque de te les classer dans l'ordre table_1_entreprise.csv,table_10_entreprise.csv,table_2_entreprise.csv...).Puis tu fais la même chose avec employés....
    Si le classement ne fonctionne pas comme tu veux, il faudra que tu fasses une fonction qui extraies le numéro de ton fichier, récupères le plus grand numéro N et après tu peux faire une boucle $i de 1 à N et tu insères les données de ton fichier table_{$i}_entreprise.csv

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    utilise un simple filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ls *entreprise.cvs *employe.cvs *produit.cv
    la, l'ordre serra les fichiers entreprise puis employe puis produit.
    si l'ordre de la valeur numerique à une importance utilise la commande sort successivement sur les 3 "types de fichier"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for i in entreprise employe produit
    do
        for file in $(ls *$i.cvs | sort -t'_' -n -k2)
        do
            #chargement en base
        done
    done
    le sort tri sur le 2eme champ avec le '_' comme separateur, en numerique.

  5. #5
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    en effet...beaucoup, beaucoup mieux et rapide que ma solution
    Juste une petite remarque, ce genre de fichier a l'extension .csv et non .cvs, broutille mais ne pas mélanger

  6. #6
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut Fin de sélection des fichiers
    Bon, merci pour vos conseils, j'ai réussit quasiment à faire ce que je voulais.
    Pour la sélection des fichiers c'est ok, mais maintenant mon dernier petit "problème", c'est qu'une fois ces trois tables remplies, il me reste plein de fichiers dont le nom a une importance minime.
    Il me faudrait sélectionner ces fichiers, mais sans prendre ceux déjà sélectionnés.

    Comment faire pour sélectionner le reste des fichiers?

    Une solution à laquelle je pense est d'enregistrer les premiers fichiers sélectionnés dans un tableau, et comparer chaque fichier avec ce tableau, s'il est présent on passe, sinon on traite. Etant novice dans la programmation unix, je ne sais pas si cette solution est la meilleure ou s'il en existe d'autres. Egalement, je ne sais pas comment réaliser la solution que je propose du fait de mes connaissances réduites en shell unix.

    Je vous remercie par avance,

    Mathias

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    avec ksh tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for x in !(*_entreprise.csv|*_employe.csv|*_produits.csv)
    do
    : #chargement
    done

  8. #8
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Après essai, j'obtiens le message d'erreur suivant:

    :syntax error near unexpected token `('
    :`for x in !(*_entreprise.csv|*_employe.csv|*_produits.csv)

    donc cette solution ne marche pas...

    Est-ce mon compilateur ou alors savez-vous ce qui se passe?

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu es dans ksh? si tu es dans bash, il te faut encore
    avant ton for

  10. #10
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Desole pour ma médiocrité mais je n'y arrive pas.
    Je reçois encore un message d'erreur:

    : invalid shell option nameglob

    plus celle de mon mess precedent.

    J'ai cherché des infos sur la ligne SHOPT -S EXTBLOG, mais j'ai rien trouvé.
    Quand je fais un man de SHOPT, je ne comprend pas.

    Effectivement je suis dans Bash, j'avais oublié de le préciser.

    Avez-vous une idée d'où l'erreur vient???

    Merci

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Matmal11
    Desole pour ma médiocrité mais je n'y arrive pas.
    Je reçois encore un message d'erreur:

    : invalid shell option nameglob

    plus celle de mon mess precedent.

    J'ai cherché des infos sur la ligne SHOPT -S EXTBLOG, mais j'ai rien trouvé.
    Quand je fais un man de SHOPT, je ne comprend pas.

    Effectivement je suis dans Bash, j'avais oublié de le préciser.

    Avez-vous une idée d'où l'erreur vient???

    Merci
    peut-être extglob au lieu de extblog?

  12. #12
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for file in $(ls *.csv | grep -v employe | grep -v entreprise | grep -v produits)
        do
            #chargement
        done

Discussions similaires

  1. [XL-2007] Sélection de fichiers Excel dans répertoire courant
    Par FXdeCadix dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/07/2011, 14h43
  2. Réponses: 2
    Dernier message: 23/04/2007, 19h26
  3. sélection un ensembles de fichiers dans un répertoire
    Par da_latifa dans le forum Delphi
    Réponses: 1
    Dernier message: 13/06/2006, 21h00
  4. liste des fichiers d'un répertoire
    Par am dans le forum C
    Réponses: 3
    Dernier message: 04/08/2003, 18h03
  5. [Kylix] Liste des fichiers d'un répertoire
    Par Houben Jacques dans le forum EDI
    Réponses: 3
    Dernier message: 30/11/2002, 22h14

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