-2
keyword harry /
sally/
tally/

文字列がキーワードと一致するたびに、「/」文字も検索する必要があります。これは、行の継続を意味します

次に、次のように出力したい

keyword harry sally tally 
==========================

私の現在のコード:

#!/usr/bin/perl
open (file2, "trial.txt");

$keyword_1 = keyword;
foreach $line1 (<file2>) {
  s/^\s+|\s+$//g;
  if ($line1 =~ $keyword_1)    {
    $line2 =~ (s/$\//g, $line1) ;
    print " $line2 " ;
  }
}
4

4 に答える 4

1

質問の=====行が出力にあるはずの場合は、使用します

#! /usr/bin/env perl

use strict;
use warnings;

*ARGV = *DATA;  # for demo only; delete

sub print_line {
  my($line) = @_;
  $line =~ s/\n$//;  # / fix Stack Overflow highlighting
  print $line, "\n",
        "=" x (length($line) + 1), "\n";
}

my $line = "";
while (<>) {
  $line .= $line =~ /^$|[ \t]$/ ? $_ : " $_";

  if ($line !~ s!/\n$!!) {  # / ditto
    print_line $line;
    $line = "";
  }
}

print_line $line if length $line;

__DATA__
keyword jim-bob
keyword harry /
sally/
tally/

出力:

キーワード ジムボブ
================
キーワード ハリー サリー タリー
==========================
于 2012-05-22T12:59:03.137 に答える
0

キーワードに関係なく、スラッシュで終わるすべての行を単純に連結する必要があると思います。

このコードを提案します。

継続行はバックスラッシュで終了するという OP のコメントを説明するために更新されました。

while (<>) {
  s|\\\s*\z||;
  print;
}
于 2012-05-22T05:18:16.607 に答える
0

キーワードを含まない行の処理方法を指定していません。ただし、このコードをインスピレーションとして使用することもできます。

#!/usr/bin/perl
use warnings;
use strict;

my $on_keyword_line;
while (<>) {
    if (/keyword/ or $on_keyword_line) {
        chomp;

        if (m{/$}) {
            chop;
            $on_keyword_line = 1;

        } else {
            $on_keyword_line = 0;

        }
        print;

    } else {
        $on_keyword_line = 0;
        print "\n";
    }
}
于 2012-05-21T23:48:22.027 に答える
0

Aredoは、継続行の連結を処理する場合に役立ちます。

my $line;
while ( defined( $line = <DATA> )) {
    chomp $line;
    if ( $line =~ s{/\s*$}{ } ) {
        $line .= <DATA>;
        redo unless eof(DATA);
    }
    $line =~ s{/}{};
    print "$line\n";
}
__DATA__
keyword harry /
sally/
tally/
and
done!!!

$ ./test.pl
keyword harry  sally tally and
done!!!
于 2012-05-22T12:31:44.217 に答える