2011-06-22 13 views
2

CR LFレコードの区切り文字でパイプ区切りの100MBのテキストファイルを持っていました。問題は、フィールドの1つが自由形式のテキストであり、フィールドにCRLFが含まれていることです。私はSQLにデータをロードする必要がありますが、もちろんCRLFはこれを混乱させます。私はパイプで区切られたファイルを持っていて、CR LFで書く必要があります

すべてのCRLFをFF FEの16進値に置き換えましたが、今度はパイプ区切り文字をカウントするファイルを読み込み、最後のフィールドの後ろにCRLFを挿入する必要があります。

私は7つのパイプ区切り文字を数えなければなりません。最後のフィールドは24バイトの日付フィールドで、そこでCRLFを挿入する必要があります。

これを行うには良い方法の考えですか??

答えて

-1

変数にメモリ全体がある場合は、myArray = split(var、 "|")のようにsplitを使用できます。 次に、0〜6を連結してそこにcrlfを追加し、文字列の末尾

+0

これは、CR LFレコード区切り文字とフリーフォームテキストCR LFを区別しません。それは基本的にOPが求めているものです。 –

+0

さらに、そこには24バイトのバイナリフィールドがあります。 'String'としてロードすることはできません! –

1

私はこれをテストしませんでしたが、それは正しいトラックに置くことができます。

Dim b1 As Byte 
Dim i As Long 

' Open file in Binary mode (since you have at least one binary field) 
Open "MyFile.dat" For Binary As #1 

Do 
    ' Advance to 7th | character from here 
    For i = 1 To 7 
     Do 
      Get #1, , b1 
      If b1 = 124 Then ' If Chr(b1) = "|" is perhaps more readable 
       ' It's a "|" pipe 
       Exit Do 
      End If 
     Loop 
    Next i 

    'Skip the 24-byte field 
    Seek #1, Seek(1) + 24 

    If EOF(1) Then 
     ' We're all done 
     Exit Do 
    End If 

    ' Record presumably ends here. 
    ' Replace the next two bytes with the CR LF record delimiter 
    Put #1, , CByte(10) ' CR 
    Put #1, , CByte(13) ' LF 
    ' Hopefully those were your hex FF and FE that just got overwritten. 
    ' Should really test for this before overwriting, 
    ' but what the heck. 
Loop 

Close #1 

EDITはちょうどそれをテストしました。それはかなりうまくいく。ただし、テキストとして読み込む場合はDOSエンコードを仮定します。

関連する問題