Perl: как мне прочитать все строки из файла и напечатать как одну строку текста - PullRequest
1 голос
/ 01 июля 2010

Я пытаюсь вернуть вывод файла с заменой строк на \ n без использования CPAN

Вот что у меня есть

#! /usr/local/bin/perl 

if ( $#ARGV = "1" )     {
    print "$ARGV[0]\n";

    my $file = "$ARGV[0]";
    my $document = do {
        local $/;
        open my $fh, "<", $file
          or die "could not open $file: $!";
        <$fh>;
    };
    print "Doc: $document\n";
}

Ответы [ 4 ]

3 голосов
/ 01 июля 2010
while(<>) {chomp;print;print '\n';}
1 голос
/ 01 июля 2010

Вы можете использовать режим slurp (больше не требуется цикл while) и некоторые регулярные выражения:

print map { $_ =~ s/\n/\\n/; $_ } (<>); 

или некоторые специальные переменные:

my @a = <>;
$\ = $, = '\n';
chomp @a;
print @a;

($ \ is theразделитель выходной записи, а $ - разделитель выходного поля. Оба применяются к оператору печати)

0 голосов
/ 01 июля 2010

Это длинное решение для ясности. В двух словах, chomp удалит все завершающие пробелы и управляющие символы.

#!/usr/bin/perl

use strict;
use warnings;

my $filename = shift;
my @contents;
my $lines = 0;

if (! -e $filename) {
    print "Please provide a valid filename\n";
    exit;
}

print "Examining $filename\n";

open(FILE, "<$filename");

while (<FILE>) {
    chomp();
    push(@contents, $_);
    print ".";  
    $lines++;
    if ($lines % 10 == 0) {
        print "\n";
    }
}
close(FILE);

print "done\n";

foreach (@contents) {
    print "$_";
}

print "\n";
0 голосов
/ 01 июля 2010

Я попробовал это ...

#! /usr/bin/perl 

if ( $#ARGV = "1" )     {
open FILE, "<", "$ARGV[0]" or die $!;
chomp $_;
@chars = map ({ $_ =~ s/\n/\\n/; $_ } (<FILE>)); 
print @chars;
print "@chars\n";
}

.. и это дает мне правильный вывод (за исключением некоторых пробелов, которые мне нужно научиться вырезать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...