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 :
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)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
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 :
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 < 4.
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par <TAB>.
3) Tu remplaces partout " {4}" par <TAB>.
Note que 2 et 3 peuvent être réunis en une seule étape : 2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par <TAB>.
Cordialement, -- Olivier Miakinen
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 :
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 < 4.
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par <TAB>.
3) Tu remplaces partout " {4}" par <TAB>.
Note que 2 et 3 peuvent être réunis en une seule étape :
2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par <TAB>.
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 :
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 < 4.
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par <TAB>.
3) Tu remplaces partout " {4}" par <TAB>.
Note que 2 et 3 peuvent être réunis en une seule étape : 2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par <TAB>.
Cordialement, -- Olivier Miakinen
espie
In article <1kcqizh.1cb51of1obe97iN%, Xavier wrote:
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 :
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
In article <1kcqizh.1cb51of1obe97iN%xavier@groumpf.org>,
Xavier <xavier@groumpf.org> wrote:
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 :
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.
In article <1kcqizh.1cb51of1obe97iN%, Xavier wrote:
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 :
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
Olivier Miakinen <om+ wrote:
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 < 4.
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par <TAB>.
3) Tu remplaces partout " {4}" par <TAB>.
Note que 2 et 3 peuvent être réunis en une seule étape : 2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par <TAB>.
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)
Olivier Miakinen <om+news@miakinen.net> wrote:
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 < 4.
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par <TAB>.
3) Tu remplaces partout " {4}" par <TAB>.
Note que 2 et 3 peuvent être réunis en une seule étape :
2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par <TAB>.
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)
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 < 4.
2) Tu remplaces partout " {1,3}(?= {4}+[^ ])" par <TAB>.
3) Tu remplaces partout " {4}" par <TAB>.
Note que 2 et 3 peuvent être réunis en une seule étape : 2&3) Tu remplaces partout "( {1,3}(?= {4}+[^ ])| {4})" par <TAB>.
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
Marc Espie wrote:
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)
Marc Espie <espie@lain.home> wrote:
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)
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)
Jean-Louis Morel
Le 23/12/2011 18:40, Xavier a écrit :
Xavier wrote:
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.
Oui, mais si vous transformez les t en espaces pour ensuite réduire les espaces en t, vous perdez la notion de colonnes séparées par t. Si le texte comporte une série de 4 espaces successives par exemple, vous allez avoir une colonne de plus, car ces 4 espaces vont être transformées en t.
Personnellement, je préfèrerais utiliser t comme séparateur et comme caractère de bourrage pour ensuite les réduire.
#!/usr/bin/perl use strict; use warnings; use Text::Tabulate;
my $tabstop = 4; # valeur d'un t en caractères
my $tab = new Text::Tabulate(); $tab->configure(-tab => "t", gutter => "t", pad => "t");
# trois lignes pour tester my @lines = ( "In your pomp andtall yourtglory you'ren", "a poorer man than me,tas you lick the bootstofn", "deathtborn out of fear.t(Jethro Tool)n" );
my @out = $tab->format (@lines); foreach (@out) { s!(t+)!"t"x(length($1)/$tabstop+1)!eg; }
print @out, "n";
__END__
Bon, je dis ça, mais c'est juste pour pinailler :-))
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.
Oui, mais si vous transformez les t en espaces pour ensuite réduire
les espaces en t, vous perdez la notion de colonnes séparées par t.
Si le texte comporte une série de 4 espaces successives par exemple,
vous allez avoir une colonne de plus, car ces 4 espaces vont être
transformées en t.
Personnellement, je préfèrerais utiliser t comme séparateur et comme
caractère de bourrage pour ensuite les réduire.
#!/usr/bin/perl
use strict;
use warnings;
use Text::Tabulate;
my $tabstop = 4; # valeur d'un t en caractères
my $tab = new Text::Tabulate();
$tab->configure(-tab => "t", gutter => "t", pad => "t");
# trois lignes pour tester
my @lines = (
"In your pomp andtall yourtglory you'ren",
"a poorer man than me,tas you lick the bootstofn",
"deathtborn out of fear.t(Jethro Tool)n"
);
my @out = $tab->format (@lines);
foreach (@out) {
s!(t+)!"t"x(length($1)/$tabstop+1)!eg;
}
print @out, "n";
__END__
Bon, je dis ça, mais c'est juste pour pinailler :-))
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.
Oui, mais si vous transformez les t en espaces pour ensuite réduire les espaces en t, vous perdez la notion de colonnes séparées par t. Si le texte comporte une série de 4 espaces successives par exemple, vous allez avoir une colonne de plus, car ces 4 espaces vont être transformées en t.
Personnellement, je préfèrerais utiliser t comme séparateur et comme caractère de bourrage pour ensuite les réduire.
#!/usr/bin/perl use strict; use warnings; use Text::Tabulate;
my $tabstop = 4; # valeur d'un t en caractères
my $tab = new Text::Tabulate(); $tab->configure(-tab => "t", gutter => "t", pad => "t");
# trois lignes pour tester my @lines = ( "In your pomp andtall yourtglory you'ren", "a poorer man than me,tas you lick the bootstofn", "deathtborn out of fear.t(Jethro Tool)n" );
my @out = $tab->format (@lines); foreach (@out) { s!(t+)!"t"x(length($1)/$tabstop+1)!eg; }
print @out, "n";
__END__
Bon, je dis ça, mais c'est juste pour pinailler :-))