Skip to content

Manipulation de données : petit exercice pratique

04/03/2011

C’est le genre de choses auxquelles, le jour où ça vous arrive, on est obligé de passer des heures. Parce qu’on ne voit pas comment faire autrement, on le fait manuellement.

Bref.

Imaginez que vous avez ceci : une liste d’identifiants, chacun suivi du nom rattaché à cet identifiant

sur 43 pages

et que vous voulez obtenir ceci : l’identifiant, suivi d’une tabulation, suivi du nom (que vous pourrez ensuite coller dans un tableur, évidemment)

Sous Word, comment faites-vous ?

Pourquoi cette question ? Parce que manipuler des données ne doit pas poser de problème — pas spécifiquement aux bibliothécaires, mais à toute personne amenée à voir passer des données

Je pose d’ailleurs la question aussi aux informaticiens (à condition qu’ils respectent la règle d’utiliser le logiciel prescrit — même pas  OpenOffice, parce qu’il permet les expressions régulières), parce qu’ils ont peut-être des solutions plus économiques que la mienne, et cela m’intéresse.

Pour reformuler la question plus clairement : il s’agit de remplacer le saut de ligne qui sépare l’identifiant du nom, en une tabulation.

26 commentaires
  1. François Garnier permalink
    04/03/2011 13:49

    Facile ! (j’ai cherché tout de même…)

    Avec Word 2008 :
    Dans la boite de dialogue « remplacer » : cliquer sur le bouton Plus, et en bas, sur le bouton Spécial qui ouvre une liste de toutes sortes de signes, ponctuations, etc.

  2. Dominique Filippi permalink
    04/03/2011 14:14

    Word permet aussi d’utiliser des caractères génériques (ci-dessous extrait de l’aide de Word 2003). C’est du chercher/remplacer un peu sophistiqué :

    chaîne à remplacer : ([0-9])(^l]([A-Z])
    chaîne de remplacement : \1^t\3

    Pour rechercher :
    N’importe quel caractère unique
    Tapez ?
    Par exemple, s?l recherche « sol » et « sel ».
    N’importe quelle chaîne de caractères
    Tapez *
    Par exemple, m*e recherche « mie » et « meuble ».
    Le début d’un mot
    Tapez <
    Par exemple,
    Par exemple, (in)> recherche « parrain » et « loin », et non « invité ».
    Un des caractères spécifiés
    Tapez [ ]
    Par exemple, s[ae]c recherche « sec » et « sac ».

    N’importe quel caractère compris dans la plage spécifiée
    Tapez [-]
    Par exemple, tou[r-t] recherche « tour » et « tous ». Les limites de la plage doivent être indiquées dans l’ordre croissant.
    N’importe quel caractère unique, à l’exception de ceux compris dans la plage indiquée entre les crochets droits
    Tapez [!x-z]
    Par exemple, pa[!a-m]e recherche « pane » et « pape », et non « paie » ou « page ».

    Exactement n occurrences du caractère ou de l’expression précédents
    Tapez {n}

    Par exemple, car{2} recherche « carré », et non « carte ».

    Au moins n occurrences du caractère ou de l’expression précédents
    Tapez {n,}

    Par exemple, can{1,}e recherche recherche « cane » et « canne ».

    De n à m occurrences du caractère ou de l’expression précédents
    Tapez {n,m}

    Par exemple, 10{1,3} recherche « 10 », « 100 » et « 1000 ».

    Une ou plusieurs occurrences du caractère ou de l’expression qui précède
    Tapez @

    Par exemple, cal@e recherche « cale » et « calleux ».

    Vous pouvez utiliser le caractère générique \n pour rechercher une expression, puis la remplacer par une autre expression. Par exemple, tapez (Le Goff) (Pierre) dans la zone Rechercher et \2 \1 dans la zone Remplacer par afin que Word recherche « Le Goff Pierre » et remplace cette expression par « Pierre Le Goff ».

  3. 04/03/2011 15:05

    @François Garnier : insuffisant. Comment distinguer le saut de ligne (^p) qui sépare l’identifiant du nom, et celui qui sépare le nom de l’identifiant de la personne suivante ?

    @Dominique Philippi : c’est du haut de gamme. Et je pensais découvrir quelque chose — sauf que ça ne marche pas.
    Dans ma liste, je n’arrive pas à chercher ([0-9])^p
    Je ne crois pas que les parenthèses fonctionnent pour permettre de récupérer la valeur dans la case « Remplacer », sauf à activer une fonction « utiliser les expressions régulières » que je ne connais pas.
    Pourtant j’ai bien Word 2003.

  4. 04/03/2011 15:49

    Sauf erreur, il faut d’abord rechercher ^p et le remplacer par ^l (saut de ligne manuel)
    Ensuite, effectivement, le remplacement tel que décrit peut s’effectuer sans problème.
    Explication : le saut de ligne ne peut être utilisé dans les expressions génériques, au contraire du saut de ligne manuel. (pourquoi ? mystère).

  5. François Garnier permalink
    04/03/2011 15:56

    @Lully : s’il n’y a pas de différence entre les sauts de lignes et les sauts de paragraphes ça ne fonctionnera pas, bien sûr.

    Autre méthode : Tout sélectionner, convertir le texte en tableau à 2 colonnes puis convertir le tableau en texte, en choisissant : séparer le texte par des tabulations.
    J’ai testé, ça fonctionne.

  6. 04/03/2011 16:03

    @Hélène : J’ai compris — et c’est intéressant
    Récapitulons :
    1. Chercher : ^p — Remplacer par : ^l
    2. Dans la boîte de recherche, cliquer sur « Plus » pour développer les options.
    3. Cocher en bas à gauche « Utiliser les caractères génériques »
    4.Chercher : ([0-9])^l
    (il retrouver le dernier chiffre de chaque identifiant, suivi d’un saut de ligne manuel)
    et Remplacer par : \1^t
    (le \1 sert à remplacer la première valeur rencontrée, exprimée entre parenthèses dans l’encart « Chercher »)

    Sauf si on a d’emblée un document avec des sauts de ligne manuel plutôt que des marques de paragraphe, on est contraint de lancer deux chercher-remplacer successifs.
    Comme on dit dans certains jeux : « Pas mieux » (j’y arrivais autrement, mais par deux chercher-remplacer successifs aussi)

    J’ai donc bel et bien appris quelque chose🙂

    A noter aussi : par défaut, quand on ne coche pas la case « Utiliser les caractères génériques », on peut chercher n’importe quel chiffre avec le caractère ^#.
    Ce caractère spécial est inopérant dès qu’on coche la case en question. C’est une manière donc d’activer les pseudo-expressions régulières Perl en désactivant les expressions régulières « maison » de Word.

    Et sans utiliser ces expressions régulières, justement ?

  7. 04/03/2011 16:06

    @François Garnier : bien vu, la conversion en tableau. Je m’en souviendrai !
    Et effectivement, ma copie d’écran ne permettait pas de savoir s’il s’agissait de sauts de lignes manuels ou de marques de paragraphes. Mea maxima culpa et toutes mes excuses !
    Cela dit, de manière générale je récupère plus souvent des fichiers avec des marques de paragraphes qu’avec des sauts de ligne : car des données de ce genre sont rarement copiées de pages web (la balise <br> devenant un saut de ligne manuel) et plus souvent récupérées de fichiers bruts de données (format .txt)

  8. 04/03/2011 16:21

    @Lully : oui c’est à cette démarche que je pensais (celle récapitulée en 4 points) et qui nécessite donc 2 transformations. Sans expression générique la conversion en tableau me semble une bonne solution, toujours en 2 étapes, du coup.
    « pas mieux » à proposer…😉
    mais je le garde dans un coin de ma tête, on ne sait jamais🙂

  9. Dominique Filippi permalink
    04/03/2011 20:04

    Effectivement, »le saut de ligne ne peut être utilisé dans les expressions génériques, au contraire du saut de ligne manuel. (pourquoi ? mystère). » J’avais testé avec des sauts de ligne…

  10. Dominique Filippi permalink
    04/03/2011 20:21

    Bon, ça m’agaçait, j’ai repris : une passe, il faut remplacer ^p par ^013 (ça doit être sa valeur dans la la de codage)

    ([0-9])(^013)([A-Z]) remplacé par \1^t\3 ; ici, ça marche. Ou sans le troisième élément aussi

  11. Dominique Filippi permalink
    04/03/2011 20:21

    Bon, ça m’agaçait, j’ai repris : une passe, il faut remplacer ^p par ^013 (ça doit être sa valeur dans la la table de codage)

    ([0-9])(^013)([A-Z]) remplacé par \1^t\3 ; ici, ça marche. Ou sans le troisième élément aussi

  12. 04/03/2011 20:23

    Pourquoi tu demandes ça ? Puisque tu peux résoudre ton problème simplement en utilisant Oo ou Notepad++ ou autre ?

  13. 05/03/2011 08:41

    Enfin la vraie question🙂 Merci Stéphanie, encore une fois,’tu as raison’ (et un bon point pour moi).
    Non mais sérieux, Lully, pourquoi s’em…. avec Word ? Tu devrais passer à Linux, ça devrait beaucoup de plaire😉

  14. 05/03/2011 10:12

    @Dominique : Bravo !
    Moi aussi j’ai appris quelque chose🙂

  15. 05/03/2011 14:44

    @Stéphanie et Daniel : pourquoi se forcer à utiliser Word ? Pour 3 raisons principales :
    1. on n’a pas toujours le choix des outils à utiliser
    2. je n’ai pas l’intention de tout faire moi-même : donc si je veux indiquer à des collègues comment faire ce genre de manip, je n’ai pas envie de sortir l’artillerie lourde (même si pour vous Notepad++ ou Ooo sont des outils simples) et je préfère partir d’outils qu’ils connaissent déjà. Si je leur parle d’un autre logiciel, je risque de voir leur oeil partir en vrille, et leur pensée intérieure (intérieure au mieux) formuler : « tant pis, je le ferai à la main
    3. parce que si le document à traiter est une thèse de 350 pages, déjà rédigée sous Word, avec des styles, des titres courants, des images insérées, etc. l’ouvrir sous N++ (ou même sous Ooo) risque de perturber le texte et son auteur.
    De la dizaine de thèses d’Ecole des chartes dont il m’est arrivé de revoir la mise en forme, aucune n’était faite sous Ooo.
    Sous Notepad++ non plus.

    Et j’y rajoute 2 autres raisons :
    a. chaque outil, chaque langage de programmation a des carences. Il faut savoir faire sans (ou avec). Ainsi sous XSL, pas d’expressions régulières. Obligation donc faire preuve d’imagination pour contourner le problème.
    b. cette manipulation-là, toute simple sur un fichier simple, pouvait se faire sous N++. Mais ce n’est pas le cas de toutes les manipulations qu’on peut être amené à faire sur des données textuelles (corrections automatiques, etc.). Si j’ai commencé avec du simple, c’est dans l’idée de voir ensuite du plus complexe (pas forcément du plus tordu).
    Cf. le billet suivant.

  16. 05/03/2011 14:46

    Zut, sur ce coup-là, le piège à troll n’a pas marché (trop fort ce Lully)🙂

  17. B. Majour permalink
    05/03/2011 17:54

    Hum

    Sur Word

    Alors, on remarque d’abord que tous les chiffres commencent par 0 (zéro).

    On change tous les ^p en ^t
    (^t = tabulation)

    puis on rechange les ^t0 en ^p

    Sur Excel

    en Colonne B1, on tape la formule suivante =A1 &  »  » &A2, et on la copie jusqu’en bas.

    On sélectionne la colonne B.
    On la recopie ensuite dans un nouvel onglet en effectuant un collage spécial « valeur uniquement », pour ne conserver que les valeurs.
    Un tri de cette colonne B mettra les numéros devant, ce qui permettra d’éliminer les lignes intermédiaires.

    Le tableau est prêt à usage.

    L’avantage d’Excel, c’est qu’on peut avoir plusieurs lignes du genre

    003533
    toto
    05/11/2004

    003564
    tutu
    03/02/2002

    la formule s’étend ainsi : =A1 &  »  » &A2 &  »  » &A3 (etc.)

    ou =A1 & « ;  » &A2 & « ;  » &A3

    si on préfère des points virgules pour convertir ensuite le texte en tableau sous Word
    (Mais on peut aussi répartir les colonnes sur Excel
    A1 en B1
    A2 en C1
    A3 en D1
    Le tri des valeurs permettra de redresser le tableau comme il faut.)

    Surtout, on évite de se taper plus de deux pages à la main. 🙂

    Et s’il faut – vraiment – le faire à la main sur Word, on rajoute un $ derrière chaque « fin » d’enregistrement.

    003533
    toto
    05/11/2004$

    003564
    tutu
    03/02/2002$

    on recherche-remplace alors tous les ^p en ^t
    puis on transforme les $ en ^p

    On s’économisera un nombre appréciable de suppr et entrée, et tabulations.

    Bien cordialement
    B. Majour

  18. 05/03/2011 19:11

    @B. Majour : les manip sur Excel sont intéressantes, quoique, sur un exercice comme celui-là, je ne les trouve pas très économiques.
    Je reviens sur la dernière procédure proposée (avec les $) : si on récupère une liste du type
    003533
    toto
    05/11/2004

    003564
    tutu
    03/02/2002

    Comment fait-on pour rajouter automatiquement un $ à la fin de chaque enregistrement, et uniquement là ? On revient sur la manière de distinguer un saut de ligne d’un autre saut de ligne… donc au point de départ.

  19. B. Majour permalink
    06/03/2011 11:31

    Bonjour

    Pour le $, je parlais de devoir le faire à la main.
    Plutôt que de supprimer les « fin de ligne » à la main

    Dans le deuxième exemple que je donne (et que tu reprends) avec les trois éléments, je n’ai pas l’impression que tu pourras t’en sortir avec les rechercher-remplacer Word. Tu as du numérique sur deux lignes.

    Pour Excel, ça rend possible la mise en ligne des enregistrements (même si les données sont séparées par des lignes vides, ou par des « cochonneries »). Le tri d’Excel te permettra de remonter les seuls éléments qui t’intéressent.

    Bien cordialement
    B. Majour

  20. Dominique Filippi permalink
    06/03/2011 18:43

    On va vraiment me prendre pour un maniaque, mais comme j’apprends en répondant, autant que je le note là. Comme pour toute expression régulière, le mécanisme des caractères génériques se généralise facilement. Je n’avais pas assez abstrait le modèle de recherche, il suffisait de remplacer un saut de paragraphe sur deux, quel que soit le contexte, finalement.

    Pour résoudre dans Word le problème avec trois lignes, le chercher/remplacer suivant semble fonctionner :

    chercher : (*)^13(*)^13(*)^13 [le zéro devant 13 ne sert à rien finalement]
    remplacer par : \1^t\2^t\3^13

  21. Dominique Filippi permalink
    06/03/2011 19:00

    Un petit dernier : en fait, l’aide signale qu’on ne peut pas utiliser ^p dans la chaîne à rechercher, mais qu’il faut l’utiliser dans la chaîne de remplacement, ce sont deux caractères différents, ^13 n’accepte pas certaines mises en forme (enfin j’ai lu trop rapidement, c’est sous réserve). Donc il faudrait écrire :

    remplacer (*)^13(*)^13(*)^13 par \1^t\2^t\3^p

  22. 06/03/2011 19:16

    @Dominique : non, non, pas maniaque… curieux, plutôt, avec sans doute un côté passionné😉
    Merci, j’apprends plein de choses🙂 …
    … et merci à Lully d’avoir posé cette colle, du coup😉

  23. B. Majour permalink
    07/03/2011 11:38

    Bonjour

    @Dominique Filippi

    Je testerai la solution proposée sur une version plus récente de Word.

    Le gros désavantage de Word est qu’il faut, quand même, une version « nickel » du fichier. C’est-à-dire sans lignes vides. Sinon, toute la mise en ligne se décale.😦

    Je confirme que le ^013 est bien le caractère « Retour chariot »
    On a aussi le ^011 pour les textes provenants du monde Unix. (à voir le signe utilisé en tapant le raccourci ctrl+* et de nouveau ctrl+* pour ne plus voir les caractères marqueurs)

    Bien cordialement
    B. Majour

  24. Dominique Filippi permalink
    07/03/2011 12:13

    @B. Majour :

    une ligne vide ne change rien, le caractère * vaut pour une chaîne vide (0 ou n caractères quelconques)

Trackbacks

  1. Manipulation de données : deuxième exercice « Bibliothèques [reloaded]
  2. Manipulation de données : deuxième exercice « Bibliothèques [reloaded]

Les commentaires sont fermés.

%d blogueurs aiment cette page :