ListView に一覧を追加する。

タグの編集
投稿者 XPMAX2010  (中学生) 投稿日時 2010/10/19 20:32:08
VB.NETを使ってプログラムを作っています。
それで、Googleで、「VB.NET ListView 項目 追加」と検索して出てくるのですが、
今回その方法ではなく、ファイルの中の内容をリストビューに追加したいのです。

”MUSIC.TXT”
<WAV>
 <"C:\01.WAV", "お気に入りミュージック01">
 <"C:\02.WAV", "お気に入りミュージック02">
</WAV>
<MP3>
 <"D:\01.MP3", "お気に入りミュージック03">
 <"D:\02.MP3", "お気に入りミュージック04">
</MP3>
/”MUSIC.TXT”

ListView1,2には、Column1,2の二つが追加してあります。
Button1をクリックしたときに、
ListView1のColumn1に C:\01.WAV と C:\02.WAV
ListView1のColumn2に お気に入りミュージック01、お気に入りミュージック02
同じく、ListView2には、<MP3>が追加されます。

こういうことはできますか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/10/20 09:34:17
> ファイルの中の内容をリストビューに追加したいのです。
やりたい事はわかりました。ところで、質問内容は何でしょうか?

ファイルの内容を読み取る方法が分からないのでしょうか。
あるいは、読み取った内容を構文解析するところでつまずいているのでしょうか。
それとも、データをリストビューに表示させる部分が分からないのでしょうか。
もしくは、それ以外の所で悩んでいるのでしょうか。


ファイルの読み取りなら、まずは System.IO.File.ReadAllText メソッドを試してみてください。

構文解析については、ファイルの書式次第では String.Replace メソッドや
System.Text.RegularExpressions.Regex クラスを使えるかも知れません。

リストビューへの表示については、検索すれば幾つかの具体例が見つかるかと思います。
http://www.atmarkit.co.jp/fdotnet/dotnettips/258listviewadd/listviewadd.html


> “MUSIC.TXT”
一瞬、XML ファイルかと思いましたが……独自フォーマットのテキストのようですね。
となると、そのファイルの内容を読み取るための構文解析処理が必要になりそうです。

XML であれば簡単に処理できるのですが、XPMAX2010さんの独自フォーマットとなると、
細かい表記ルールが分からないため、コード例を提示するのは控えておきますが、
開発前に、空白文字の扱い(スペース、改行、タブ等)がどうなっているのかとか、
<WAV>や<MP3>に曲数が無い場合はどのようなデータになるのかとか、
曲名に「"」を含む場合はどのように表記されるのか、文字コードは何を使うのかなど、
細かいルールを定めておきましょう。
投稿者 XPMAX2010  (中学生) 投稿日時 2010/10/21 19:12:14
別に、ファイルなどは、XMLでもいいです。
今はとにかく、ListViewの項目の保存、取得がしたいです。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/10/21 21:52:07
であれば、たとえばこんな感じで。

 
Public Class Form1
    Private Sub Form1_Load() Handles MyBase.Load
        'サンプルデータ 
        ListView1.Items.Add("C:\01.WAV").SubItems.Add("お気に入りミュージック01")
        ListView1.Items.Add("C:\02.WAV").SubItems.Add("お気に入りミュージック02")
        ListView2.Items.Add("C:\01.MP3").SubItems.Add("お気に入りミュージック03")
        ListView2.Items.Add("C:\02.MP3").SubItems.Add("お気に入りミュージック04")
    End Sub

    Private Sub Button1_Click() Handles Button1.Click
        'ListView の内容を XML ファイルに保存 
        Dim data = <album>
                       <WAV>
                           <%= From x As ListViewItem In ListView1.Items _
                               Select <MUSIC file=<%= x.Text %> title=<%= x.SubItems(1).Text %>/> _
                           %>
                       </WAV>
                       <MP3>
                           <%= From x As ListViewItem In ListView2.Items _
                               Select <MUSIC file=<%= x.Text %> title=<%= x.SubItems(1).Text %>/> _
                           %>
                       </MP3>
                   </album>

        data.Save("C:\MUSIC.XML")
        MsgBox("保存しました", vbInformation)
    End Sub

    Private Sub Button2_Click() Handles Button2.Click
        ListView1.Items.Clear()
        ListView2.Items.Clear()

        'XML ファイルの内容を ListView に表示 
        Dim data = XDocument.Load("C:\MUSIC.XML")

        For Each music In data.Root.<WAV>.<MUSIC>
            ListView1.Items.Add(music.@file).SubItems.Add(music.@title)
        Next
        For Each music In data.Root.<MP3>.<MUSIC>
            ListView2.Items.Add(music.@file).SubItems.Add(music.@title)
        Next
        MsgBox("読み込みました。", vbInformation)
    End Sub
End Class
投稿者 (削除されました)  () 投稿日時 2010/10/23 18:44:02
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/10/23 18:48:45
(削除されました)
投稿者 XPMAX2010  (中学生) 投稿日時 2010/10/23 18:49:47
魔界の仮面弁士 さん、ありがとうございます。
追加も取得もできました。
System.Xml と System.Xml.Linq をインポートすれば使えました。