perl
2017-05-09 8 views -1 likes 
-1

Perlを使用してテキストファイルを解析したい。このテキストファイルには、次のようなHTMLファイルのログが含まれています。HTMLログファイルを解析して特定のフォーマットのテキストファイルを取得する

Details from /projects/git/Changelog.html file: 
NEW_FEATURES: <a href="http://jira.xyz.com/browse/JIRA-4208">JIRA-4208</a><span style='mso-spacerun:yes'>   </span>Add New Config C support in code 
BUG_FIX: <a href="http://jira.xyz.com/browse/BUGJIRA-31">BUGJIRA-31</a><span style='mso-spacerun:yes'>   </span>Bugfix of some old bug 
NEW_FEATURES: <a href="http://jira.xyz.com/browse/ZEERA-273">ZEERA-273</a><span style='mso-spacerun:yes'>   </span>Add support for some other feature. 

Details from /projects/git/Changelog2.html file: 
BUG_FIX: <a href="http://jira.xyz.com/browse/BUGJIRA-33">BUGJIRA-33</a><span style='mso-spacerun:yes'>   </span>Bugfix of an issue 
NEW_FEATURES: <a href="http://jira.xyz.com/browse/JIRA-4209">JIRA-4209</a><span style='mso-spacerun:yes'>   </span>Add New Config D support in code 

各行には、バグ番号とその説明が含まれています。その説明に続いて

JIRA-4208, BUGJIRA-31, ZEERA-273, BUGJIRA-33, JIRA-4209 : Add New Config C support in code, Bugfix of some old bug, Add support for some other feature, Bugfix of an issue, Add New Config D support in code 

すなわち、すべてのバグ番号:

は、解析した後、予想される出力は下の通りです。

私は別のファイルに出力を書きたい可能であればoutput.txt

EDIT-1:

私のコードは下の通りです:

#!/usr/bin/perl 
open (FILE, 'input_file1.txt') or die "Could not read from file, exit..."; 
while(<FILE>) 
{ 
    chomp; 
    ($junk0,$junk1,$junk2,$junk3,$junk4,$BUG_NUMBR) = split /[:<="">]+/,$_; 
    print "$BUG_NUMBR \n"; 
} 
close FILE; 
exit; 

、出力は次のとおりです。

JIRA-4208 
BUGJIRA-31 
ZEERA-273 
BUGJIRA-33 
JIRA-4209 

これは、次のように期待される出力とは大きく異なります。abo ve。私は予想される出力の2番目の部分に適切な正規表現を定義できません。これはバグの簡単な説明です。

+2

あなたは何を試してみましたか?あなたのコードではうまくいかないのですか?ここで質問は何ですか? –

+0

@ChrisDoyle:サンプルコードを追加し、制限事項についても説明しました。親切にソリューションの提案をお願いします。 – Yash

+0

本当にすべてのバグ番号のリストが必要ですか?すべての説明のリストが続きますか? –

答えて

0

正規表現は必要ありません。あなたのsplitパターンは面白いですが、それは仕事を完了します。

結果の残りの部分も同様に取ります。あなたの$junk変数を配列に置き換えました。 Perlでは、インデックス-1で右から最後の要素を取ることができるので、最後の>の後にあるように、テキストを出すのは自明です。

use strict; 
use warnings; 

my (@numbers, @text); 
while (my $line = <DATA>) { 
    chomp $line; 
    my @stuff = split /[:<="">]+/, $line; 
    push @numbers, $stuff[5]; 
    push @text, $stuff[-1]; 
} 

print join ', ', @numbers; 
print ' : '; 
print join ', ', @text; 

__DATA__ 
NEW_FEATURES: <a href="http://jira.xyz.com/browse/JIRA-4208">JIRA-4208</a><span style='mso-spacerun:yes'> </span>Add New Config C support in code 
BUG_FIX: <a href="http://jira.xyz.com/browse/BUGJIRA-31">BUGJIRA-31</a><span style='mso-spacerun:yes'> </span>Bugfix of some old bug 
NEW_FEATURES: <a href="http://jira.xyz.com/browse/ZEERA-273">ZEERA-273</a><span style='mso-spacerun:yes'> </span>Add support for some other feature. 
BUG_FIX: <a href="http://jira.xyz.com/browse/BUGJIRA-33">BUGJIRA-33</a><span style='mso-spacerun:yes'> </span>Bugfix of an issue 
NEW_FEATURES: <a href="http://jira.xyz.com/browse/JIRA-4209">JIRA-4209</a><span style='mso-spacerun:yes'> </span>Add New Config D support in code 

また、厳密に警告を加え、変数を字句にしました。

また、テキストに文字「>」または「<」や引用符などが含まれていると、コードが壊れます。それはあなたがそこにいる奇妙なフォーマットです、そして、HTMLパーサは実際にあなたを助けるつもりはありません。

+0

コードを共有してくれてありがとう。それはいくつかの例外を除いて私のために働く。あなたの例で使用したデータセットは、上記の問題文で示したデータセットとは異なります。私のデータセットには、いくつかの警告と余分なカンマ(、)があります。それにもかかわらず、それは私のための良い出発点です。私は問題を解決するときに私は最終的なコードを共有します。再度、感謝します!! – Yash

+0

こんにちは@simbabque、あなたは私の分割パターンが面白いと言いました。私はこれに同意します。なぜなら、バイアルの試行錯誤があるからです。あなたに 'split 'パターンのためのよりよい方法を提案することを親切にお願いします。 – Yash

+0

@Yashすべてが1つのファイルであることはわかりませんでした。ごめんなさい。 '^ Details 'が現在の行にあるかどうかをチェックするだけでよいのです。 _interesting_で私はこのアプローチが慣習的でないことを意味しました。私はおそらく、私が望む正確なものをキャプチャするためのパターンを書いていたでしょうが、あなたのアプローチも機能します。入力が変更された場合、それが壊れることを覚えておいてください。 – simbabque

0

下として、上記の問題文のコードは次のとおりです。

#!/usr/bin/perl 

use strict; 
use warnings; 

open (FILE, 'perl_input_file1.txt') or die $!; 
my (@numbers, @text); 
while (my $line = <FILE>) { 
    chomp $line; 
    $line =~ /^Details/ and next; 
    my @stuff = split /[:<="">]+/, $line; 
    push @numbers, $stuff[5]; 
    push @text, $stuff[-1]; 
} 
close FILE; 
print join ', ', @numbers; 
print ': '; 
print join ', ', @text; 
print "\n"; 

このコードの出力は次のとおりです。

JIRA-4208, BUGJIRA-31, ZEERA-273, BUGJIRA-33, JIRA-4209: Add New Config C support in code, Bugfix of some old bug, Add support for some other feature, Bugfix of an issue, Add New Config D support in code 

質問で述べたようにこれは私の希望期待される出力と同じです。

@simbabqueに感謝したいと思います。

よろしく、

関連する問題