テキストボックスの内容を1行ずつ取得するには?

解決


もん  2006-01-30 02:33:35  No: 129933

VB2005を先日DLしたばかりです。
テキストボックスの内容を1行ずつ取得したいと思っています。

Dim names As String()
names = TextBoxBefor.Text.Split(vbNewLine)

こんな感じで分割しようと思ったのですが、2つ目以降のnamesの先頭に改行文字が入ってしまいます。

上記の方法でうまく取得する方法、もしくはこの方法に限らず、1行ずつ取得するいい方法を教えてください。よろしくお願いします。


ガッ  2006-01-30 03:03:04  No: 129934

2005の資料がないので2003を継承していると思って考えてみました。

・確かVisualBasicにSplit()がありませんでしたっけ?
  それなら、文字列を区切りとして分割できると思います。
・[String].Replace(vbNewLine,vbNullChar).Split(vbNullChar)
  と、強引に…?

ちなみに、.NET2003の[String].Split()メソッドは、
char[]を受け取るメソッドのようです。
.NET2005でも変わっていないのなら、
Stringが暗黙の変換が行われChar[]になったのかもしれませんね。


もん  2006-01-30 03:54:19  No: 129935

ガッさんありがとうございます。

>ちなみに、.NET2003の[String].Split()メソッドは、
>char[]を受け取るメソッドのようです。

その通りでした。VB2005でもそうでした。
(ちなみに2005からは.NETという名称は使わなくなったそうです)
vbNewLineをで分割してもらうつもりが、「CR」か「LF」のどちらか
で分割してくれと要求していたのですね。

教えていただいた方法はどちらもうまくいきました。
VB6以前の文法はできれば使いたくないという思いもありましたが、
一旦置換というのはどうも気持ちが悪いので前者を選択しました。

どうもありがとうございました。


Danti  2006-01-30 04:03:17  No: 129936

いまは環境がないので試せないけど
vb2005だと、string[] を受け取るバージョンが
追加されているようです。使えないでしょうか?
http://msdn2.microsoft.com/ja-jp/system.string.split.aspx


もん  2006-01-30 04:43:32  No: 129937

できました!Dantiさんありがとうございます。

配列を作って…とかオプションの意味がわからないとかで
ちょこっと苦労してしまいましたが何とか実装できました。

1つだけでいいのにあえて配列にしなければならないところが
すこし気になりますがこれがベストかなと思い
これを使用することにしました。

ガッさんの方法も勉強になったので、せっかくなので
コメントとして残しておくことにしました。

最終的にこんな感じにしました。

Dim names As String()
Dim separator(1) As String

separator(0) = vbNewLine

'names = TextBoxBefor.Text.Replace(vbNewLine, vbNullChar).Split(vbNullChar)
'names = Split(TextBoxBefor.Text, vbNewLine)
names = TextBoxBefor.Text.Split(separator, New StringSplitOptions())

大変勉強になりました。
お二人ともありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加