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 :

Remplacer plusieurs sections d'un fichier contenues dans un autre fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut Remplacer plusieurs sections d'un fichier contenues dans un autre fichier
    Bonjour à tous,

    Bon voilà plusieurs jours que je m'échine à trouver une solution à un problème qui, au départ, me semblait facile : copier coller des passages d'un fichier vers un autre....
    Toujours est-il que je n'y arrive pas.
    J'ai deux fichiers Html très longs (plusieurs centaines, milliers de pages).. J'ai un fichier disons Origine dont je dois remplacer des passages par d'autres contenus dans le fichier Beta. J'ai pratiquement 1000 remplacements à faire.

    Dans Origine j'ai des indices (ex :id="FO23P") qui me permette de trouver quels sont les passages que je dois remplacer.
    Dans Beta, je n'ai pas d'indice, juste des titres des passages.

    Fichier Origine :
    blabla
    id="FO23P" < titre1 >
    blabla ..end
    blabla
    id="FT12I" < titre2 >
    blabla ...end
    blabla ...

    Fichier Beta
    blibli
    < titre23 >
    bliblibli end
    blibli
    < titre3 >
    blibli end
    blibli


    Mon plan de départ était de :
    1) construire des indices identiques dans Beta à partir des titres (ex si titre = "Lesson 18 Formation l'Originalité par Jean" alors idA="FO18J", en faisant d'abord un recherche sur Formation, si OK then idA="F" recherche sur Orinalité si ok idA=idA+"O" etc), d'inclure ce nouvel indice juste avant le titre du passage dans BETA.
    2) Repérer le passage (je pense avoir trouvé une balise de fin ),par l'indice idA, comparer id et idA, si OK remplace le passage de Origine par passage dans Beta.

    j'ai essayé en Python avec des expressions regex mais le copier coller n'est pas son fort. Je me suis alors rappeler que Bash pourrait surement etre plus efficace ...

    Mais je ne suis qu'un pauvre (Hélas) économiste, j'ai bien touché un peu à Bash il y a des années mais ... echec

    pour 1) j'ai essayé d'utiliser un grep puis un if sur le grep pour construire l'indice idA , mais je ne sais pas faire une boucle correcte sur le grep.

    N'ayant toujours pas réussit le 1); je ne me suis pas attaqué au 2)


    Si vous pouviez m'aider je vous en serais bien reconnaissant,

    Ghislain

  2. #2
    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

    Les titres du fichier Origine et celui du fichier Beta ne sont pas les mêmes ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    non pas exactement ils ont souvent des différences, parfois un peu aléatoires...

  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
    Est-ce que tu peux préciser comment tu reconstruis l'ID ? Parce que là, on comprend rien.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    l'id dans origine a une certaine logique par exemple d'abord une lettre pour une grande catégorie : F pour formation, E pour expérimentation etc ...; deuxième lettre pour sous catégorie par exemple : L,M,X,J,V,S,D pour les jours de la semaine; un nombre qui correspond à par exemple le numero de l'expérimentation ou de la formation, parfois une autre lettre pour un autre critère

    Pour construire l'idA je vais chercher dans le titre l'ensemble de ces informations et je construit le nouvel index
    un bout de mon code que j'avais commencé en python :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    pattern= '<div class="tit1(.+?)>(.+?)</div>' # je capte le titre
    dotall = re.compile(pattern,re.DOTALL)
    tutuall=dotall.findall(monfichier)# retrouve toute les occurences et les mets dans une liste, que je vais pourvoir "iterer"
    iterator = dotall.finditer(monfichier)
    iterator  
    i=0
    for match in iterator:
        print("__________ debut de boucle ______", i, "\n")
        a=match.group(0)
        b=match.group(1)
        c=match.group(2) # c'est dans le groupe 2 que ce trouve mes info pour faire le nouvel indice
    # je commence mon identification en suivant ce que je dois obtenir pour faire correspondre à id dans le fichier Origine 
        if "Avent" in c :
            idA="F"+"A"
        if "Noël" in c :
            idA="F"+"N"
        if "rdinaire" in c :
            idA="F"+"O"
        if "arême" in c :
            idA="F"+"C"
        if "ainte" in c :
            idA="F"+"T"
    #A ce moment idA=FA, ouFC ou autres deux lettres
     
          if "remière semaine" in c:
                idgdr=idgdr+"1"
          if "euxième semaine" in c:
                idgdr=idgdr+"2"
          if "roisième semaine" in c:
                idgdr=idgdr+"2"
          if "uatrième semaine" in c:
                idgdr=idgdr+"4"  
    #je rajoute le numéro idA="FC4" ou autre
        if "imanche" in c :
            idgdr=idgdr+"D"
        if "undi" in c :
            idgdr=idgdr+"L"
        if "ardi" in c :
            idgdr=idgdr+"M"
        if "ercredi" in c :
            idgdr=idgdr+"X"
        if "eudi" in c :
            idgdr=idgdr+"J"
        if "endredi" in c :
            idgdr=idgdr+"V"
        if "amedi" in c :
            idgdr=idgdr+"S"
    #je rajoute encore une lettre pour le jour de la semaine  idA=FC4M
    #etc sur autres critères
    j'avais fais mes "if" de façon à ce qu'il correspondent à l'ordre qui va bien dans id

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Le code python que tu nous as donné calcul bien ton idA ?

    Ce qu'il te manque c'est comment l'insérer dans ton fichier Bêta ?

    Bref, c'est pas clair tout ça...

    Tu n'as pas un exemple concret de ce que tu veux en résultats avec une dizaine de lignes du fichier Origine et une dizaine de lignes du fichier Bêta ?

Discussions similaires

  1. Boucle copier coller entre 2 fichiers pour chaque ligne
    Par cheerleaders dans le forum Excel
    Réponses: 3
    Dernier message: 19/05/2015, 18h09
  2. Copier / Coller entre 2 fichiers excel
    Par roberto75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/03/2011, 12h25
  3. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  4. Copier-coller entre fichier CSV et XLS
    Par da991319 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/09/2007, 21h42
  5. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08

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