0

タブ区切りファイルをテーブルにインポートしようとしています。

問題は、時々、ファイルに 2 つの「null 値」を持つ厄介なレコードが含まれ、プログラムが「予期しないファイルの終わり」をスローすることです。

たとえば、各レコードには 20 個のフィールドがあります。しかし、最後のレコードには 2 つのフィールド (2 つの null 値) しかないため、予期しない EOF が発生します。

現在、私はを使用していStreamReaderます。

行数を数えて、「ファントム ヌル」の前に読み取りを停止するように bcp に指示しようとしましたが、「ファントム ヌル」がStreamReader原因で行数が正しくありません。

すべての偽のコード (ネットから借用したコード) を取り除くために、次のコードを試しました。ただし、フィールドを空のスペースに置き換えるだけです(行が残っていない結果が欲しいです)。

Public Sub RemoveBlankRowsFromCVSFile2(ByVal filepath As String)
    If filepath = DBNull.Value.ToString() Or filepath.Length = 0 Then Throw New ArgumentNullException("filepath")

    If (File.Exists(filepath) = False) Then Throw New FileNotFoundException("Could not find CSV file.", filepath)


    Dim tempFile As String = Path.GetTempFileName()

    Using reader As New StreamReader(filepath)
        Using writer As New StreamWriter(tempFile)
            Dim line As String = Nothing
            line = reader.ReadLine()
            While Not line Is Nothing

                If Not line.Equals(" ") Then writer.WriteLine(line)

                line = reader.ReadLine()
            End While
        End Using
    End Using


    File.Delete(filepath)
    File.Move(tempFile, filepath)
End Sub

SSIS を使用してみましたが、予期しない EOF エラーが発生します。

私は何を間違っていますか?

4

5 に答える 5

0

これは、ビット配列を使用して解決され、疑わしいビットを一度に1ビットずつチェックします。

于 2009-12-11T17:08:29.637 に答える
0

タブ区切りファイルを読み取るために、組み込みの .Net オブジェクトを試すことができます。Microsoft.VisualBasic.FileIO.TextFileParserです。

于 2009-11-05T11:04:20.580 に答える
0

当社では、毎週数百件の輸入を行っています。ファイルが正しいフォーマットで送信されず、自動化されたプロセスに同意した場合、送信者に返送されます。最後の行が間違っている場合は、情報が欠落しているか、その他の理由で破損している可能性があるため、ファイルを処理しないでください。

于 2009-11-04T19:09:36.273 に答える
0

エラーを回避する 1 つの方法は、ReadAllLines を使用して、ファイルを処理する代わりにファイル行の配列を処理することです。これはまた、streamreader よりもはるかに効率的です。

Dim fileLines() As String
fileLines = File.ReadAllLines("c:\tmp.csv")
...
for each line in filelines
  If trim(line) <> "" Then writer.WriteLine(line)
next line

出力行を同じまたは別の文字列配列に保存し、File.WriteAllLines を使用してファイルを一度に書き込むこともできます。

于 2009-11-05T04:08:12.720 に答える