3

~複数の区切り文字 (例: , *, )を含む大きなテキスト ファイル (1 行) があります:~区切り文字は新しいセクションを示し、区切り文字*:区切り文字はサブセクションまたはセグメントを示します。

次のことを試しましたが、おそらくSplit関数が配列ではなく文字列で使用されることを意図しているため、型の不一致エラーが発生します。

Dim  strFileLine, arrSection, arrSegment, arrSegField
strFileLine = "C:\sometextfile.txt"
arrSection  = Split(strFileLine, "~")
arrSegment  = Split(arrSection, "*")
arrSegField = Split(arrSegment, ":")

このロジックを使用して、セグメントとセグメント フィールドを正しいセクションに保持し、それらの値をデータベースに挿入しようとしています。

VBScript でこれを達成する方法について何か考えはありますか?

4

3 に答える 3

5

解決策は、フィールドをデータベースにインポートする方法によって異なります。入力ファイルに表示される順序ですべてのフィールドを処理するだけの場合は、区切り文字を改行に置き換えてから、改行で文字列を分割できます。

Set fso = CreateObject("Scripting.FileSystemObject")

Set text = fso.OpenTextFile("C:\sometextfile.txt").ReadAll

text = Replace(text, "~", vbNewLine)
text = Replace(text, "*", vbNewLine)
text = Replace(text, ":", vbNewLine)

arr = Split(text, vbNewLine)

For Each field In arr
  WScript.Echo field
Next

入力ファイルの構造をさらに強調する必要がある場合は、ネストされたループで入力文字列を処理できます。

Set fso = CreateObject("Scripting.FileSystemObject")

Set text = fso.OpenTextFile("C:\sometextfile.txt").ReadAll

For Each segment In Split(text, "~")
  For Each section In Split(segment, "*")
    For Each field In Split(section, ":")
      WScript.Echo field
    Next
  Next
Next

Ekkehard.Horner が既に指摘したように、さらに支援が必要な場合は、階層構造をデータベースにインポートする方法に関する詳細情報を提供する必要があります。

于 2013-01-01T13:43:09.010 に答える
0
        Dim strFileLine
    Dim arrSection()
    Dim arrSegment()
    Dim arrSegField()
    Dim strBuf 
    Dim counta 
    Dim character 
    dim sectioncount 
    dim segmentcount 
    dim segfieldcount 

    strFileLine = "aaaaa~00000?AAAAA:bbbbb~11111?BBBBB:ccccc~22222?CCCCC:ddddd~33333?DDDDD:eeeee~44444?EEEEE:fffff~55555?EEEEE:"
    strBuf = ""
    For counta = 1 To Len(Trim(strFileLine))
        character = Mid(strFileLine, counta, 1)
        Select Case character
            Case "~"
                sectioncount = sectioncount + 1
                redim preserve arrSection(sectioncount - 1)
                arrSection(sectioncount-1)=strBuf
                strBuf = ""
            Case "?"
                segmentcount = segmentcount + 1
                redim preserve arrSegment(segmentcount - 1)
                arrSegment(segmentcount-1)=strBuf
                strBuf = ""
            Case ":"
                segfieldcount = segfieldcount + 1
                redim preserve arrSegField(segfieldcount - 1)
                arrSegField(segfieldcount-1)=strBuf
                strBuf = ""
            Case Else
                strBuf = strBuf & character
        End Select
    Next
    For counta = 0 To ubound(arrSection)-1
        document.Write("SECTION:=" & arrSection(counta) & "<br/>")
    Next
    For counta = 0 To ubound(arrSegment)-1
        document.Write("SEGMENT:=" & arrSegment(counta) & "<br/>")
    Next
    For counta = 0 To ubound(arrSegField)-1
        document.Write("SEGFIELD:=" & arrSegField(counta) & "<br/>")
    Next
于 2012-12-31T17:21:09.817 に答える