Journal Feuille de style pour CSV

Posté par . Licence CC by-sa.
11
23
jan.
2019

N'avez-vous jamais voulu suivre l'évolution d'un fichier de type "tableur" ?

Et bien, moi, je voulais versionner un tel fichier contenant des chaînes de caractères et leurs traductions. Le projet évoluant, des lignes venait s'insérer à n'importe quel endroit du fichier. J'aurais pu utiliser le format CSV mais je voulais manipuler le document avec un tableur (LibreOffice Calc, par exemple) et je trouvais cela fastidieux de repasser par la phase d'importation à chaque ouverture; je me suis dès lors tourné vers le format "Flat ODS" qui permet de comparer de façon intelligible les différentes versions (car, contrairement au fichier ODS, il n'est pas compressé). Mais je n'étais pas totalement satisfait car beaucoup d'informations inutiles étaient stockées dans le gestionnaire de versions (et venait donc polluer ma comparaison).

Il me vient alors l'idée d'avoir deux fichiers, un fichier CSV et un fichier de mise en forme. L'un serait versionné et l'autre permettrait de l'afficher de manière confortable (de faire du Modèle-Vue, en gros). Le fichier auxiliaire pourrait contenir des préférences utilisateurs sans "contaminer" les données. On pourrait imaginer qu'à l'ouverture du CSV avec le tableur, le programme cherche ce fichier auxiliaire et évite l'import si certaines conditions sont respectées.

En cherchant un peu sur le web, j'ai trouvé ce projet Tabular Data Package qui se rapproche de ce que j'imagine. Mais le but ici est plutôt de lever des ambiguïtés du CSV pour une communication entre machine (si j'ai bien compris).

Alors, chère communauté Linuxfr, est-ce que tu as déjà eu un besoin similaire ? Comment l'as-tu résolu ? Est-ce que mon idée te semble à creuser ?

Merci pour vos retours/commentaires !

  • # Sinon

    Posté par . Évalué à 2 (+3/-3).

    Tu peux utiliser XML et XSLT.

    • [^] # Re: Sinon

      Posté par . Évalué à 1 (+0/-0).

      Je vois l'idée mais y'a t-il un tableur qui permettrait d'éditer les documents ?

      • [^] # Re: Sinon

        Posté par . Évalué à 3 (+1/-0).

        Tu édites en CSV, tu fais une phase de préprocessing qui te transforme ton CSV en XML dans le code qui fait appel à la feuille de style. Si tu est à l’aise avec XSLT ça peut valoir le coup.

        Exemple de transfo possible :

        A B C
        1 2 3
        4 5 6

        en

        <doc>
        <ligne><A>1</A><B>2</B><C>3</C></ligne></doc>
  • # Import ?

    Posté par . Évalué à 2 (+0/-0).

    je trouvais cela fastidieux de repasser par la phase d'importation à chaque ouverture

    Je ne comprends pas vraiment de quoi tu parles quand tu dis "phase d'importation". Si ton tableur est bien configuré, il devrait pouvoir ouvrir et manipuler les csv sans avoir à l'importer.

  • # SYLK

    Posté par . Évalué à 3 (+3/-1).

    Il existe le format de fichier SYLK qui pourrait parfaitement cnvenir à ton usage:

    • import direct dans LO et Excel
    • Formatage/style des données
    • Format textuel

    https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

    Courage !

    • [^] # Re: SYLK

      Posté par . Évalué à 1 (+0/-0).

      Merci pour le conseil, je n'avais pas exploré cette solution. Elle a l'air de convenir a mes besoins ! Je vais tester cela.

  • # traduction?

    Posté par (page perso) . Évalué à 4 (+1/-0).

    Pourquoi ne pas utiliser un fichier .properties ou .po pour les traductions?

    Incubez l'excellence sur https://linuxfr.org/board/

  • # .

    Posté par . Évalué à 3 (+1/-0).

    N'avez-vous jamais voulu suivre l'évolution d'un fichier de type "tableur" ?

    Un fichier de type "tableur", c'est très vague. Et la frontière entre les données et leur présentation est floue : si tu décides d'afficher en rouge les entiers inférieurs à 42, c'est de la présentation, mais la borne c'est de la présentation ou de la donnée ?

    Je pense donc que le cas général n'est pas soluble parce qu'insuffisamment spécifié.

    Et bien, moi, je voulais versionner un tel fichier contenant des chaînes de caractères et leurs traductions.

    Ce besoin me semble nettement plus simple à solutionner. As-tu étudié les solutions du genre Poedit ? Les fichiers *.po ou *.pot sont versionnables et les interfaces sont bien léchées.

    • [^] # Re: .

      Posté par . Évalué à 1 (+0/-0).

      "Un fichier contenant des chaînes de caractères et leurs traductions." mais pas que ça. :-)
      De plus, utiliser gettext n'est pas envisageable car je ne maîtrise pas toute la chaîne.

  • # versioning intégré à LO ?

    Posté par . Évalué à 2 (+0/-0).

    Dans Fichiers -> Versions, tu peux enregister plusieurs versions d'un fichier et les comparer (c'est pas aussi facilement lisible qu'un diff sur du texte, mais ça peut être suffisant selon ton besoin). Toutes les versions sont sauvegardées dans le même fichier.

  • # LO + git + XSLT

    Posté par . Évalué à 5 (+3/-0).

    Mais je n'étais pas totalement satisfait car beaucoup d'informations inutiles étaient stockées dans le gestionnaire de versions (et venait donc polluer ma comparaison).

    Moi aussi, donc j'ai poussé un peu plus loin : un script XSLT qui efface tout ce bordel inutile, utilisé comme filtre au moment du checkin (gitattributes(1)). Le script en question, lo-strip-config.xsl :

    <?xml version="1.0" encoding="UTF-8"?\>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
        >
    
    <xsl:output encoding="UTF-8"/>
    
    <xsl:template match="office:document/office:settings"/>
    <xsl:template match="office:document/office:scripts"/>
    
    <xsl:template match="@*|node()"\>
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    </xsl:stylesheet>

    La fin, c'est la formule « identité » d'XSLT, la « magie » est dans les deux templates vides qui matchent les balises à supprimer.

    Ensuite on crée un filtre qui utilise ce script lors du checkin, dans .git/config :

    [filter "lo-noconfig"]
            clean = xsltproc lo-strip-config.xsl -
    

    Et on indique de l'utiliser pour tous les fichiers fodt (c'était pour Document, pas Spreadsheet, dans mon cas, mais le script est agnostique) dans un .gitattributes dans le dépôt :

    *.fodt  filter=lo-noconfig
    

    Et voilà, tu as ainsi des fichiers LibreOffice « propres » dans ton dépôt.

  • # On peut le faire avec LibreOffice Calc ...

    Posté par . Évalué à 8 (+7/-0).

    … mais pas en important le fichier CSV mais en l'insérant avec liaison. Dans la version 6 il faut aller dans le menu Feuille et choisir l'entrée "Insérer une feuille à partir d'un fichier". La première fois on a bien le dialogue d'import du CSV mais ensuite il suffit de recharger le tableur (menu Fichier) quand le fichier CSV a été modifié. On peut se définir un raccourci clavier pour l'action "Recharger".

    J'utilise ça pour faire des graphiques à partir d'un fichier texte produit par un code de calcul. J'ai une 1ère feuille qui contient une copie brute du fichier CSV et rien d'autre, une 2e feuille qui contient une copie réorganisée de la première (avec des formules comme =$Feuille1.A1 dans A1) avec des mises en forme qui en améliorent la lisibilité plus des colonnes supplémentaires contenant des formules de calcul, enfin une 3e feuille qui contient des graphiques dont les données sont prises dans la 2e feuille. Si on fait les graphiques directement sur les données brutes de la 1ère feuille, ils sont perdus lors du rechargement du fichier CSV.

    Cette technique n'est valable que si LibreOffice Calc sert à visualiser confortablement le fichier CSV. S'il faut aussi le modifier c'est une autre histoire.

    • [^] # Re: On peut le faire avec LibreOffice Calc ...

      Posté par . Évalué à 2 (+0/-0). Dernière modification le 25/01/19 à 09:56.

      Ah, ça me rappelle une autre technique du même genre, qui permet (de mémoire) également de modifier le CSV : utilise LibreOffice Base (vous savez, le truc auquel on pense jamais), qui permet également de faire une « liaison » avec un CSV. En plus, je pense qu'on peut également lier Base avec Calc pour faire des graphiques comme tu dis ; donc avoir Base pour modifier, et Calc pour visualiser… Bon, c'est à vérifier.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.