2013-10-24 57 views
-1

我有一個output.txt的文件,該文件有以下內容:搜索和劃分數字串

Windows  6543765432 
Linux   4534653463 
MacOS   3564325 
Ubuntu   8235646255 

我想創建一個VBScript其搜索在output.txt的所有數值和1024,使它們劃分KB中的內存可以更改爲MB。 我已經嘗試批量here,但由於2 GB的限制,它不適用於上述情況。

回答

2

你的頂級任務是修改結構化文本中的小文件。這種任務的'設計模式'是:

Get a FileSystemObject 
Specify the full file path 
Read the content 
Modify the content 
Write the modified content back 

您的修改的子任務涉及非常數/變化部分的計算;那麼「RegExp.Replace與功能」的策略應使用:

Define a RegExp (global, identify the parts to change) 
.Replace(input, GetRef("function to do the computations on the parts")) 

在你的情況下,該功能應該在(串)部分轉換爲數字,然後劃分,並返回轉換爲字符串的結果。

在代碼:

Option Explicit 
    Const FSPEC = "..\testdata\txt\19556079.txt" 
    Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject") 
    Dim sAll : sAll = Modify(oFS.OpenTextFile(FSPEC).ReadAll()) 
    oFS.CreateTextFile(FSPEC).Write sAll 
    WScript.Echo oFS.OpenTextFile(FSPEC).ReadAll() 

Function Modify(s) 
    Dim re : Set re = New RegExp 
    re.Global = True 
    re.Pattern = "\d+" 
    Modify = re.Replace(s, GetRef("FiMoReFunc")) 
End Function 

Function FiMoReFunc(sM, sP, sS) 
    FiMoReFunc = CStr(CDbl(sM)/1024) 
End Function 

對於更花式輸出:

FiMoReFunc = Right(Space(20) & FormatNumber(CDbl(sM)/1024, 1, True) & " Unit", 20) 

輸出:

Windows   6,390,395.9 Unit 
Linux    4,428,372.5 Unit 
MacOS     3,480.8 Unit 
Ubuntu    8,042,623.3 Unit 
1

試試這個

Option Explicit 

Const FILE = "output.txt" 
Dim fso 
Dim ts,line 
Dim match,matches 
Dim os,mem 

Set fso = CreateObject("Scripting.FilesystemObject") 
Set ts = fso.OpenTextFile(FILE) 

With New RegExp 
    .IgnoreCase = True 
    While Not ts.AtEndOfStream 
    line = ts.ReadLine 

    .Pattern = "[a-z]+" 
    Set matches = .Execute(line) 
    For Each match In matches 
     os = match.Value 
    Next 

    .Pattern = "\d+" 
    Set matches = .Execute(line) 
    For Each match In matches 
     mem = (CDbl(match.Value)/1024) 
    Next 

    WScript.Echo os & vbTab & mem 
    Wend 
End With 

Set ts = Nothing 
Set fso = Nothing 
WScript.Quit 
+0

-0.49不限定正則表達式出線迴路和濾波OS的並記憶到匹配循環中的最後一次出現。 –

+0

它與給定的示例數據文件一起工作,並希望證明RegExp是此處的關鍵對象。問題作者顯然有足夠的技巧來解析他/她需要的東西 – Jobbo