開発環境: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()
> あるホームページを参考に
その参考にしたサイトの URL を教えていただけないでしょうか。
それと、隣のVB6掲示板に誤投稿した記事がそのままになっているようです。
移動先の URL(このスレッドのアドレス)を掲載して移動したことを伝え、
元のスレッドを閉じておいてください。ご協力をお願いします。
> 一旦、削除してから作り直すというような事をしたいと考えています。
> 削除の記述はわかるものの、
ファイルの削除方法は分かるのですね? であれば
> '開く
という行の前に、その削除処理を入れておけば OK です。
ただし今回の場合、StreamWriterコンストラクタにて、append 引数に
True(ファイル末尾に追記する)ではなく
False(ファイルを作り直す)を指定されていますので、わざわざ
事前に削除したりせずとも、CSV ファイルの中身は新規に作成されますよ。
魔界の仮面弁士様、ご回答ありがとうございます。
教えて頂いたように、StreamWriterの引数として、Trueを指定しているにも関わらず、
データがおかしくなってしまう事から、ご指摘の通り、もう一度プログラムを再確認した
ところ、やはり出力する前のdatatableからおかしな事をようやく発見できました。
お騒がせして申し訳ありません。
何度もありがとうございました!
ツイート | ![]() |