2013-03-30 42 views
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>之間),對它們執行數學運算,並用操作結果替換每個實例中的現有數字文本?

不,我並不是要求你編寫一個完整的程序來詳細解決這個特定問題。我想知道是否有用於此目的的現有工具,或者可以完成這項工作的現有工具的巧妙組合。

+1

看起來像一個快速的Python腳本應該做的工作。任何事情都可以讓您輕鬆地從文件中讀取XML,更改XML中的特定元素並將修改寫回。 –

+0

@MattBall是的,我一直在想這可能是最終促使我學習Python的東西。或Perl或Ruby。 – OldPeculier

回答

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是你的朋友。

+0

感謝您的解決方案以及建議。我已經在C工作了很多年,並且認爲它是一個基於C的解決方案,但這確實看起來像是一個腳本。 – OldPeculier

相關問題