2017-07-27 3 views
0

アクセステーブルにインポートするために大きなテキストファイル(繰り返しヘッダー/トレイラー)をクリーンアップしようとしています。 私はこの前にポストをrefrencingています:速いプロセスを作るために読ん#inp_file_numのフォーラムバイナリとしてバイナリアクセスリードの場合はs_inp_fileを開くにはinp_file_numとして入力するためのオープンs_inp_file:Read Number of lines in Large Text File VB6VBAラージテキストファイルを読み込んで不要なテキスト行を削除します

私は何をしようとしていますがスイッチです。入力方法が長すぎます。問題は私のコードにあります。バイナリとして開くときにライン入力を使用することはできず、実行時エラー#62が発生します - 入力はループ内のファイルの最後まで達しました。前もって感謝します。

コード:

Sub Scrub_TextLines(s_inp_file As String, s_out_file As String) 
    Dim inp_file_num As Integer 
    Dim out_file_num As Integer 
    Dim text_line As String 
    Dim file_content As String 
    Dim buffer() As Byte 
    Dim i As Long 

    Const remove_text1 As String = "REPORTING SERVICE" 
' Const remove_text2 As String = "PRODUCT TYPE -" 
' Const remove_text3 As String = "ALL REPORT" 
    Const remove_text4 As String = "CLIENT NAME" 
    Const remove_text5 As String = "CLIENT ID" 
    Const remove_text6 As String = "TY YEAR" 
    Const remove_text7 As String = "CLIENT-ID2" 
    Const remove_text8 As String = "----" 

    inp_file_num = FreeFile 
    Open s_inp_file For Binary Access Read As #inp_file_num 
    ReDim buffer(LOF(inp_file_num) - 1) 
    Get #inp_file_num, , buffer 
     Do Until EOF(inp_file_num) 
      Line Input #inp_file_num, text_line 
      If text_line <> "" And _ 
       Left(text_line, 4) <> " " And _ 
        InStr(1, text_line, remove_text1, vbTextCompare) = 0 And _ 
        InStr(1, text_line, remove_text4, vbTextCompare) = 0 And _ 
        InStr(1, text_line, remove_text5, vbTextCompare) = 0 And _ 
        InStr(1, text_line, remove_text6, vbTextCompare) = 0 And _ 
        InStr(1, text_line, remove_text7, vbTextCompare) = 0 And _ 
        InStr(1, text_line, remove_text8, vbTextCompare) = 0 Then 

       file_content = file_content & text_line & vbCrLf 
'    Debug.Print file_content 
      End If 
     Loop 
    Close #inp_file_num 

    out_file_num = FreeFile 
    Open s_out_file For Output As out_file_num 
     Print #out_file_num, file_content 
    Close #out_file_num 
End Sub 
+0

おそらく32 thousandishのINTEGER限界を超えますか?変数をLONGに変更しますか? – PGCodeRider

+0

私はあなたのループがどのように構造化されているのかと思う。あなたのdo-untilループは 'EOF'をチェックする前に本文を評価して、まだ読み込む行があることを確認します。 'Do ... Until'ループを' Do While ... Loop'ループに変更してみてください。私は 'Do not Not EOF(inp_file_num)'が動作するはずだと信じています。 –

+0

クイックレスポンスありがとうございました - 私はループを変更しようとしましたが、 'Line Input #inp_file_num、text_line'という行で同じエラーが発生しました。 また、整数はファイル割り当て(FreeFile)を参照しているため、あまり増加しません。 – Andi

答えて

0

は変更してみてください:

Do Until EOF(inp_file_num) 

へ:

Do While Not EOF(inp_file_num) 
+0

残念ながら、私が読んだのは、バイナリメソッドが使用されているときに、文字列に厳密に使用されていますか?私はこの作業をするためにそれを変更する最良の方法を確信していません。 – Andi

関連する問題