форматирование текста с помощью Perl - PullRequest
1 голос
/ 31 января 2012

У меня есть текст в этом шаблоне:

In 1935 he was asked to document the principal dancers and productions and 
George newly .

he continued to shoot fashion 
Bergdorf Goodman and Saks Fifth 
started a series of photographs .

, и я хочу преобразовать каждый абзац в одну строку, разделенную "\ n", т.е. на выходе будет:

In 1935 he was asked to document the principal dancers and productions George newly .

he continued to shoot fashion Bergdorf Goodman and Saks Fifth started a series of photographs .

Как я могу отформатировать такую ​​вещь с помощью Perl, может кто-нибудь привести пример?

Я пытался использовать Text :: Wrap, как показано ниже, но получал нежелательные результаты

$Text::Wrap::separator=' ';
my $text=fill("","",$text);

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Вы можете сделать это с помощью Text :: Wrap, но а) вам нужно читать файл абзацем за раз и б) вам нужно установить искусственно высокое правое поле.

#!/usr/bin/perl

use strict;
use warnings;

use Text::Wrap;

$Text::Wrap::columns = 10_000;
local $/ = ''; # Always localise changes to $/

while (<DATA>) {
  print fill('', '', $_), "\n\n";
}

__DATA__
In 1935 he was asked to document the principal dancers and productions and 
George newly .

he continued to shoot fashion 
Bergdorf Goodman and Saks Fifth 
started a series of photographs .
2 голосов
/ 31 января 2012

Для однострочника вы можете попробовать что-то вроде этого:

perl -00 -l -pwe 's/\n//g' foo/george.txt 

-00 установит разделитель входной записи $/ в "" и активирует режим абзаца.-l установит разделитель выходной записи $\ в "\n\n" (в данном случае).

В версии сценария:

$/ = ""; 
$\ = "\n\n";
while (<>) {
    chomp;
    s/\n//g;
    print;
}
0 голосов
/ 31 января 2012
#!/usr/bin/perl
use strict;
use warnings;

$/=""; #lines are paragraphs - perlfaq5
#files are command line args, or STDIN
while(<>){s/\n//g; print $_,"\n\n";}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...