CSVファイルの出力に関して

解決


misamisa  2012-08-23 09:05:50  No: 147756  IP: [192.*.*.*]

開発環境:VB2008

あるホームページを参考に、以下のような記述をし、CSVファイルを作成するような
プログラムを作成しています。

また、CSVは何度も作成される為、一旦、削除してから作り直すというような事をしたい
と考えています。

削除の記述はわかるものの、新しくCSVファイル作成するには、以下の記述をどのように
修正すれば良いでしょうか、、、

教えて下さい。

よろしくお願いいます。

《記述内容》

'保存先のCSVファイルのパス
Dim csvPath As String = "C:\TEST.csv"
'CSVファイルに書き込むときに使うEncoding
Dim enc As System.Text.Encoding = _
    System.Text.Encoding.GetEncoding("Shift_JIS")

'開く
Dim sr As New System.IO.StreamWriter(csvPath, False, enc)

Dim colCount As Integer = dtTable.Columns.Count
Dim lastColIndex As Integer = colCount - 1

'ヘッダを書き込む
Dim i As Integer
For i = 0 To colCount - 1
    'ヘッダの取得
    Dim field As String = dtTable.Columns(i).Caption
    '"で囲む必要があるか調べる
    If field.IndexOf(ControlChars.Quote) > -1 OrElse _
        field.IndexOf(","c) > -1 OrElse _
        field.IndexOf(ControlChars.Cr) > -1 OrElse _
        field.IndexOf(ControlChars.Lf) > -1 OrElse _
        field.StartsWith(" ") OrElse _
        field.StartsWith(ControlChars.Tab) OrElse _
        field.EndsWith(" ") OrElse _
        field.EndsWith(ControlChars.Tab) Then
        If field.IndexOf(ControlChars.Quote) > -1 Then
            '"を""とする
            field = field.Replace("""", """""")
        End If
        field = """" + field + """"
    End If
    'フィールドを書き込む
    sr.Write(field)
    'カンマを書き込む
    If lastColIndex > i Then
        sr.Write(","c)
    End If
Next i
'改行する
sr.Write(ControlChars.Cr + ControlChars.Lf)

'レコードを書き込む
Dim row As DataRow
For Each row In dtTable.Rows
    For i = 0 To colCount - 1
        'フィールドの取得
        Dim field As String = row(i).ToString()
        '"で囲む必要があるか調べる
        If field.IndexOf(ControlChars.Quote) > -1 OrElse _
            field.IndexOf(","c) > -1 OrElse _
            field.IndexOf(ControlChars.Cr) > -1 OrElse _
            field.IndexOf(ControlChars.Lf) > -1 OrElse _
            field.StartsWith(" ") OrElse _
            field.StartsWith(ControlChars.Tab) OrElse _
            field.EndsWith(" ") OrElse _
            field.EndsWith(ControlChars.Tab) Then
            If field.IndexOf(ControlChars.Quote) > -1 Then
                '"を""とする
                field = field.Replace("""", """""")
            End If
            field = """" + field + """"
        End If
        'フィールドを書き込む
        sr.Write(field)
        'カンマを書き込む
        If lastColIndex > i Then
            sr.Write(","c)
        End If
    Next i
    '改行する
    sr.Write(ControlChars.Cr + ControlChars.Lf)
Next row

'閉じる
sr.Flush()
sr.Close()

編集 削除
魔界の仮面弁士  2012-08-23 12:53:24  No: 147757  IP: [192.*.*.*]

> あるホームページを参考に
その参考にしたサイトの URL を教えていただけないでしょうか。

それと、隣のVB6掲示板に誤投稿した記事がそのままになっているようです。

移動先の URL(このスレッドのアドレス)を掲載して移動したことを伝え、
元のスレッドを閉じておいてください。ご協力をお願いします。


> 一旦、削除してから作り直すというような事をしたいと考えています。
> 削除の記述はわかるものの、

ファイルの削除方法は分かるのですね? であれば
> '開く
という行の前に、その削除処理を入れておけば OK です。

ただし今回の場合、StreamWriterコンストラクタにて、append 引数に
True(ファイル末尾に追記する)ではなく
False(ファイルを作り直す)を指定されていますので、わざわざ
事前に削除したりせずとも、CSV ファイルの中身は新規に作成されますよ。

編集 削除
misamisa  2012-08-27 08:59:50  No: 147758  IP: [192.*.*.*]

魔界の仮面弁士様、ご回答ありがとうございます。

教えて頂いたように、StreamWriterの引数として、Trueを指定しているにも関わらず、
データがおかしくなってしまう事から、ご指摘の通り、もう一度プログラムを再確認した
ところ、やはり出力する前のdatatableからおかしな事をようやく発見できました。

お騒がせして申し訳ありません。

何度もありがとうございました!

編集 削除