0

特に数値を含む XML ファイルがあります。何かのようなもの:

<things>
    <a name="cat">
        <vecs>(100,20),(200,40),(50,85)</vecs>
    </a>
    <b name="dog">
        <vecs>(0,10),(5,75)</vecs>
        <ratio>85.5</ratio>
    </b>
    ... many more elements and numbers ...
</things>

残念ながら<vecs>、ファイル内の要素を含むすべての数値は、本来の 4 倍です。それらすべてに 0.25 を掛ける必要があります。数値<ratio>やその他の要素は問題ありません。たとえば、<vecs>上記の最初の行は次のようになります。

<vecs>(25,5),(50,10),(12.5,21.25)</vecs>

ファイルを処理するための便利なソリューション (UNIX コマンド ライン ツール、bash スクリプトなど)は<vecs>ありますか?</vecs>各インスタンスの既存の数値テキストを操作の結果に置き換えますか?

いいえ、この特定の問題を詳細に解決するためにプログラム全体を作成するように求めているわけではありません。そのような目的のための既存のツールがあるかどうか、または仕事を達成できる既存のツールの巧妙な組み合わせがあるかどうか疑問に思っています。

4

1 に答える 1

1

問題自体はかなり簡単ですが、構文が一般的ではないため、汎用のスクリプト言語を使用して問題に取り組む必要があります。たとえば、Python では次のように記述します。

from __future__ import print_function
import re

def transform(match):
 return '(%.2f,%.2f)' % (int(match.group(1))*0.25,
                         int(match.group(2))*0.25)

for line in file('test.xml'):
    if '<vecs>' in line:
        print(re.sub(r'\((\d+),(\d+)\)',transform,line),end='')
    else:
        print(line,end='')

特定の問題については、スクリプト言語を学び、それを使用して問題を解決することが最善の策です。

Unix ツールを使用してこの種のことを行いたい場合は、sed と awk が最適です。

于 2013-03-30T15:05:04.473 に答える