GNT sans publicité, site mobile, fonctionnalitées exclusives...

Tabulations dans printf

Le
xavier
Bonjour,

Je sais depuis mes débuts en C (il y aeuh) formater de jolis
tableaux ASCII, avec toutes les options, même exotiques, qu'on retrouve
verbatim dans Perl.

Ce que je ne sais pas faire par contre, c'est formater avec le nombre de
tabulations ad-hoc, comme ceci :

cle_courte<TAB><TAB><TAB>valeur
cle_tres_longue<TAB><TAB>valeur

C'est pour remplir un ficchier qui sera exploité par un programme dont
je n'ai pas le source, mais dont on peut dire sans se tromper, qu'il
matche l'éqivalent Perl de [\t]+ mais pas de [\t ]+

Ca fait deux jours que je google sans succès, après avoir cherché en
vain dans CPAN.

Quelqu'un aurait-il une idée à m'indiquer ?

Merci,

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Lire les 8 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #24101551
Bonjour,

Le 23/12/2011 15:35, Xavier a écrit :

Je sais depuis mes débuts en C (il y a...euh...) formater de jolis
tableaux ASCII, avec toutes les options, même exotiques, qu'on retrouve
verbatim dans Perl.

Ce que je ne sais pas faire par contre, c'est formater avec le nombre de
tabulations ad-hoc, comme ceci :

cle_courte<TAB><TAB><TAB>valeur
cle_tres_longue<TAB><TAB>valeur



Ouf ! Pas simple...

C'est pour remplir un fichier qui sera exploité par un programme dont
je n'ai pas le source, mais dont on peut dire sans se tromper, qu'il
matche l'équivalent Perl de [t]+ mais pas de [t ]+



Je suppose que les valeurs peuvent elles-même contenir des espaces,
lesquelles ne doivent pas être transformées en tabulations ?

Si ce n'est pas le cas, il te suffit de formater d'abord avec des
espaces, puis de passer le résultat à un outil qui remplace les
séries d'espaces par les tabulations appropriées.

Si tu n'es pas dans ce cas simple, mais que tu sais qu'une valeur ne
peut pas contenir plus de n espaces de suite (par exemple n=1), alors
voici une idée qui pourrait fonctionner, même si elle est un peu
tordue. J'explique en supposant des tabulations de 4.

1) Tu formates avec des espaces, en t'assurant que chaque valeur
commence après un multiple de 4 caractères. Ça je suppose que tu
dois savoir faire (et au passage c'était requis pour ma première
solution aussi). Il faut aussi qu'il y ait toujours plus de n
espaces, et je suppose que n
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par
3) Tu remplaces partout " {4}" par
Note que 2 et 3 peuvent être réunis en une seule étape :
2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par
Cordialement,
--
Olivier Miakinen
espie
Le #24101691
In article Xavier
Bonjour,

Je sais depuis mes débuts en C (il y a...euh...) formater de jolis
tableaux ASCII, avec toutes les options, même exotiques, qu'on retrouve
verbatim dans Perl.

Ce que je ne sais pas faire par contre, c'est formater avec le nombre de
tabulations ad-hoc, comme ceci :

cle_courte<TAB><TAB><TAB>valeur
cle_tres_longue<TAB><TAB>valeur

C'est pour remplir un ficchier qui sera exploité par un programme dont
je n'ai pas le source, mais dont on peut dire sans se tromper, qu'il
matche l'éqivalent Perl de [t]+ mais pas de [t ]+

Ca fait deux jours que je google sans succès, après avoir cherché en
vain dans CPAN.

Quelqu'un aurait-il une idée à m'indiquer ?



Text::Tabs
xavier
Le #24101681
Olivier Miakinen
Je suppose que les valeurs peuvent elles-même contenir des espaces,
lesquelles ne doivent pas être transformées en tabulations ?



Ben oui, sinon c'est pas drôle, et c'est sans doute pour ça que le soft
dont j'ai hérité se comporte de cette façon...

1) Tu formates avec des espaces, en t'assurant que chaque valeur
commence après un multiple de 4 caractères. Ça je suppose que tu
dois savoir faire (et au passage c'était requis pour ma première
solution aussi). Il faut aussi qu'il y ait toujours plus de n
espaces, et je suppose que n
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par
3) Tu remplaces partout " {4}" par
Note que 2 et 3 peuvent être réunis en une seule étape :
2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par


Ah... Je vais tester ça.

Merci

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
xavier
Le #24101671
Marc Espie
Text::Tabs



Grmblbl. J'ai cherché partout, et je ne suis pas tombé sur celui-là.

J'essaye ça, merci

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
xavier
Le #24101791
Xavier
Grmblbl. J'ai cherché partout, et je ne suis pas tombé sur celui-là.

J'essaye ça, merci



C'est impeccable. Juste que le module ne sait pas quoi faire des dernier
espaces, et les laisse.

Mais c'est pas grave, un s/t[ ]+/t/g; met tout d'équerre.

Thx

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Publicité
Suivre les réponses
Poster une réponse
Anonyme