- PR -

[C#] listboxの項目から特定の文字列を抜き出す方法

投稿者投稿内容
Syou
会議室デビュー日: 2006/02/03
投稿数: 13
投稿日時: 2006-02-06 19:13
前はすぐに答えていただきありがとうございました。そのとき自分の分があいまいなせいか紛らわしくさせてしまったようです。すいません、出来る限りわかりやすくします。

今回、どうしてもわからなかったので質問します。

listboxに
1,222,3333,3333,444               ・・・T
12,3456,7891011,121131415,2333     ・・・U
1234,1234567,123454676,22,865      ・・・V
という項目があったとします。
この ,, の間の文字をそれぞれのTextBoxに抜き取りたいのです。

例えば上のTの項目をクリックした場合、
 TextBox1には 1
 TextBox2には 222
 TextBox3には 3333
 TextBox4には 3333
 TextBox5には 444 を、
上のUの項目をクリックした場合、
 TextBox1には 12
 TextBox2には 3456
 TextBox3には 7891011
 TextBox4には 121131415
 TextBox5には 2333  を、
上のVの項目をクリックした場合、
 TextBox1には 1234
 TextBox2には 1234567
 TextBox3には 123454676
 TextBox4には 22
 TextBox5には 865   を、
表示させることになります。

テキストの特定文字列を抜き出す場合、Substringを使うんですが、これでは対処できないのです。
少しだけでもヒントをもらえないでしょうか?
何度も質問すいません・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-06 19:26
引用:

Syouさんの書き込み (2006-02-06 19:13) より:

テキストの特定文字列を抜き出す場合、Substringを使うんですが、これでは対処できないのです。


String.Split はどうでしょうか?

  区切り文字で分割して配列に変換する

これならば、TextBox への表示を見る限り一発解決ですよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2006-02-06 19:29
String.Split()で文字列を配列に分割してから各TextBoxにセットするてのは如何でしょうか
[追記]
被った上に二重投稿...最悪 orz
_________________
FUTURE IS ON FIRE!

[ メッセージ編集済み 編集者: 117 編集日時 2006-02-06 19:31 ]
Syou
会議室デビュー日: 2006/02/03
投稿数: 13
投稿日時: 2006-02-07 22:17
>じゃんぬねっとさん 117さん
返信ありがとうございます。
 サイトは大変参考になりました。これからも利用させてもらいます。
splitで,ごとに文字列を配列に分割して、TextBoxに代入することはSplitですることが出来るのですが、その逆の仕方はどうなんでしょうか?
 逆だとsplitが使えないので・・

やりたいことは、例えでいうと、
TextBoxの内容が変更されたら、その変更された内容をSplitで分けられた中へ編集したいのです。
ListBox1の項目内
11,2235,6666,78888,23444,555,7789
をまず、Splitで,ごとで分けてそれぞれをTextBoxに入れます。
そして、
TextBox1:
23444

23344
に変更したら
ListBox1の項目内の
11,2235,6666,78888,23444,555,7789

11,2235,6666,78888,23344,555,7789
という風に部分的に変更させたい、ということになります。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-07 22:23
引用:

Syouさんの書き込み (2006-02-07 22:17) より:

その逆の仕方はどうなんでしょうか?


同じサイト内にあります。

  配列を結合して文字列にする

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-02-07 23:25

一度文字列配列を作ってからString.Joinするよりも、この場合なら単純に足していった方が手っ取り早いかも。
TextBoxが配列になってるのなら文字列配列作るのも楽だからJoinするだろうけど。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-08 00:24
「逆の仕方」に気を取られすぎたかな。
よく読んでみれば配列だとしてもループで回して Append した方が良さ気。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Syou
会議室デビュー日: 2006/02/03
投稿数: 13
投稿日時: 2006-02-08 22:59
>じゃんぬねっとさん Hongliangさん
 サイトを完全に見ていなかったため本来は不必要の質問をしてしまいました、申し訳ありません。
 自分なりに考えて、それぞれのテキストからの値をStringに入れて、それを足して全て表示させるというやり方を イベントのtextBox1_Enter、textBox1_Leave、textBox1_TextChangedとboolで分けることによって実装できました。サイト、アドバイス大変参考になりました。ありがとうございます。

 あと、もう1つなのですが、テキストをリストボックスに読み込ませる場合、StreamReaderで
listBox1.Items.Add(reader.ReadLine()); という風にすれば出来るのですが、

リストボックスからテキストに直して保存する場合、自分なりに考え

Stream stm = savedlg.OpenFile();
StreamWriter writer = new StreamWriter(stm, System.Text.Encoding.GetEncoding("Shift_JIS"));

int line_check = listBox1.Items.Count;
for (int write = 0; write != line_check; write++)
  {
    listBox1.SelectedIndex = write;
    writer.WriteLine(listBox1.SelectedItem.ToString()); //不明!
  }
listBox1.SelectedIndex = -1;
writer.Close();
stm.Close();

とし、保存はすることが出来たのですがこれだと1000行あったりすると1行ずつ保存するためCPUにもよりますがかなりの時間がかかってしまいます。
 もう少し時間短縮できるような保存の仕方はないでしょうか?何回も質問すいませんが時間があればよろしくお願いします。
(一部文がおかしかったので修正してます)

[ メッセージ編集済み 編集者: Syou 編集日時 2006-02-08 23:10 ]

スキルアップ/キャリアアップ(JOB@IT)