0

私がやろうとしているのは、CSVファイルをデータテーブルにフィードし、ループしてcsvとして再保存し、すべての値の引用符を取り除いて、値を別のcsvとLEFT JOINできるようにすることです。

最初のエクスポートでは、正常に動作します。たまたまもう一度実行すると、「名前なし」という新しい列が追加されます。もう一度実行すると、さらに別の「名前なし」タブなどが追加されます。これまでの私のコードは次のとおりです。

            Dim currentrow As New System.Text.StringBuilder
            Dim entirefile As New System.Text.StringBuilder

            Dim i As Integer = 0

            For Each column As DataColumn In dt1.Columns
                currentrow.Append("" & column.ColumnName & ",")
            Next
            entirefile.AppendLine(currentrow.ToString)

            For Each row As DataRow In dt1.Rows
                currentrow = New System.Text.StringBuilder
                i = 0
                For Each column As DataColumn In dt1.Columns
                    currentrow.Append("" & row.Item(i) & ",")
                    i += 1
                Next
                entirefile.AppendLine(currentrow.ToString)
            Next

            Dim sw As New System.IO.StreamWriter("C:\CSV\MlnExp.csv")
            sw.Write(entirefile)
            sw.Dispose()
4

4 に答える 4

1

これは、サイクル... & ",")の両方の行にコンマ ( ) を追加しているためです。For

最後のコンマを削除するか、サイクルの最後のパスでコンマを追加しないことを検討してください。

于 2013-10-23T20:03:13.630 に答える
0

これらの行の結果として、余分な列が発生しています。

currentrow.Append("" & column.ColumnName & ",")

currentrow.Append("" & row.Item(i) & ",")

末尾のコンマと共に列名またはフィールドを追加しています。最後の項目の後に、削除していない末尾のコンマが残っているため、システムは行末に余分な空白フィールドを認識します。

行の組み立てが完了したら、末尾のコンマを取り除くだけです。

これはあなたのために働くはずだと思います:

currentrow.Length = currentRow.Length-1    ' shorten row by 1 character
entirefile.AppendLine(currentrow.ToString)
于 2013-10-23T20:03:07.667 に答える
0

多分私は何かが欠けているだけかもしれませんが、csvを文字列として読み込んでreplaceステートメントを実行しないのはなぜですか...","ちょうど,(および行頭と行末の追加の置換で)を置き換える行に沿った何か...そこにこれを行う方法の例はたくさんあります)、そもそもデータテーブルを作成してそこから書き込むことさえ気にしませんか???

それはあなたのために働くでしょうか?

于 2013-10-23T20:34:32.590 に答える
0

これで:

        For Each column As DataColumn In dt1.Columns
            currentrow.Append("" & column.ColumnName & ",")
        Next

この:

            For Each column As DataColumn In dt1.Columns
                currentrow.Append("" & row.Item(i) & ",")
                i += 1
            Next

","各行の最後に末尾を追加しています。この時点で、生成しているのと同じ MlnExp.csv ファイルをプログラムの次の実行にフィードしていると想定しています。

末尾のコンマを追加することで、毎回行に新しいフィールドを追加し、このように繰り返し実行すると複数の列が追加されます。

私の典型的な解決策は、代わりに、後続の各列の前にコンマを追加することです。すなわち

            dim first as boolean = true
            For Each column As DataColumn In dt1.Columns
                if not first then currentrow.Append(",")
                currentrow.Append("" & row.Item(i))
                first = false
                i += 1
            Next

少し粗雑ですが、通常は仕事を成し遂げます

于 2013-10-23T20:05:34.867 に答える