テキストファイルの一部の数値に定数を掛けます。

テキストファイルの一部の数値に定数を掛けます。

代替ソリューションが欲しいこのjQueryハック、ホイールを再発明する味 - 基本* ixツールを使用して、いくつかのシングルライナーでこれを行うことができると確信しているようです。より簡単で簡単な方法は、pxを含むすべての数字を見つけ、\d+pxいくつかの-matchを追加して定数を掛けることです。しかし、\d失敗します。前に数字がない場合にのみ一致し、[^\d]\d+px交換を実行します。 /乗算する。

最もシンプルでエレガントなソリューションが勝ちます。一致 - 乗算 - 代替はどうですか?

私はVimを使用していますが、新しいアイデアで開いています。

ベストアンサー1

bash-4.2$ cat map.htm 
<map name="world">
  <area shape="rect" coords="0%,0%,32%,32%" >
  <area shape="rect" coords="8%,40%,50%,80%" >
  <area shape="rect" coords="56%,4%,84%,18%" >
  <area shape="rect" coords="74%,20%,90%,40%" >
  <area shape="rect" coords="70%,42%,96%,62%" >
  <area shape="rect" coords="0%,74%,70%,95%" >
</map>

bash-4.2$ perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%,(\d+)%,(\d+)%!($1*$w/100).",".($2*$h/100).",".($3*$w/100).",".($4*$h/100)!ge' map.htm 
<map name="world">
  <area shape="rect" coords="0,0,204.8,153.6" >
  <area shape="rect" coords="51.2,192,320,384" >
  <area shape="rect" coords="358.4,19.2,537.6,86.4" >
  <area shape="rect" coords="473.6,96,576,192" >
  <area shape="rect" coords="448,201.6,614.4,297.6" >
  <area shape="rect" coords="0,355.2,448,456" >
</map>

もちろん、正規表現はHTMLを解析する方法ではないため、場合によっては失敗します。結論を導くSO。しかし、専用のHTMLパーサーを使用して問題を解決することはもはや単純な問題ではありません。

しかし、座標と通常のテキストが衝突しないと確信している場合は、次のように単純化することもできます。

perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%!int($1*$w/100).",".int($2*$h/100)!ge' map.htm

おすすめ記事