Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Split メソッドによる分割
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30168#CommentId82537
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2016/10/5 15:47:25
Option Infer ではなく、Option Strict ですね。
今回のケースでは、「ParameArray separator() As Char」のオーバーロードに渡されています。
Option Strict が Off の場合、sBunsho.Split(vbCrLf) が
エラー無く呼べてしまいますが、その結果は
sBunsho.Split(CChar(vbCrLf))
へと解決されます。これは .Split(ControlChars.Cr) と同義です。
Option Strict On で動くコードとしては
sArray = sBunsho.Split(vbCrLf.ToCharArray())
sArray = sBunsho.Split(ControlChars.Cr, ControlChars.Lf)
などがありますが、これだと結果が変わってきてしまいますので、
shu さんが書かれたように、String の配列で渡すようにします。
なお、shuさんが書かれたコードを試す場合は、
VB2010 以上が必要になります。VB2005/2008 の場合は
sArray = sBunsho.Split(New String() {vbCrLf}, StringSplitOptions.None)
というコードにしてあげてください。
また、VB.NET 2002/2003 の場合は、
String.Split では対応できないので、
Strings.Split で代用することになります。
sArray = Strings.Split(sBunsho, vbCrLf)
なお、sBunsho の値が Nothing だった場合、
sArray = sBunsho.Split({vbCrLf}, StringSplitOptions.None) はエラーになるので注意して下さい。
sArray = Strings.Split(sBunsho, vbCrLf) あるいは
sArray = CStr(sBunsho).Split({vbCrLf}, StringSplitOptions.None) なら大丈夫です。
VB2015の場合は、下記のような回避策もあります。
sArray = sBunsho?.Split({vbCrLf}, StringSplitOptions.None)
ただし sBunsho が空の場合、sArray にも Nothing がセットされます。
> マイクロフトさんの解説では
「マイクロフトさん」だと、シャーロックホームズのお兄さんになってしまう…。
> sBunsho = sBunsho.Replace(vbCrLf , vbTab)
> sArray = sBunsho.Split(vbTab)
vbTab だと、文中に含まれていてもおかしくないので、置き換えるのであれば、
sArray = sBunsho.Replace(vbCrLf, vbNullChar).Split(ControlChars.NullChar)
あるいは、
sArray = sBunsho.Replace(vbCrLf, vbCr).Split(ControlChars.Cr)
の方が良いと思います。