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 :

Transformation de pages html avec tableau en pages responsives


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 17
    Par défaut Transformation de pages html avec tableau en pages responsives
    Bonjour,

    Je suis à peine un peu plus que débutant en bash...
    Je suis en train d'écrire un script pour transformer des pages html qui contiennent des tableaux afin de les rendre responsives via bootstrap.
    La composition des tableaux varient au sein d'une même page et d'une page à l'autre.



    Voici les étapes que j'ai repérées :
    1 - Pour chaque ligne de tableau encadrée par les balises <tr> et </tr>, je dois compter le nombre de fois où la balise <td> est présente.

    J'arrive à compter le nombre de fois ou un motif apparaît sans un fichier de la manière suivante :
    grep -c "motif" nom_du_fichier

    mais il faudrait que je puisse travailler dans mon fichier sur ce qui est entre les <tr> et </tr>

    2 - Si entre les balises <tr> et </tr>, il y a une image, récupérer la valeur de width pour savoir la proportion que prend l'image par rapport à la page.
    3 - A partir de ces infos, je vais faire des calculs : avoir une valeur pour la cellule qui contient l'image et une autre pour les autres cellules
    et réinjecter mes résultats pour remplacer les <td> par des <div> avec des classes adaptées.
    Pour réinjecter ces résultats, il faut aussi que je puisse sélectionner la ou les balises <td> qui sont suivies d'une image.

    Voici le code avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <tr> 
            <td> 
            	<img src="fichier_image.jpg" alt="" width="299" height="319"> 
            </td>
            <td>
            	<p>Texte</p>	
            </td>
            <td>
            	<p>Texte</p>	
            </td>
            <td>
            	<p>Texte</p>	
            </td>
     </tr>

    et ce que je veux obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div class="row"> 
            <div class="col-$largeur_image> 
            	<img src="fichier_image.jpg" alt="" width="299" height="319"> 
            </div>
            <div class="col-$largeur_texte>
            	<p>Texte</p>	
            </div>
            <div class="col-$largeur_texte>
            	<p>Texte</p>	
            </div>
            <div class="col-$largeur_texte>
            	<p>Texte</p>	
            </div>
     </div>

    Voici le script provisoire que j'ai écrit :

    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
     
    nom=fichier.html
     
    # pour isoler une ligne comprise entre <tr> et </tr> et compter le nombre d'occurences <td> puis les affecter dans une variable :
    nb_cellules=$(tr '\n' '^' <$nom | grep -o -P '(?<=<tr>).*(?=</tr>)' |tr '^' '\n' |  grep -c "<td>")
     
    colonne_bootstrap=$((12/nb_cellules))
     
    # pour connaître la largeur de l'image
    long=$(tr '\n' '^' <fichier.html | grep -o -P '(?<=width=").*(?=")')
    largeur_image="${long:0:3}"
     
    echo $long
    echo $largeur_image
     
    # pour remplacer le <td avec la classe bootstrap adaptée :
    tr '\n' '^'<fichier.html | tr -d [:blank:] | sed -i "s/<td>^<img/<div class=\"col-'$largeur_image'\"\ /g" fichier.html | tr '^' '\n'
    # cette commande fonctionne quand je l'utilise seule dans le terminal mais pas dans mon script, sans doute un pb de sortie/entrée des processus...
     
    sed -i "s/<td/\<div class="col-$colonne_bootstrap"/g;s/<\/td>/<\/div>/;s/<tr>/<div class=\"row\">/;s/<\/tr>/<\/div>/" fichier.html
    Il y a sans doute des erreurs et d'autres manières plus élégantes et économique d'écrire tout cela...
    Merci pour vos retours.
    Patrick

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    bonjour,

    le HTML étant un langage balisé sans aucune obligation de format (les balises peuvent être n'importe où, les lignes vierges ne sont pas significatives, et tout le fichier peut être sur une seule ligne), le shell n'est pas un langage adapté à son traitement.
    il est préférable d'utiliser xmllint.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 141
    Par défaut
    Bonjour,
    oui mais je crois l'objectif est de modifier vite fait un fichier html en le réécrivant (rien à voir avec le html ou le php ou quoique ce soit d'autre ....).
    Le problème me semble juste de réécrire massivement un ou plusieurs fichiers avec des valeurs modifiées, et remplacer les tableaux par des div.

    Si c'est le cas, à vue de nez sed est ton ami. Mais de toute façon il faut un script avec des boucles si plusieurs fichiers.
    Si tu découvres Sed, ça va prendre un peu de temps. AMHA

    Il est facile de remplacer tous les <tr> par <div> et les </tr> par </div>, etc ...
    il faudrait grep toues les <img> et récupérer avec sed les valeurs de width et height, ...
    Quoique ... Vu que <img ne varie pas, pourquoi récupérer les valeurs ? width je vois, c'est $largeur_image, mais $largeur-texte c'est quoi ?

    PS: et responsives ? c'est à dire ?

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    modifier vite fait un fichier html [...]rien à voir avec le html

    le shell n'est pas adapté au traitement d'un langage balisé (html, xml, json...). J'ai expliqué pourquoi, je ne sais pas comment le dire autrement.
    le script shell qui va fonctionner pour un fichier html (ou autre balisage) peut ne pas fonctionner pour un autre; c'est dommage pour du traitement par lot* !
    alors que xmllint (ou python, ou perl, avec la bibliothèque ad'hoc (si nécessaire)) n'aura pas de souci.

    PS: et responsives ? c'est à dire ?
    +1

    --
    * il est bien question de "transformer des pages" dans le premier message.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 141
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    alors que xmllint (ou python, ou perl, avec la bibliothèque ad'hoc (si nécessaire)) n'aura pas de souci.
    j'ignore tout ça, aucune notion. Si c'est plus simple, un jour j'explorerai si j'ai besoin (c'est tellement vaste).

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut
    Je rejoint N_BaH.

    Tu pourras y arriver mais en galérant, alors que tu as des outils adaptés à cela.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 17
    Par défaut
    Citation Envoyé par Dens1 Voir le message
    Bonjour,
    oui mais je crois l'objectif est de modifier vite fait un fichier html en le réécrivant (rien à voir avec le html ou le php ou quoique ce soit d'autre ....).
    Le problème me semble juste de réécrire massivement un ou plusieurs fichiers avec des valeurs modifiées, et remplacer les tableaux par des div.
    C'est bien ça.

    Si c'est le cas, à vue de nez sed est ton ami. Mais de toute façon il faut un script avec des boucles si plusieurs fichiers.
    Si tu découvres Sed, ça va prendre un peu de temps. AMHA
    Je commence à me familiariser au sed.

    Il est facile de remplacer tous les <tr> par <div> et les </tr> par </div>, etc ...
    il faudrait grep toues les <img> et récupérer avec sed les valeurs de width et height, ...
    Quoique ... Vu que <img ne varie pas, pourquoi récupérer les valeurs ? width je vois, c'est $largeur_image, mais $largeur-texte c'est quoi ?
    Sur les différentes pages que j'ai à traité (12 000 environ), je vais avoir un nombre varié d'images par page avec des width différentes et un nombre de colonnes différent.

    PS: et responsives ? c'est à dire ?
    C'est à dire que la mise en page puisse s'adapter aux différentes tailles d'écran. D'où l'utilisation de bootstrap.

  8. #8
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 17
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    bonjour,

    le HTML étant un langage balisé sans aucune obligation de format (les balises peuvent être n'importe où, les lignes vierges ne sont pas significatives, et tout le fichier peut être sur une seule ligne), le shell n'est pas un langage adapté à son traitement.
    il est préférable d'utiliser xmllint.
    Merci pour ce retour.

    Je vais creuser xmllint mais cela m'a l'air complexe.

Discussions similaires

  1. [Batch] Transformation TXT en HTML avec ligne en couleur
    Par michel.r06 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 13/09/2021, 10h13
  2. VB6: Récupération des meta d'une page HTML avec HTMLDocument
    Par Matounet dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/09/2011, 07h55
  3. ouvrir une page dans une cellule d'un tableau html avec php
    Par bahboubacar2 dans le forum Langage
    Réponses: 4
    Dernier message: 31/05/2010, 16h50
  4. [CSS 2] Transformation d'un design avec tableau en design avec div
    Par sinasquax dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/12/2009, 13h02
  5. Réponses: 7
    Dernier message: 14/09/2005, 10h50

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