2011-07-07 67 views
-1

我正在使用一個生成幾千個ASCII文件(約束)的工具,其中的內容包含浮點數。我想通過一個類似的工具來運行這些約束來進行比較,該工具無法處理浮點值超過20位小數。手動測試表明簡單的截斷就足夠了。那麼,如何將文件中的所有浮點值(由句點唯一標記)截斷爲不超過20個小數位?截斷文件中的浮點數

感謝,

喬恩

+0

如果您正在生成這些約束文件,只輸出不超過最大小數。 – Mat

+0

他們需要很長時間才能生成,所以截斷是一個潛在的更便宜的解決方案。 – Jono

+0

你在用什麼語言工作? –

回答

1

我肯定知道Java和C(和其它語言幾乎可以肯定)有辦法格式字符串。 String.format()和printf()是一些很好的例子。這些可以通過做類似的情況下使用:

printf("%.20f", myFloat); 

我會在第二個找到更好的說明網站。

編輯:

這也許應該是一個足夠好的鏈接以獲得一個想法:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

編輯:

,如果你想用SED,快速搜索品牌看起來好像sed也有printf功能。我發現的例子是在這裏:

http://docstore.mik.ua/orelly/unix/sedawk/ch07_09.htm

+0

嗯,我會嘗試一下。謝謝! – Jono

+0

祝你好運:0) – Matt

1

這很難說沒有你的平臺和語言/工具,你舒服的更多信息。

如果您的文件採用逗號或製表符分隔或固定寬度格式,我會嘗試一個電子表格應用程序(如Windows上的Excel或其他平臺上的Open Office)。

  1. 文件導入到電子表格應用程序
  2. 更改格式的相關列
  3. 導出文件到相同格式

如果是更復雜的,你可以嘗試Perl或Python。

用於工具相關的正則表達式,像sed(或Perl)將是:

s/^([0-9]*\.)([0-9]{20})([0-9]*)$/\1\2/g 

這個正則表達式基本上與單個數字的任意的字符串匹配「」在裏面。它將它分爲三部分:包括'。'之前的部分,接下來的20個數字和其餘的數字。然後輸出前兩個部分。使用regular expression reference時,您應該可以修改它以符合您的實際模式,而不會有太多麻煩。

+1

+1更多信息絕對意味着更好的答案 – Matt

+0

我正在使用Ubuntu。該文件是\ n分隔的,但不僅包含浮點數(主要是表示表達式的整數和標記)。如果可能的話,我最適合編碼sed解決方案。 – Jono

+0

如果您有權訪問生成應用程序的源代碼,並且使用該語言甚至可以使用一點點舒適,這可能是更好的解決方案。你有源嗎?如果是這樣,它是什麼語言? –

0

至少有兩種方法可以解決這個問題:

  1. 只解析您的文件集寫的另一種工具。
  2. 在您正在創建的工具中實現某種設置。此設置將控制所有計算項目值或僅在數據存儲結構中輸出的函數的輸出。

我認爲第二種方法是最好的,因爲它不依賴於格式化文件。