- PR -

Split関数で、区切り文字列がvbCrLfの場合のエラーについて

1
投稿者投稿内容
ASP.NET初心者
常連さん
会議室デビュー日: 2005/01/07
投稿数: 30
投稿日時: 2008-03-24 16:17
お世話になっております。
ASP.NET初心者でございます。

現在、VB.NETにて開発中です。
複数行の入力ができるテキストボックスを配置し、
入力値を改行区切り(vbCrLf)で配列に格納したいと考えております。
Split関数を使用していますが、空行が含まれている場合にエラーとなっていまいます。
下記が入力例とコード、エラーメッセージになります。

・入力例
 ┌───────────┐
 │あいうえお      │
 │かきくけこ      │
 │(空行)       │
 │さしすせそ      │
 └───────────┘

・コード
 array = Split(TextBox.text, vbCrLf)

・エラーメッセージ
 「文字列の長さは 1 文字でなければなりません。」

何かよい解決策はありますでしょうか?
宜しくお願い致します。


m.m.
常連さん
会議室デビュー日: 2003/04/22
投稿数: 20
投稿日時: 2008-03-24 16:48
こんにちは。

#バージョンとか書かれてないので、できる範囲で
うちの環境(VS.NET 2003のVB.NETのWindowsフォーム)では、問題なく動作しましたよ。

コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim array() As String
        Dim i As Integer

        array = Split(TextBox1.Text, vbCrLf)
        Debug.WriteLine(array.Length)
        For i = LBound(array) To UBound(array)
            Debug.WriteLine(array(i))
        Next

    End Sub

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-24 16:57
引用:

ASP.NET初心者さんの書き込み (2008-03-24 16:17) より:

Split関数を使用していますが、空行が含まれている場合にエラーとなっていまいます。
下記が入力例とコード、エラーメッセージになります。

・コード
 array = Split(TextBox.text, vbCrLf)

・エラーメッセージ
 「文字列の長さは 1 文字でなければなりません。」


本当に Split が原因でしょうか。 その後に array() を扱っている箇所で例外が発生しているような気がしてなりません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ASP.NET初心者
常連さん
会議室デビュー日: 2005/01/07
投稿数: 30
投稿日時: 2008-03-24 17:10
じゃんぬねっと様、返信有難うございます。

ステップ実行で確認したので間違いないかと思います。
とりあえず、Splitの前にvbCrLfを別の文字列に置換し、
置換した文字列を指定してSplitしてみたところ、
エラーが発生しませんでした。

もっとよい方法がありそうでなりません。
引き続き皆様のご協力をお願い致します。
ASP.NET初心者
常連さん
会議室デビュー日: 2005/01/07
投稿数: 30
投稿日時: 2008-03-24 18:00
m.m.様 返信有難う御座います。
先ほどは、返信に気付きませんで失礼致しました。

動作確認していただき有難う御座いました。
大変お粗末なんですが、私が書込みしたコードが実際のコードと異なっていました。
m.m.様が確認していただいたように、Split関数にテキストボックスの値をそのまま指定した場合は、エラーが発生しないことを確認できました。
コードの違いとは、Splitする文字列に、テキストボックスの値を変数に入れたものを指定していました。
変数に入れただけで動きが変わってしまうものでしょうか?
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-26 11:09
興味があったのであれこれ試してみましたが、再現しませんでした。
(正しく動作するか、ビルドの時点でエラーになってしまう)

引用:

ASP.NET初心者さんの書き込み (2008-03-24 18:00) より:

m.m.様が確認していただいたように、Split関数にテキストボックスの値をそのまま指定した場合は、エラーが発生しないことを確認できました。
コードの違いとは、Splitする文字列に、テキストボックスの値を変数に入れたものを指定していました。


このあたりを具体的なコードで示してもらうことは可能でしょうか。
VisualStudioのバージョンや、WindowsかWebかも教えていただけるとありがたいです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-26 11:48
私も再現しませんでした。

ここまでくると 「不具合が再現できるコード」 と 「不具合が再現できないコード」 の 2 つをこちらに晒して頂いた方が話が早いです。

先に Split 以外のところでの例外なのではないかと書かせて頂きましたが、その理由は Text プロパティだろうと変数だろうと同じ String 型であるからです。 ただのビルド漏れ、別の箇所の例外なのではないかと未だに思っています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ASP.NET初心者
常連さん
会議室デビュー日: 2005/01/07
投稿数: 30
投稿日時: 2008-03-27 17:26
rain様、じゃんぬねっと様、返信有難う御座います。

皆様より再現しないと多数の意見をいただきましたので、
私も再度、実行してみました。
すると当初出ていたエラーが出ませんでした・・・
あれから変更を加えており、エラーが発生した時と同じソースではないので
なんとも言えませんが、どこかでエラーの原因が解消されているようです。

とても???ですが、同じ現象が発生したらまた報告させていただきます。
お騒がせして申し訳御座いませんでした。
ご協力くださった皆様、本当に有難う御座いました。
1

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