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 :

Extraire des fichiers XML et PDF d'un fichier les compilant (utilisation de "tr")


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut Extraire des fichiers XML et PDF d'un fichier les compilant (utilisation de "tr")
    Bonjour,

    j'ai un fichier test.bin qui est une compilation de fichiers XML et PDF et je dois les séparer. Exemple de début de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
    <infos>
    Courriers administratifs dematerialises
    </infos>%PDF-1.5
    %M-5M-5M-5M-5
    1 0 obj
    ...
    La commande "awk '/%PDF/{c++} {print > FILENAME"_"c }' /tmp/test.bin" permet de séparer comme en fonction de la ligne qui contient "%PDF" mais comme il y a d'autres données avant "%PDF" ça ne fonctionne pas. J'ai essayé de transformé au préalable "</infos>%PDF-1.5" par "</infos>\n%PDF-1.5" mais je n'y arrive pas (avec la commande : tr '%PDF' '\n%PDF' < test.bin > test2.bin) mais ça donne des choses imprévues : le "F" de "%PDF" a disparu, ainsi que le "%" de "%M" et une ligne blanche est ajoutée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTD-8"?>
    <infos>
    Courriers administratifs dematerialises
    </infos>
    %PD-1.5
     
    M-5M-5M-5M-5
    1 0 obj
    ...

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/%PDF/{$0=gensub(/.*(%PDF.*)/,"\\1","1",$0); c++} {print > FILENAME"_"c; }' fichier

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    Merci pour la réponse mais j'ai l'erreur suivante : awk: Function gensub is not defined.

    J'ai une autre piste la commande "dd skip=1 count=98 if=/tmp/test.bin of=/tmp/test1.bin bs=1" permet de découper précisément (de 1 à 98 ici). Je peux donc l'utiliser dans un script, malheureusement je n'arrive pas à trouver de commande me donnant les positions d'une chaîne de caractères dans un fichier.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    C'est un problème de version de awk.

    Same player shoot again.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/%PDF/{sub(/.*%PDF/,"%PDF",$0); c++} {print > FILENAME"_"c; }'

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    La nouvelle commande passe mais elle fait disparaitre ce qu'il y a devant le "%PDF".
    Premier fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="UTF-8"?>
    <infos>
    Courriers administratifs dematerialises
    Il manque "</infos>" à la fin.

    Deuxième fichier (OK) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %PDF-1.5
    %M-5M-5M-5M-5
    1 0 obj
    ...
    La chaîne de caractères "</infos>" précédant "%PDF" a donc disparu.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Ben oui, évidemment. Tu peux sauver le début avec un substr() et un index().

    Sinon, autre idée : changer le séparateur d'enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN{RS="%PDF";} {print ((NR>1)?"%PDF":"")$0 >FILENAME"_"NR}' fichier

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

Discussions similaires

  1. extraire des fichiers sons contenu dans un pdf
    Par pythéas dans le forum Documents
    Réponses: 1
    Dernier message: 16/05/2019, 10h25
  2. Extraire des données d'un Pdf en XML ?
    Par blackguitar dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 21/08/2009, 11h58
  3. Extraire des fichiers vérolés
    Par koKoTis dans le forum Windows XP
    Réponses: 13
    Dernier message: 11/03/2007, 14h11
  4. Stocker / Extraire des fichiers dans une base Access
    Par bryan_fury75 dans le forum Bases de données
    Réponses: 5
    Dernier message: 14/06/2006, 15h17
  5. [xml] comment extraire des donnés xml
    Par Lodos dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 20/04/2006, 21h47

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