ファイル処理
投稿者 YuO  (社会人)
投稿日時
2018/5/23 21:39:57
Itemsの型をList(Of String())とかにすればよいのではないかと。
Itemsへの代入はItems.Addになりますが。
Itemsへの代入はItems.Addになりますが。
投稿者 (削除されました)  ()
投稿日時
2018/5/24 03:59:32
(削除されました)
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2018/5/24 07:39:44
> 初級講座 >第30回 ファイル処理>■リスト6で
下記のことですね。まだ「郵政公社」だった当時のままなので、
csv のダウンロードリンクが違っていたりもしますが。
http://rucio.a.la9.jp/main/dotnet/shokyu/standard30.htm
> 郵便番号と住所をリストボックスに表示しますが、
郵便番号CSVは、複数行で 1 エントリとみなすレコード構成(例:409-1321)もあるので、
まともに扱おうとすると、単純に取り込めるものではなかったりします。
学習目的ではなく、実際にデータとしての利用を考えている場合には、
zipcloud さんあたりの加工済みデータの方が扱いやすいかもしれません。
http://d.hatena.ne.jp/dayflower/20100929/1285744153
https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142
それはさておき。
> 1行目はItems(1,)
> 2行目はItems(2,)
Items(0, ) は未使用ということでしょうか。
それとも列名を格納するための物でしょうか。
ひとまず後者の意味で実装してみてました。
下記のことですね。まだ「郵政公社」だった当時のままなので、
csv のダウンロードリンクが違っていたりもしますが。
http://rucio.a.la9.jp/main/dotnet/shokyu/standard30.htm
> 郵便番号と住所をリストボックスに表示しますが、
郵便番号CSVは、複数行で 1 エントリとみなすレコード構成(例:409-1321)もあるので、
まともに扱おうとすると、単純に取り込めるものではなかったりします。
学習目的ではなく、実際にデータとしての利用を考えている場合には、
zipcloud さんあたりの加工済みデータの方が扱いやすいかもしれません。
http://d.hatena.ne.jp/dayflower/20100929/1285744153
https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142
それはさておき。
> 1行目はItems(1,)
> 2行目はItems(2,)
Items(0, ) は未使用ということでしょうか。
それとも列名を格納するための物でしょうか。
ひとまず後者の意味で実装してみてました。
Private Items(,) As String
Private ReadOnly colNames() As String = "市町村CD,旧郵便番号,郵便番号,都道府県カナ,市区町村カナ,町域カナ,都道府県名,市区町村名,町域名,分割町域,小字起番,丁目含有,複数町域,更新区分,変更理由".Split(","c)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim filePath As String = "C:\19YAMANA.CSV"
Dim q = (From line In System.IO.File.ReadLines(filePath, _
System.Text.Encoding.GetEncoding("Shift_JIS"))
Select line.Replace("""", "").Split(","c)).ToArray()
ReDim Items(q.Length, UBound(colNames))
For colIdx = 0 To UBound(colNames)
Items(0, colIdx) = colNames(colIdx)
Next
For rowNum = 1 To q.Length
Dim cols() As String = q(rowNum - 1)
For colIdx = 0 To UBound(colNames)
Items(rowNum, colIdx) = cols(colIdx)
Next
Next
End Sub
投稿者 かつ  (社会人)
投稿日時
2018/5/24 16:07:50
魔界の仮面弁士様
早速実装してみたところ、きちんと動作しました。
2次元の変数を使って、制御プログラムを作っています。
まだ.NETをやってみて慣れていないので理解が難しい所が多いですが、
ご丁寧なアドバイスありがとうございました。
早速実装してみたところ、きちんと動作しました。
2次元の変数を使って、制御プログラムを作っています。
まだ.NETをやってみて慣れていないので理解が難しい所が多いですが、
ご丁寧なアドバイスありがとうございました。
郵便番号と住所をリストボックスに表示しますが、
Items = Line.Split(",") で
Itemsに一行ずつ '一行を, (カンマ)で区切って項目ごとに分解しますが、
Itemsを2次元変数にして読み込むすべての行を, (カンマ)で区切りでItemsに読み込みたいです。
簡単な方法をどたな様か教えて頂けませんでしょうか。
1行目はItems(1,)
2行目はItems(2,)
のようにItems()の中に読み込みたいです。
↓以下■リスト6↓
Dim Reader As New IO.StreamReader("C:\19yamana.csv", System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim Items() As String 'CSVの各項目を表す配列
Dim Line As String = Reader.ReadLine 'CSVの一行
Dim PostalCode As String '郵便番号
Dim Address As String '住所
Do Until IsNothing(Line)
Items = Line.Split(",") '一行を, (カンマ)で区切って項目ごとに分解
PostalCode = Items(2) '郵便番号取得
PostalCode = PostalCode.Replace("""", "") '郵便番号から" を省く
Address = Items(6) & Items(7) & Items(8) '都道府県名と市区町村名と町域名を結合
Address = Address.Replace("""", "") '上記から" を省く
ListBox1.Items.Add(PostalCode & " - " & Address)
Line = Reader.ReadLine '次の行を読み込む。
Loop
Reader.Close()