2011-08-10 53 views
-1
use warnings; 

$reff_filepath="/home/sharma/Documents/ref.txt"; 
open (CONFIG,"<","$reff_filepath")or die "Unable to open $reff_filepath: $!"; 

while(<CONFIG>) { 
    chomp; 
    @cols = (split(/ /))[2]; 
    push(@array, @cols); 
    print "@array\n"; 
} 

close CONFIG; 

私が得た出力は次のとおりです。投票法案に投票法案
に投票

印刷各文の3番目のワード

は主張
を圧倒投票法案で
を圧倒します住民投票で圧倒的なビルビルド
住民投票で圧倒的なビル議員ビルマ

が、私の予想出力は

ある 圧倒的な
ビル

投票

を主張ビル
governmen

説明:Perlを使って各文の3番目の単語を表示しようとしています。上に私のPerlスクリプトを書いた。私は上記で期待した結果を得ました。しかし、私はこの出力をpush(@array, @cols)のような配列にプッシュしました。そして、私は上記の最初の出力を得ました。私が期待する出力を表示するには、誰でも提案をしたり、Perlスクリプトを書き直してください。

答えて

-1

"。"に入力セパレータを定義することはどうですか?

$/ = .; 

while(<>) { 
    $i = 0; 
    @words = split(/\s+/); 
    while ($i <= $#words) { 
    push (@array, @words[$i]); 
    $i+=3; 
    } 
} 
print "@array\n"; 

など(このスクリプトを実行しようとはしませんでした)。各文章の3番目の単語をすべて取得せず、ドキュメント全体の3番目の単語を1つずつ取得しようとします。

0

ループの繰り返しごとに配列を印刷しています。

あなたはループの外で「印刷」を移動するために、また、配列の各要素に「\ n」を追加する必要があります。

push(@array, @cols); 

} 
print "$_\n" foreach @arr; 
+0

おかげで..... – user678992

1

あなたはごと第三の単語を印刷したい場合は、ちょうど使用する

@cols = grep {not ++$i % 3} (split /\s+/) 
0

一行ソリューションは、各ライン(文章ではない)からからすべての第三の単語を印刷する - それは以下の3つの言葉があり、空の行を表示しません:

perl -e '@a = map { (split /\s+/)[2] } <>; $" = "\n"; print "@a\n";'

このソリューション意志を以下の3つの言葉があり、印刷空行:私は出力を得た

perl -e 'print map { (split /\s+/)[2] . "\n" } <>;'

関連する問題