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

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

ただいまの
回答率

90.33%

  • Visual Studio

    1999questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • VB.NET

    966questions

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

vbにてカンマ区切りのcsvファイルを読み込んで2次元配列の値を表示させる方法

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 436

kumakumatan

score 129

OS:Windows7Sp1
VisualStudio2017community
言語:VisualBasic.NET

test.txtファイルがあります。

-----test.txtファイルの中身---------

1,あいうえお,A
2,かきくけこ,B
3,さしすせそ,C

これを読み込ませて配列変数にセットして、
stResult(1)(1)と指定すると、その値が「かきくけこ」
と表示させるようにしたく思います。

' カレントディレクトリの取得
        Dim stCurrentDir As String = System.Environment.CurrentDirectory
        'テキストファイル処理
        Dim strFileName As String
        ' 読み込むファイルを設定
        strFileName = stCurrentDir & "\test.txt"

        '--メッセージボックス---
        '選択したボタンを判定する
        If MessageBox.Show("処理していいですか?", "確認", MessageBoxButtons.OKCancel) = DialogResult.OK Then
            'OKの場合
            MessageBox.Show("OK")
            If System.IO.File.Exists(strFileName) Then
                Dim cReader As New System.IO.StreamReader(strFileName, System.Text.Encoding.Default)
                Try
                    ' StreamReader の新しいインスタンスを生成する
                    'Dim cReader As New System.IO.StreamReader(strFileName, System.Text.Encoding.Default)
                    ' 読み込んだ結果をすべて格納するための変数を宣言する
                    Dim stResult As List(Of String) = New List(Of String)()
                    ' 読み込みできる文字がなくなるまで繰り返す
                    Dim cnt As Long
                    While (cReader.Peek() >= 0)
                        ' ファイルを 1 行ずつ読み込む
                        stResult.Add(cReader.ReadLine())
                        cnt += 1
                    End While
                    ' cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照)
                    cReader.Close()
                    ' 結果を表示する
                    'stResult(配列番号)で行数を表示させる
                    'MessageBox.Show(cnt)
                    If (cnt > 0) Then
                        MessageBox.Show(stResult(1))
                    End If
                Catch ex As Exception
                    ' 何かエラー処理を行う
                Finally
                    ' 読み込みファイルを閉じる
                    If cReader IsNot Nothing Then
                        cReader.Close()
                    End If
                End Try
            End If
            Exit Sub

            Else
                'OK以外の場合
                MessageBox.Show("キャンセル")
            Exit Sub
        End If


どのようにしたら実現できるかご教示いただきたく宜しくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

String.Splitメソッド を組み合わせましょう。,カンマでSplitすれば良い訳です。(※あとはご自分で考えてみましょう)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 17:06

    ご返信ありがとうございます。

    String.Splitメソッドを利用してやってみました。


    Dim textLines As New List(Of String())

    While (cReader.Peek() >= 0)

    ' ファイルを 1 行ずつ読み込む
    Dim stBuffer As String = cReader.ReadLine()
    ' 読み込んだものを追加で格納する
    Dim cols() As String
    cols = Split(stBuffer, ",")
    textLines.Add(cols)

    End While

    Dim strArr()() As String
    strArr = textLines.ToArray
    MessageBox.Show(strArr(1)(1))

    としても表示されなく悩んでいます。

    宜しくお願いします。

    キャンセル

  • 2018/06/07 22:54 編集

    確認しましたが、ご提示のコード、MessageBox.Show(strArr(1)(1))
    の部分で"あいうえお"と表示されましたよ。デバッガーでstrArrの内容を確認してみてください。
    (Visual Studio 2017 + .NET Framework 4.5)

    キャンセル

  • 2018/06/08 09:02

    ありがとうございます。
    Console.WriteLine(strArr(1)(2))
    などにて表示できました。
    MessageBox.Show(strArr(2)(1))
    にてでも表示できました。

    「try~catch」文で処理を記載していて、
    間違っていた処理が手前であり(文中にない処理)、
    例外処理(catch)にいってしまいました。
    不要な処理を外したら、表示できました。ありがとうございます。

    キャンセル

+1

もう少し問題を整理して、何が分かっていないのか明確にしましょう。
現状の質問ですと、丸投げと捉えられる可能性があります。

VB.NET CSV 読み込み List

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 17:07

    ご返信ありがとうございます。

    String.Splitメソッドを利用してやってみました。


    Dim textLines As New List(Of String())

    While (cReader.Peek() >= 0)

    ' ファイルを 1 行ずつ読み込む
    Dim stBuffer As String = cReader.ReadLine()
    ' 読み込んだものを追加で格納する
    Dim cols() As String
    cols = Split(stBuffer, ",")
    textLines.Add(cols)

    End While

    Dim strArr()() As String
    strArr = textLines.ToArray
    MessageBox.Show(strArr(1)(1))

    としても表示されなく悩んでいます。

    宜しくお願いします。

    キャンセル

  • 2018/06/07 17:40

    textLinesそのままでよいのでは?

    キャンセル

  • 2018/06/08 08:59

    ありがとうございます。
    MessageBox.Show(textLines(2)(1))
    などにて表示できました。

    キャンセル

0

「2次元配列を動的に作る」ことにチャレンジしてみてください。
この記事なんかが参考になるのではないでしょうか。配列サイズはファイルの行数から求まりますよ。
https://teratail.com/questions/67042
上記のキーワードで色々ググるのもいいかもしれませんね。

もし実装する中でさらにトラブルが起こったら質問を修正するか、補足をしてください。答えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 16:38

    ※入力テキストの形式が固定であれば、動的じゃなくてもいいです。

    キャンセル

同じタグがついた質問を見る

  • Visual Studio

    1999questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • VB.NET

    966questions

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