2011-12-14 2 views
2

VBScriptを使用して区切られたテキストファイルを再フォーマット/正しくフォーマットする手助けがありますか?VBScriptで区切られたテキストファイルを正しく/再フォーマットするには?

私は^次のように区切られたテキストファイルがあります。

AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^ARREARS 
00010004000051162^MISS JENNIFER GRAY      ^123 FAKE STREET   ^       ^TOWN      ^COUNTY ^POSTCODE ^004978.00^ 000188.72 

のデータはすべて削除する必要があり、スペースを先頭と末尾が含まれています。私はこれを行うためにVBScriptしか利用できません。

ADO GetStringsを使用しようとしましたが、先頭と末尾のスペースのために矛盾した結果が生じました。

提案や代替案はありますか?

おかげ

ADOのテキストファイルを操作する場合は、あなたがapproriate schema.iniというファイル内のテーブル定義 で始めるべき
+0

@ Ekkehard.Horner - ファンタスティックな答えは、明確で簡潔です。どうもありがとうございました。 – Danny

答えて

3

Dim sTDir : sTDir = goFS.GetAbsolutePathName("..\data") 
    Dim sTbl1 : sTbl1 = "agree.txt" 
    Dim sFSpec : sFSpec = goFS.BuildPath(sTDir, sTbl1) 
    Dim sTbl2 : sTbl2 = "agree2.txt" 
    WScript.Echo "src file with spaces:" 
    WScript.Echo goFS.OpenTextFile(sFSpec).ReadAll() 
    Dim oTDb : Set oTDb = CreateObject("ADODB.Connection") 
    Dim sCS : sCS  = Join(Array(_ 
    "Provider=Microsoft.Jet.OLEDB.4.0" _ 
    , "Data Source=" & sTDir _ 
    , "Extended Properties=" & Join(Array(_ 
     "text" _ 
    ), ";") _ 
), ";") 
    oTDB.Open sCS 
    WScript.Echo "trimmed automagically:" 
    WScript.Echo oTDb.Execute(Replace("SELECT * FROM [@T]", "@T", sTbl1)) _ 
    .GetString(adClipString, , "|", vbCrLf, "") 

[agree.txt] 
Format=Delimited(^) 
ColNameHeader=True 
DecimalSymbol=. 
CharacterSet=ANSI 
TextDelimiter=None 
Col1=AGREE CHAR 
Col2=NAME CHAR 
Col3=ADD1 CHAR 
Col4=ADD2 CHAR 
Col5=ADD3 CHAR 
Col6=ADD4 CHAR 
Col7=PCODE CHAR 
Col8=BAL  FLOAT 
Col9=ARREARS FLOAT 

は、その後、あなたのデータにアクセスすることができます

出力:

src file with spaces: 
AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^ARREARS 
00010004000051162^MISS JENNIFER GRAY      ^123 FAKE STREET ^       ^TOWN      ^COUNTY ^POSTCODE ^004978.00^ 000188.72 

trimmed automagically: 
00010004000051162|MISS JENNIFER GRAY|123 FAKE STREET||TOWN|COUNTY|POSTCODE|4978|188,72 

右ツール を使用すると、見かけのスペースに問題はありません。

だけ

sFSpec = goFS.BuildPath(sTDir, sTbl2) 
    If goFS.FileExists(sFSpec) Then goFS.DeleteFile sFSpec 
    Dim sSQL : sSQL = Replace(Replace(_ 
     "SELECT * INTO [@T2] FROM [@T1]" _ 
    , "@T1", sTbl1), "@T2", sTbl2) 
    WScript.Echo "Copy statement" 
    WScript.Echo sSQL 
    oTDb.Execute sSQL 
    WScript.Echo "QED: no spurious whilespace" 
    WScript.Echo goFS.OpenTextFile(sFSpec).ReadAll() 

出力追加し、クリーンコピーを取得するには、次の

Copy statement 
SELECT * INTO [agree2.txt] FROM [agree.txt] 
QED: no spurious whilespace 
"AGREE";"NAME";"ADD1";"ADD2";"ADD3";"ADD4";"PCODE";"BAL";"ARREARS" 
"00010004000051162";"MISS JENNIFER GRAY";"123 FAKE STREET";;"TOWN";"COUNTY";"POSTCODE";4978,00;188,72 

ドライバは、schema.iniというの

[agree2.txt] 
ColNameHeader=True 
CharacterSet=1252 
Format=Delimited(;) 
Col1=AGREE Char Width 255 
Col2=NAME Char Width 255 
Col3=ADD1 Char Width 255 
Col4=ADD2 Char Width 255 
Col5=ADD3 Char Width 255 
Col6=ADD4 Char Width 255 
Col7=PCODE Char Width 255 
Col8=BAL Float 
Col9=ARREARS Float 

を(ドイツ語ロケールのデフォルト)を追加します。あなたの元のフォーマットを再作成する

[agree2.txt] 
Format=Delimited(^) 
ColNameHeader=True 
DecimalSymbol=. 
CharacterSet=ANSI 
TextDelimiter=None 
Col1=AGREE CHAR 
... 

にこれを編集します。

QED: no spurious whilespace 
AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^ARREARS 
00010004000051162^MISS JENNIFER GRAY^123 FAKE STREET^^TOWN^COUNTY^POSTCODE^4978.00^188.72 

をあなたはstraighforward方法で、より複雑なタスクを解決することができ、より複雑なSQL文を使用して、および/または、テーブル定義を強化することで。

P.S.

Dim sSQL : sSQL = Replace(Replace(_ 
     "SELECT * INTO [@T2] FROM [@T1]" _ 
    , "@T1", sTbl1), "@T2", sTbl2) 

は、あなたが(;入れ子に交換してください()の呼び出しは、ADOが、その後修正文を見て前に適用さT1 @およびT2 @ない ADOコマンドのパラメーターです)思ってしまう場合

は、hereを見て。

+0

本当に素敵です。 – Fionnuala

+0

まさに私が欲しかった! – Danny

関連する問題