電子書籍の厳選無料作品が豊富!

開発環境:Visual Basic 2008

教えて下さい。

あるホームページを参考に、CSV出力のプログラム(下記)を作成していますが、その際に、
どうやらデータは出力されているももの、ファイルを開いてもデータの中身が見れません。

メモ帳で開くとデータは存在しています。

何か記述漏れ等ありますでしょうか?

初歩的なトラブルで申し訳ありませんが、教えて下さい。

よろしくお願いします。

《記述内容》

Dim dt As DataTable = CType(G_DATA.DataSource, DataTable)

'保存先のCSVファイルのパス
Dim csvPath As String = "C:\test1.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 = dt.Columns.Count
Dim lastColIndex As Integer = colCount - 1

'ヘッダを書き込む
Dim i As Integer
For i = 0 To colCount - 1
'ヘッダの取得
Dim field As String = dt.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 dt.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.Close()

A 回答 (3件)

メモ帳で開いて、出力データが記録されているのが確認できたなら、テストとしては完了のはずでは?


ファイルの書き込みが終わっていないうちに開こうとしているとか?
sr.Close
の前に
sr.Flush
とかやってもダメですか?
    • good
    • 0
この回答へのお礼

edp3142様、ご回答ありがとうございます。

ご指摘の通り、sr.Flushを記述したところ、正しく表示されました。

書き込みが終わっていなかったのですね、、、

本当にありがとうございました!

お礼日時:2012/06/28 15:38

> CSVファイルをダブルクリックした際に、中身のデータが見えないという事です。



メモ帳で見えているならCSVファイルは出来ています。
あなたが何のAPをCSVファイルに関連付けているのか解りませんが、もしExcelで開けないと言うことでしたら、単にExcelの設定の問題である可能性があります。
オプション→詳細設定→全般→「Dynamic Data Exchange (DDE) を使用する他のアプリケーションを無視する」のチェックを外してみて下さい。
#Excel2007の場合(ほかのバージョンは適当に調べて下さい)
    • good
    • 0

こんちは。



プログラム読むのはかったるいので読みません。。。あしからず。。。

>>どうやらデータは出力されているももの、ファイルを開いてもデータの中身が見れません。
>>メモ帳で開くとデータは存在しています。

どういう意味ですか???

データは出力されていてデータの中身は無いけれどもメモ帳で開くとデータはある。

ん???


ファイルは存在するんですよね。
test1.csv

中身はどうなってるんですか?

見た感じ、カンマ区切りCSVですよね?

メモ帳で開いた際に、

項目名1,項目名2,項目名3,項目名4,項目名5
ああああ,いいいい,うううう,ええええ,おおおお
かかかか,きききき,くくくく,けけけけ,ここここ
ささささ,しししし,すすすす,せせせせ,そそそそ

って感じのが望まれる結果だと思うのですが

データは出力されてるけどメモ帳で開いて中身がない?
イマイチ良くわからないです。


ファイルはあるけど中身がない。
ってだけなら、ファイル作成処理のところは問題ないことになるので、
項目のデータ取得するところ、もしくは、データをファイル内に書き込む箇所
がおかしいんでしょうね。

その辺にあたりをつけてデバックされるといいでしょう。
    • good
    • 0
この回答へのお礼

STICKY2006様、ご回答ありがとうございます。

わかりにくい内容で申し訳ありません。

不思議な現象で、、、、

test1.csvというファイルは最初からマスターファイルのような活用する為に存在し、
そこへデータを書き込むというような作りをしています。

処理を実行させると、エラーも出ず正しく終了され、test1.csvのデータサイズも増えて
いる為、データは出力されているだろうとは思われますが、いざ実際にファイルを開くと
データが書き込まれていません、、、

但し、データサイズが増えている為、書き込まれているんじゃないかと思い、メモ帳で
開くとおっしゃる通り、

項目名1,項目名2,項目名3,項目名4,項目名5
ああああ,いいいい,うううう,ええええ,おおおお
かかかか,きききき,くくくく,けけけけ,ここここ
ささささ,しししし,すすすす,せせせせ,そそそそ


と出力されています。

CSVファイルをダブルクリックした際に、中身のデータが見えないという事です。

エラーも何も起きず、デバックも問題ない為、何がおかしいのか掴めず、、、

お礼日時:2012/06/28 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!