開発環境: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()
> 開発環境:VB2008
ここは VB2-VB6専用の掲示板です。
VB.NET は、お隣の掲示板にお願いします。
> あるホームページを参考に、
引用元の URL も示したほうが良いですよ。
> 削除の記述はわかるものの、新しくCSVファイル作成するには、以下の記述をどのように
> 修正すれば良いでしょうか、、、
> Dim sr As New System.IO.StreamWriter(csvPath, False, enc)
第二引数に False を指定していますよね。
この場合、元のファイルの有無に関わらず、常に新規作成(上書き)になりますよ。
ちなみに True の場合は、既存ファイルの末尾にデータ追加(ファイルが無ければ新規作成)です。
> '改行する
> sr.Write(ControlChars.Cr + ControlChars.Lf)
ControlChars.CrLf を使いましょう。
また、文字列連結は「+」よりも「&」を使う方が望ましいです。
魔界の仮面弁士様、いつもご回答ありがとうございます。
申し訳ありません、掲載する場所を間違えていたようですね、、、
私の記述した内容では、もともとあるCSVファイルに上書きするだけなんですね、、、
とした場合、1回削除してから新規でファイルを作成し、そこへ書き込むという場合は
どのようにしたら良いのでしょうか、、、
本来は新規なので問題ないはずですが、、、
とういのも、私のプログラムがおかしいのですが、なぜかデータを更新しても、そのデータ
が反映されずにCSV出力されてしまい、画面を再起動してから実行すると出力されるという
おかしな事象が発生している為、上記のような事ができないかと考えております。
よろしくお願いします。
> よろしくお願いします。
よろしくではなく移動をお願いします。
繰り返しになりますが、ここは VB.NET 用の掲示板ではありませんよ。
> 1回削除してから新規でファイルを作成し、そこへ書き込むという場合は
上書きモードだと何か都合が悪いのでしょうか?
> どのようにしたら良いのでしょうか、、、
「削除の記述はわかる」のでしたよね?
ファイルを削除したあとに、まったく同じ処理を記述するだけのはずですが…。
> そのデータが反映されずにCSV出力されてしまい
dtTable の内容が、「反映されたデータ」になっているかどうかを確認されましたか?
ここが古い情報だと、CSV の内容も古いままの筈ですよ。
VB.NETへ移動しました。
ツイート | ![]() |