DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Listboxの文字列の削除について

環境/言語:[XP sp3/VB2005]
分類:[.NET]

まったく想像がつかないので質問させてください。


「Listboxの文字列の削除について」


現在Listboxに5行ほどの文字列が入っています。

-listbox1-
http://kaiin.net/aoyama/login/20100301/
http://kaiin.net/satou/login/20100309/
http://kaiin.net/mori/login/20100407/
http://kaiin.net/noguchi/login/20100413/
http://kaiin.net/yamamoto/login/20100414/


この中から、名前の部分(aoyama、satouなど)だけを抽出して、再度Listboxに入れ直したいのですが、まったくもって分かりません。


-listbox2-
aoyama
satou
mori
noguchi
yamamoto



これは、Listboxから一行づつを抽出して、それをTextboxに入れなおして、正規表現を使い抽出して、textboxからlistboxに入れるという方法になりますでしょうか?



直接Listboxから抽出して入れなおすことは出来ませんでしょうか?


説明が分かりにくかったらすみません。
■No28433に返信(ザナドゥさんの記事)
> まったく想像がつかないので質問させてください。
>
> 「Listboxの文字列の削除について」
>
> 現在Listboxに5行ほどの文字列が入っています。
>
> -listbox1-
> http://kaiin.net/aoyama/login/20100301/
> http://kaiin.net/satou/login/20100309/
> http://kaiin.net/mori/login/20100407/
> http://kaiin.net/noguchi/login/20100413/
> http://kaiin.net/yamamoto/login/20100414/
>
> この中から、名前の部分(aoyama、satouなど)だけを抽出して、再度Listboxに入れ直したいのですが、まったくもって分かりません。
>
> -listbox2-
> aoyama
> satou
> mori
> noguchi
> yamamoto
>
> 直接Listboxから抽出して入れなおすことは出来ませんでしょうか?

"直接" とそうでない場合の区別が私にはわかりません。
ListBox は Item 単位にインスタンスがあります。
直接というと、この参照を直接扱うということになるのでしょうか?

ListBox1 の状態を保つのであれば、参照するだけで別で考えないとダメですよね。
いやそもそも Item にある文字列 (String) を参照して加工しなければならないわけですから。

> これは、Listboxから一行づつを抽出して、それをTextboxに入れなおして、
> 正規表現を使い抽出して、textboxからlistboxに入れるという方法になりますでしょうか?

え゙!? ど、どうしていきなり "textbox" が...!?

正規表現でも無論 OK ですが、"http://kaiin.net/" の後、"/login/" より前の部分と考えれば他にもいろいろやり方はあるでしょう。
たとえば、単純に、IndexOf メソッド + Substring メソッドでも可能でしょう。
■No28434に返信(じゃんぬねっとさんの記事)
>
> "直接" とそうでない場合の区別が私にはわかりません。
> ListBox は Item 単位にインスタンスがあります。
> 直接というと、この参照を直接扱うということになるのでしょうか?
>
> ListBox1 の状態を保つのであれば、参照するだけで別で考えないとダメですよね。
> いやそもそも Item にある文字列 (String) を参照して加工しなければならないわけですから。
>
>>これは、Listboxから一行づつを抽出して、それをTextboxに入れなおして、
>>正規表現を使い抽出して、textboxからlistboxに入れるという方法になりますでしょうか?
>
> え゙!? ど、どうしていきなり "textbox" が...!?
>
> 正規表現でも無論 OK ですが、"http://kaiin.net/" の後、"/login/" より前の部分と考えれば他にもいろいろやり方はあるでしょう。
> たとえば、単純に、IndexOf メソッド + Substring メソッドでも可能でしょう。



すみません、よくよく考えたらxmlデータをListboxに入れる前に、抽出してから一つずつ入れていくことは可能ですか?


Dim reg As String = "http://kaiin.net/xml/data/00012.rdf"
Dim loader As XmlReader = XmlReader.Create(reg)


While loader.ReadToFollowing("link")
ListBox1.Items.Add(loader.ReadString())
End While





一番適切なコードはどんな風にしますか?
■No28437に返信(ザナドゥさんの記事)

じゃんぬねっとさんの通りにするとしたら

>             ListBox1.Items.Add(loader.ReadString())

Dim strTmp as String = loader.ReadString()
strTmp = strTmp.Replace("http://kaiin.net/","")
Dim intIdx as Integer = strTmp.IndexOf("/login")
if intIdx>=0 then
    strTmp = strTmp.SubString(0,intIdx)
end if
ListBox1.Items.Add(strTmp)


こんな感じだと思います。検証していないのでエラーがあるかもしれません。
■No28440に返信(shuさんの記事)

一応、正規表現を使用した場合:


Imports System.Text.RegularExpressions

・・・

Dim strURLs() As String = {"http://kaiin.net/aoyama/login/20100301/", _
                           "http://kaiin.net/satou/login/20100309/", _
                           "http://kaiin.net/mori/login/20100407/", _
                           "http://kaiin.net/noguchi/login/20100413/", _
                           "http://kaiin.net/yamamoto/login/20100414/"}
Dim reg As New Regex("http://kaiin.net/(?<name>.*?)/.*")

For Each strURL In strURLs
    Dim m As Match = reg.Match(strURL)
    If m.Success Then
        ListBox1.Items.Add(m.Groups("name").Value)
    End If
Next
■No28441に返信(shuさんの記事)

かなり雑ですが、splitを使った場合です。

Dim strURLs() As String = {"http://kaiin.net/aoyama/login/20100301/", _
                           "http://kaiin.net/satou/login/20100309/", _
                           "http://kaiin.net/mori/login/20100407/", _
                           "http://kaiin.net/noguchi/login/20100413/", _
                           "http://kaiin.net/yamamoto/login/20100414/"}

For Each strURL In strURLs
    Dim strValues() As String = strURL.Split("/"c)
    ListBox1.Items.Add(strValues(3))
Next
有り難うございます。

正規表現しか思いつきませんでしたが、いろいろなコードの記述方法が有るのだと勉強になりました。


大変助かりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板