動的ファイルから値を取得し、HTMLの変数に渡す[閉じる]

動的ファイルから値を取得し、HTMLの変数に渡す[閉じる]

次の形式のファイルがあり、その値をHTMLに渡したいと思います。

BE64533-A0E1-4F98-A91F-02C1D0 column=ABC_Received:ABC_Structure_Type, timestamp=1439978656596, **value=ASCII**
BE64533-A0E1-4F8-A9F-03CE2C1D0 column=ABC_Received:Current_To, timestamp=1439978656596, **value=RPI** 

このファイルから値(ASCIIとRPI)を取得してSTATIC HTMLタグに渡すにはどうすればよいですか?以下に値(ASCIIとRPI)を含めたいHTMLマークアップがあります。

<!--Row 1 Header -->
<tr>
<td class="HeaderCell">ABC_Structure_Type</td>
<td class="HeaderCell">Current_To</td>


<!--Row 1 Values -->
<tr>
<td  class="ValueCell">[ABC_Structure_Type]</td>
<td  class="ValueCell">[_Current_To]</td>

必要な出力は以下の通りです。

<!--Row 1 Values -->
<tr>
<td  class="ValueCell">ASCII</td>
<td  class="ValueCell">RPI</td>

ファイル内で、それぞれASCII値とRPI値を持つファイルの1行目の[ABC_Structure_Type]と[Current_To]の値で置き換える必要があります。

答え1

まあ、実際に何をしたいのかはわかりませんが、ファイルから値を解析する必要があることは明らかです。これを行うには、値を次のように別の配列に入れるだけです(値を含む実際のファイルにYourFileを設定する必要があります)。

H=()
V=()
while read -r Line; do 
  H+=("$( printf "%s" "$Line" | grep -o 'column=[^,]*' | sed 's/^column=ABC_Received://')" )
  V+=("$( printf "%s" "$Line" | grep -o ' \*\*value=.*\*\*$' | sed 's/.*=\(.*\)\*\*$/\1/' )")
done < "$YourFile"

配列が正しく入力されていることを確認するには、次の手順を実行します。

printf "%s\n" "${H[@]}"
printf "%s\n" "${V[@]}"

静的HTMLページのスタブを作成したい場合は、上記のprintfsを編集したり、値で別の操作をしたい場合は、単純なループを使用して簡単に実行できます。

for v in "${H[@]}"; do 
  printf '<td class="HeaderCell">%s</td>\n' "$v"
done

for v in "${V[@]}"; do 
  printf '<td class="ValueCell">%s</td>\n' "$v"
done

例の値の出力は次のとおりです。

<td class=HeaderCell>ABC_Structure_Type</td>
<td class=HeaderCell>Current_To</td>
<td class=ValueCell>ASCII</td>
<td class=ValueCell>RPI</td>

もちろん、この値で何をしたいのか(printfsだけでなく)できます。

免責事項:GNU / bashスクリプト...

答え2

さて、a)idフィールドの最初の2つの部分が2つの行を結合するコアであり、b)コマンドラインでperlを使用することができると仮定すると、次のスクリプトは値フィールドを解析して変換します。指定された入力ファイルのhtml出力:

#!/usr/bin/perl
my $fn=shift;
my ($ABC_found,$ASCII,$RPI,$ID)=(0,"","","");
open(FIN,"<",$fn) || die ("cannot open infile $fn");
sub print_html {
    $asc = shift;
    $rpi = shift;
print("
<html><body>
<!--Row 1 Header -->
<tr>
<td class='HeaderCell'>ABC_Structure_Type</td>
<td class='HeaderCell'>Current_To</td>
<!--Row 1 Values -->
<tr>
<td  class='ValueCell'>$asc</td>
<td  class='ValueCell'>$rpi</td>
</body></html>");
}

while (<FIN>) {
    if ($ABC_found==0 && m/^([\w\d]*)[\-]([\w\d]*).*ABC_Structure.*,        [\s]timestamp=.*,[\s]value=(.*)$/) {
        # print("ASCII : [$1]-[$2] : [$3]\n");
        $ABC_found=1;
        $ID="$1-$2";
        $ASCII=$3
    } elsif ($ABC_found==1 && m/^$ID.*Current_To.*[\s]timestamp=.*,[\s]value=(.*)$/) {
        $ABC_found=0;
        # print("RPI : [$1]\n");
        $RPI=$1;
        print_html($ASCII,$RPI);
    } else {    
        $ABC_found=0;
    }
}
close(FIN);

使用法:

$> perl script.pl inputfile.txt

楽しくお過ごしください!

関連情報