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

Shell et commandes GNU Discussion :

Comparer noms de fichier et copier contenu dans MySQL


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Par défaut Comparer noms de fichier et copier contenu dans MySQL
    Bonjour,

    Je souhaite analyser un dossier comportant plusieurs fichiers de type suivant:

    nom_n°1_taille1_nom.txt
    nom_n°1_taille1_nom_est.txt
    nom_n°2_taille1_nom.txt
    nom_n°2_taille1_nom_est.txt
    ....

    Il faut comparer les noms entre eux, à savoir "nom_n°X_taille1_nom" et s'il les noms sont identique, il faut copier le contenu du fichier dans une requete SQL.

    J'ai commencé à faire se script en shell; mais cela ne convient pas totalement

    Code : 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
    for fich1 in *; do
     
       # echo $fich1
     
        variable=$fich1
     
        fichier2=${variable##*1.txt}
        fichier3=${variable##*est.txt}
     
        echo $fichier2
        echo $fichier3    
     
        cmp -s $fichier2 $fichier3
     
        if [ $? -eq 0 ]; then
     
            TEMP=`mysql --user=root --password=xxxxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '1', '$fichier2', '$fichier3', '');
    #MySCRIPT`
     
     else
        echo NOK
        fi
     
    done
    Pour l'instant, le code ne prend pas en charge la lecture du contenu, il ne colle dans la base que le nom du fichier.

    Merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    1. cmp compare des contenus de fichiers, pas leurs noms. Pour comparer des chaines faut utiliser test.
    2. je en vois pas à quoi sert la variable "variable" vu qu'elle a le même contenu que la variable "fich1"
    3. je ne vois pas à quoi sert la variable "TEMP" que tu n'utilises pas. Accessoirement les noms en majuscules sont réservés aux variables système.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    je propose de faire de la manipulation de fichier texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat /tmp/testsql.txt
    nom_n°1_taille1_nom.txt
    nom_n°1_taille1_nom_est.txt
    nom_n°2_taille1_nom.txt
    nom_n°2_taille1_nom_est.txt
    $ sed 's/\.\([^\.]*\)$/_\1/' /tmp/testsql.txt | awk -F'_' '{a[$1_$2_$3_$4]++;r[$1_$2_$3_$4]=r[$1_$2_$3_$4]$0";"} END{for (i in a) if (a[i]>1) print r[i]}'|sed 's/_\([^_]*\);/.\1;/g'
    nom_n°1_taille1_nom.txt;nom_n°1_taille1_nom_est.txt;
    nom_n°2_taille1_nom.txt;nom_n°2_taille1_nom_est.txt;
    Une fois qu'on arrive là, il est facile de créer des requêtes sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 's/\.\([^\.]*\)$/_\1/' /tmp/testsql.txt | awk -F'_' '{a[$1_$2_$3_$4]++;r[$1_$2_$3_$4]=r[$1_$2_$3_$4]$0";"} END{for (i in a) if (a[i]>1) print r[i]}'|sed 's/_\([^_]*\);/.\1;/g'|awk -F';' '{print "INSERT INTO test.taille VALUES ('\'\'', '\''1'\'', '\''"$1"'\'', '\''"$2"'\'', '\'\'');";}'
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°1_taille1_nom.txt', 'nom_n°1_taille1_nom_est.txt', '');
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°2_taille1_nom.txt', 'nom_n°2_taille1_nom_est.txt', '');
    Bonne chance!

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Si les champs variables ne contiennent pas de points, il y a plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk -F'[_.]' '{a[$1_$2_$3_$4]++;r[$1_$2_$3_$4]=r[$1_$2_$3_$4]$0";"} END{for (i in a) if (a[i]>1) print r[i]}' /tmp/testsql.txt|awk -F';' '{print "INSERT INTO test.taille VALUES ('\'\'', '\''1'\'', '\''"$1"'\'', '\''"$2"'\'', '\'\'');";}'
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°1_taille1_nom.txt', 'nom_n°1_taille1_nom_est.txt', '');
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°2_taille1_nom.txt', 'nom_n°2_taille1_nom_est.txt', '');

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Par défaut
    Bonjour,

    J'ai écris le code ci dessous (loin d'être parfait), qui me copie le contenue des fichiers dans la base lorsque les noms des fichiers sont les moins (moins la partie "est.txt"):

    Code : 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
    for fichier in *est.txt; do
        for fichier1 in *1.txt; do
     
            fichier3=$(basename -s est.txt $fichier)
            fichier2=$(basename -s .txt $fichier1)
     
            echo fichier 1 = $fichier3
            echo fichier 2 = $fichier2
     
            if [ "$fichier3" = "$fichier2" ]
                then
     
                A="$(cat $fichier)"
                B="$(cat $fichier1)"   
     
     
                v="taille1"
                if [[ "$A" =~ $v ]]
                then
                taille="2"
     
                TEMP=`mysql --user=root --password=xxxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$A', '$B', '');
    MySCRIPT`
     
        fi   
        fi
     
        done 
    done
    Ensuite, j'ai rajouté la seconde boucle if afin de pouvoir modifier automatiquement la variable "taille", de telle sorte que ci elle vaut taille1, cela soit égal à 2, et si elle vaut "taille3", cela soit égal à 3; mais le script ne la lis pas !

    merci

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    lorsque les noms des fichiers sont les moins
    Je ne comprends pas l'idée de cette proposition.

    Je ne comprends pas l'intérêt de ce script et le but final.

    Ne manque-t-il pas à la commande mysql l'option '-e' pour indiquer que tu vas écrire une requête SQL ? Je doute que cette commande marche en l'état.

    Pourquoi ne pas protéger $v par "$v" ?

Discussions similaires

  1. Obtenir le nom du fichier le plus récent dans un dossier.
    Par agentchico dans le forum Windows
    Réponses: 1
    Dernier message: 06/06/2008, 08h10
  2. lire le nom des fichiers qui se trouvent dans un dossier
    Par foufoulol dans le forum Langage
    Réponses: 6
    Dernier message: 05/05/2008, 11h38
  3. Noms de Fichiers d'un répertoire dans un Tableau
    Par PiliSql dans le forum VB.NET
    Réponses: 2
    Dernier message: 01/03/2008, 12h37
  4. ouvrir fichier un word contenu dans une base access
    Par seiya18 dans le forum VBA Access
    Réponses: 10
    Dernier message: 12/02/2008, 13h57
  5. Réponses: 4
    Dernier message: 04/12/2007, 13h31

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