質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

19933閲覧

VB.net csvファイルを読み込んで配列に入れたいと思っています。

mah1107

総合スコア15

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/11/09 09:14

編集2018/11/09 12:46

構造体の配列に読み込んだcsvファイルを格納し、編集したい

何行あるか分からないファイルを一行ずつ読込んで、構造体の配列に入れたいと思っています。
OpenFileDialogでファイル名の取得は行っていますが、肝心の読み込みが出来ていません。
「VB.NET CSV 読み込み」などで検索したのですが、サンプルを見てもあまり理解できなかったので、質問させていただきます。

読み込むcsvファイルはX座標の値,Y座標の値,Z座標の値が入っています。
この値をそれぞれ配列で宣言し、各値のデータの処理を行いたいと考えています。
csvファイルのX座標とXpointを結びつけて、その平均をとる計算や
構造体で1つのグループとしてまとめて、指定した範囲に入る値の抽出などを行いたいです。

計算式等は頭の中でもう出来ていて、読み込みが出来ないので困っています。
配列を使えばcsvファイルの値とXpointなどを結び付けられるのでしょうか?
Importa system.ioやshift-jis等も調べたのですがあまり理解できていないです。

お願いばかりで申し訳ありませんが教えていただきたいと思います。
よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

VB.net

1Public Class Form1 2 3 'アプリケーションの終了 4 Private Sub ExitButton_Click(sender As Object, e As EventArgs) Handles ExitButton.Click 5 Application.Exit() 6 End Sub 7 8 '構造体の定義 9 Public Structure PointData 10 Dim Xpoint As Double 'X座標 11 Dim Ypoint As Double 'Y座標 12 Dim Zpoint As Double 'Z座標 13 End Structure 14 15 'メンバ変数 16 Dim PD() As PointData 17 18 'ファイルの読み込み 19 Private Sub OpenButton_Click(sender As Object, e As EventArgs) Handles OpenButton.Click 20 Try 21 With OpenFileDialog1 22 '選択ダイアログを開く。 23 .Title = "点群ファイルの読み込み" 24 .FileName = "" 25 .Filter = "点群ファイル(*.csv)|*.csv|すべてのファイル(*.*)|*.*" 26 .DefaultExt = ".csv" 27 28 If .ShowDialog() = Windows.Forms.DialogResult.OK Then 29 30 '選択したファイル名を表示する。 31 OpenFileText.Text = IO.Path.GetFileName(.FileName) 32 33 'ファイルを読み込む。 34 MessageBox.Show(.FileName & "を読み込みました。", 35 My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Warning) 36 37 Else 38 MessageBox.Show(.FileName & "の読み込みに失敗しました。", 39 My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Warning) 40 End If 41 End With 42 Catch ex As Exception 43 End Try 44 End Sub 45 46End Class 47

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

検索されたサンプルをそのまま動作させてみて、動きを確認されてはどうでしょう。
こちらは比較的シンプルですので、参考になるかと思います。
その際、デバッガでステップ実行して各変数の中身を確認されれば、そこから変更すべき場所が見えてくるかと思います。
その上で、ここが分からない等質問された方がよろしいかと思います。

投稿2018/11/09 14:45

YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mah1107

2018/11/09 15:43

ご丁寧に回答ありがとうございます。 まだ自分自身どこがわかってどこがわかっていないのか不明点もありますので参考にしながら頑張りたいと思います。
guest

0

ベストアンサー

一行づつ読み込んで
その一行をsplitを使い カンマで分割すれば簡単に
ばらせます

単純に一行づつ読み込むサンプルです
引用ページ

vb.net

1 ' StreamReader の新しいインスタンスを生成する 2 Dim cReader As New System.IO.StreamReader("C:\Hoge.txt", System.Text.Encoding.Default) 3 4 ' 読み込んだ結果をすべて格納するための変数を宣言する 5 Dim stResult As String = String.Empty 6 7 ' 読み込みできる文字がなくなるまで繰り返す 8 While (cReader.Peek() >= 0) 9 ' ファイルを 1 行ずつ読み込む 10 Dim stBuffer As String = cReader.ReadLine() 11 ' 読み込んだものを追加で格納する 12 stResult &= stBuffer & System.Environment.NewLine 13 End While 14 15 ' cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照) 16 cReader.Close() 17 18 ' 結果を表示する 19 MessageBox.Show(stResult)

ただし値がダブルクォーテーションとかで
囲まれていたり、各項目の列数が違う場合等は
一工夫必要ですが...

Vb.net自体は触ったことがないですが考えかたは使えると思うので...
stResult &= stBuffer & System.Environment.NewLine をやめて
dim stSplit as String()を宣言して
stSplit = stBuffer.Split(","c)として
受け取った後に各要素を別の変数に割り振ればいいと思います。

投稿2018/11/09 11:55

編集2018/11/09 15:10
kamikazelight

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamikazelight

2018/11/09 12:25

ごめんなさい ループとか入ってませんでした
mah1107

2018/11/09 12:37

回答ありがとうございます。 初心者で申し訳ないのですが、#1のところはどのようなデータ型が当てはまるでしょうか? お手数おかけしますが、教えて頂けると幸いです。 また、値はカンマ区切りで項目の列数は同じです
YAmaGNZ

2018/11/09 14:36

こちらのサンプルはVBAなので、考え方の参考にはできるかと思います。 VB.NETですと、また違った書き方になるかと
kamikazelight

2018/11/09 15:15

まだ、解決していないようなので Vb.net で探してみました。 このサンプルコードからならどうでしょうか? 一応 Split も調べて乗っけておきました。
mah1107

2018/11/09 15:45

回答ありがとうございます。 少しずつですが、理解が深まってきました! まだまだ初心者ですが、分かってるとやっぱり楽しいです。 今後ともよろしくお願いします。
kamikazelight

2018/11/09 16:44

何かあれば 気軽に聴いてください 余力があれば力になりたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問