あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 題名: あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 著者: けいすけ
- 日時: 2012/04/05 19:42:21
- ID: 30223
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 著者: じゃんぬねっと
- 日時: 2012/04/05 21:59:13
- ID: 30225
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 著者: けいすけ
- 日時: 2012/04/07 19:34:30
- ID: 30235
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 著者: けいすけ
- 日時: 2012/04/08 17:36:50
- ID: 30240
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 著者: じゃんぬねっと
- 日時: 2012/04/09 9:37:21
- ID: 30247
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: あるCSVの内容を読み取ったデータテーブルの構造を変更して、別のCSVを生成するには?
- 著者: けいすけ
- 日時: 2012/04/14 12:53:57
- ID: 30318
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
こんにちは。お世話になります。
Cドライブのマイドキュメントにあるファイル1(CSV)の内容を読み取り、その内容を変更して、マイドキュメントに、ファイル2(CSV)を作りたいと思います。
ファイル1(CSV)の内容は、以下の通りです。
名前1 名前2 住所1 住所2
山森 海川 東京都東京区 東京111
作りたいファイル2(CSV)の内容は、以下の通りです。
名前 住所
山森海川 東京都東京区東京111
まず、ファイル1(CSV)を読み込みます。
(ファイル1読み込みボタン)
Private Sub cmdCSVRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCSVRead.Click
Dim csvDir As String = "C:\マイドキュメント"
'CSVファイルの名前
Dim csvFileName As String = "ファイル1.csv"
'接続文字列
Dim conString As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
+ csvDir + ";Extended Properties=""text;HDR=YES;FMT=Delimited"""
Dim con As New System.Data.OleDb.OleDbConnection(conString)
Dim commText As String = "SELECT * FROM [" + csvFileName + "]"
Dim da As New System.Data.OleDb.OleDbDataAdapter(commText, con)
'DataTableに格納する
Dim dt As New DataTable
da.Fill(dt)
これで、dtに、ファイル1の内容が代入されました。
このdtの内容の読み込みや更新だけであれば、DataRowを使って、
出来ると思うのですが、
ファイル2(CSV)を作る際には、
上記のような、新たなテーブル形式(dt2)を作り、使いたいと思います。
dtの内容を、ファイル2形式のデータテーブル(dt2)に加工するためには、
どのような処理を行えばよいのかが、分かりません。
dt2が加工出来たら、これを、パブリック変数(pbdt)に代入し、
下記の、ファイル生成ボタンのクリック時コードで使用します。
Public pbdt As DataTable
pbdt = dt2
(ファイル2生成ボタン)
Private Sub cmdCSVWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCSVWrite.Click
'保存先のCSVファイルのパス
Dim csvPath As String = "C:\マイドキュメント\ファイル2.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 = pbdt.Columns.Count
Dim lastColIndex As Integer = colCount - 1
'ヘッダを書き込む
Dim i As Integer
For i = 0 To colCount - 1
'ヘッダの取得
Dim field As String = pbdt.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 pbdt.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()
End Sub
このコードにより、ファイル2(CSV)がCドライブのマイドキュメントに生成されます。
dt2の作成の部分につきまして、お分かりになられる方がいらっしゃいましたら、誠にお手数と存じますが、
ご教示くださいませ。
どうぞよろしくお願い申し上げます。