Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

splitter un tableau sous unix sur le saut à la ligne

3 réponses
Avatar
Patrice
Bonjour,

j'ai un texte contenant une page web, le tout dans une seule variable
$response->content , sous forme de lignes de texte séparées par des retours
à la ligne (en fait $response est issu de $response=
$ua->get("http://site-web.com/page"); )

Je veux transformer $response->content en tableau , où le saut à la ligne
joue le rôle de séparateur de split. Comment on fait?

J'ai tout essayé, split (/\n/,...) split(/\r/,...) rien n'y fait. Sous
Windows, ça marche impeccable: j'ai mon tableau en faisant split
(/\n/,$response->content) . Sous unix ou linux, des nèfles.

S'il y a du monde pour aider, je lui serait infiniment reconnaissant.

Bonne soirée,

PC

3 réponses

Avatar
Paul Gaborit
À (at) Wed, 18 Feb 2009 00:25:32 +0100,
"Patrice" écrivait (wrote):
j'ai un texte contenant une page web, le tout dans une seule variable
$response->content , sous forme de lignes de texte séparées par des retours
à la ligne (en fait $response est issu de $response > $ua->get("http://site-web.com/page"); )



Ok...

Je veux transformer $response->content en tableau , où le saut à la ligne
joue le rôle de séparateur de split. Comment on fait?

J'ai tout essayé, split (/n/,...) split(/r/,...) rien n'y fait. Sous
Windows, ça marche impeccable: j'ai mon tableau en faisant split
(/n/,$response->content) . Sous unix ou linux, des nèfles.



Quelques informations générales :

- les séparateurs de lignes présents dans la page web dépendent de
l'outil de création utilisé pour cette page (que ce soit 'à la main'
ou par soft) et de la plateforme utilisée. A priori, trois
possibilités soit c'est 12 (le LF ASCII, standard Unix), soit
c'est 15 (le CR ASCII, standard Mac), soit c'est 1512 (CR+LF
ASCII, standard Windows).

- En perl, n représente le passage à la ligne... mais celui de la
plateforme où tourne le script (c'est expliqué dans 'perlop'). Pour
r, je ne sais plus trop (j'ai le flemme de tester). Ça peut sembler
idiot mais c'est en fait très pratique pour gérer du texte et des
affichages sans se préoccuper de la plateforme courante.

Donc pour être sûr du caractère (ou des caractères) utilisée par
split, il vaut mieux utiliser la notation explicite 12 et/ou
15. De plus, comme me séparateur de ligne varie selon la page web
analysée, le plus simple est de découper sur toutes les possibilités à
la fois. Un truc comme ça devrait marcher :

my @lignes = split /15(?:12)?|12/, $response->content;

Ceci étant au moins l'un de vos tests auraient du marcher sur Unix. À
moins que ce soit les 15 restant qui aient perturbé votre affichage
de contrôle en vous faisant croire que vous n'aviez toujours qu'une
seule ligne alors qu'en fait elles étaient toutes superposées...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Patrice
Paul Gaborit wrote:
À (at) Wed, 18 Feb 2009 00:25:32 +0100,


....



Je vous remercie infiniment pour toutes ces précisions. En fait, j'ai résolu
mon problème, et il n'était pas dû à ce que je pensais au départ (c'est à
dire à un mauvais split de tableau). J'en étais pourtant tellement sûr que
je ne me suis pas donné la peine de le vérifier avant de poster ici, ce qui
a été mon erreur.

Pour répondre à votre question, a priori, le code de /n/ semblerait être
x012 (soit chr(10)) et le code de /r/ semble être x015 (soit chr(13)). Et
ce, que l'on soit sous DOS ou sous UNIX/Linux.

Passez une bonne soirée,

PC
Avatar
Paul Gaborit
À (at) Wed, 18 Feb 2009 22:16:23 +0100,
"Patrice" écrivait (wrote):
Paul Gaborit wrote:
À (at) Wed, 18 Feb 2009 00:25:32 +0100,


....



Je vous remercie infiniment pour toutes ces précisions. En fait, j'ai résolu
mon problème, et il n'était pas dû à ce que je pensais au départ (c'est à
dire à un mauvais split de tableau). J'en étais pourtant tellement sûr que
je ne me suis pas donné la peine de le vérifier avant de poster ici, ce qui
a été mon erreur.



Tant mieux.

Pour répondre à votre question, a priori, le code de /n/ semblerait être
x012 (soit chr(10)) et le code de /r/ semble être x015 (soit chr(13)). Et
ce, que l'on soit sous DOS ou sous UNIX/Linux.



Heu... Je n'avais vraiment pas de question concernant les valeurs
attachées à n selon les plateformes. J'avais juste laissé un doute
sur les valeurs possibles attachées à r. Mais quand je vous
conseillais d'utiliser 12 et 15 plutôt que n et r pour votre
problème, ce n'est pas quelque chose que j'ai inventé sur le moment
(c'est un comportement connu de perl et documenté). D'ailleurs dans
votre phrase, vous précisez bien 'semblerait' et vous avez raison de
ne pas en être sûr. Je vous incite fortement à lire 'perlop' pour
comprendre l'interprétation de n faite par perl...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>