テキストファイルを解析し、新しい形式で出力します。

テキストファイルを解析し、新しい形式で出力します。

シェルスクリプトを使用してファイルパーサーを学習しようとしていますが、入力ファイル input.txtは次のようになります。

 int A[4];   /* 0  16*/
 char B[15];  /* 16 31*/
 /* Padding may be required here */
 long int C[2]; /*32  8*/

input.txt上記の内容を私が好きな形式に解析して、output.txt次のようにファイルを出力する方法はありますか?

0,int, A[4], 0, 16
1,char, B[16], 16,31
2,long int, C[2], 32, 8 

ベストアンサー1

あなたの入力はCに似ているように見えるので、理論的にはCパーサーで解析することをお勧めします。正規表現を使用すると、簡単な操作でもさまざまなスペース、複数行の入力などを処理する必要があります。問題は、Cパーサーが明らかに目的のコメントを解析しないことです。

以下は、サンプルの期待される出力を提供するPerlスクリプトです。

#!/usr/bin/perl -n
#
BEGIN { $i = 0; }

if (m!^\s*(.+)\s+([^ ]+);\s*/\*\s*(\d+)\s*(\d+)\s*\*/\s*$!)
{
    print "$i,$1,$2,$3,$4\n";
    $i+=1
}

script.plこのスクリプトを同じフォルダに保存する場合は、input.txt次のように使用します。

./script.pl < input.txt > output.txt

おすすめ記事