エラー処理

タグの編集
投稿者 rs000008  () 投稿日時 2008/8/1 08:24:00
全て表示
投稿者 るしぇ  () 投稿日時 2008/8/5 23:38:00
余談ですが、一見空白の行にスペース(半角と全角の2種類ある)が 
入力されていることも多く、一般にはその対策も行います。 
String.Replace でも出来ますが、String.Trim メソッドも使えます。
投稿者 rs000008  () 投稿日時 2008/8/6 05:52:00
るしぇさん 
アドバイスありがとうございます。 
 
もし文字列の最初の部分に改行があれば、 
エラー表示するようにしようと思います。 
 
        Dim crlf As String 
        crlf = Chr(13) & Chr(10) 
 
        If value.StartsWith("crlf") = True Then 
            Return "空白行があります。削除してください。" 
        End If 
 
のようにしてみましたが、"/で区切られていません。"とのエラー表示が出てしまいます。 
どのようにすればいいでしょうか? 
すみませんが、教えていただけたらと思います。
投稿者 うたひこ  () 投稿日時 2008/8/6 06:24:00
>>13 
こんにちは。 
途中参加で話の流れが読めていませんが、 
気になった点があったので失礼します。 
 
>Dim crlf As String  
>crlf = Chr(13) & Chr(10)  
 
ここは定数の方がいいと思います。 
const crlf As String = Chr(13) & Chr(10)  
 
.netFrameWorkで 
定数vbcrlfとしても定義されています。 
 
>If value.StartsWith("crlf") = True Then  
>Return "空白行があります。削除してください。"  
>End If 
 
このコードでは変数crlfでなく 
"crlf"という文字列を指定していることになります。 
 
value.StartsWith("crlf")ではなく 
value.StartsWith(crlf)じゃないでしょうか?
投稿者 rs000008  () 投稿日時 2008/8/6 07:44:00
うたひこさん 
アドバイスありがとうございます。 
下記のようにしてみましたが、同じでした。 
        Const crlf As String = Chr(13) & Chr(10) 
 
        If value.StartsWith(crlf) = True Then 
            Return "空白行があります。削除してください。" 
            Flg = True 
        End If 
 
 
Private Function ValidRow(ByVal value As String) As String 
のすぐ下にこのコードを入れています。
投稿者 うたひこ  () 投稿日時 2008/8/6 09:07:00
だとすると、 
>>13 
とは関係のない部分でエラーがでているのではないでしょうか? 
 
 
 
全体の見通しが立たないので、少なくとも僕には何もわかりません。 
 
いったん整理して、現状のソースコードを全文掲載してみてはいかがでしょうか? 
 
 
 
(Returnの後に何か書いても実行されないんじゃなかったかしら?)
投稿者 rs000008  () 投稿日時 2008/8/6 11:13:00
うたひこさん 
 
7番目と9番のコードが全体のコードです。 
 
このコードの 
''' <summary>戻り値はエラーメッセージ。エラーがないとき戻り値は空文字</summary>  
Private Function ValidRow(ByVal value As String) As String  
 
の下に 
Const crlf As String = Chr(13) & Chr(10)  
If value.StartsWith(crlf) = True Then  
Return "空白行があります。削除してください。"  
Flg = True  
End If  
を入れています。 
 
長いコードなので、もう一度全体のコードを載せる 
のはやめておきます。 
 
すみませんm(__)m
投稿者 るしぇ  () 投稿日時 2008/8/6 18:55:00
発想が逆。  
目の前にコードがあって、動いていて、(期待通りでないものの)結果が出ているん 
ですよね?それは目の前に答えがあるということです。それを確認しないので 
あれば話になりません。 
 
デバッグしてください。  
1行1行実行して、変数にどんな値が入っているか全て確認してください。  
単純な If 文の判定なのですから、変数にどんな値が入っているか確認する 
だけではないですか。 
 
>のようにしてみましたが、"/で区切られていません。"とのエラー表示が出てしまいます。  
その条件が満たされているから、そのように処理されるのです。  
目の前の答えを確認してください。 
 
デバッグ依頼はスルーです。
投稿者 るしぇ  () 投稿日時 2008/8/6 19:06:00
Chr の反対の機能を持つ関数は Asc です。 
これで1文字1文字変換すれば、表示されない文字を含めて、 
どんな文字が存在するか確認できます。
投稿者 るしぇ  () 投稿日時 2008/8/6 19:37:00
。。。というか改行の判断って書いてあったので改行コードの判断かと 
思ったけど、ソース見ると 
[TextBoxBase.Lines プロパティ] 
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.textboxbase.lines(VS.80).aspx 
>解説 
>テキストに改行文字が表示されると、改行文字の後ろに続くテキストが配列内の新しい要素に追加 
これを使ってる時点で、改行コードで分割してるね。 
 
じゃあ、エラーチェック関数の引数 value には何が入ってきてるか? 
出力して確認してみてください。 
多分、長さ0の文字列でしょう。
投稿者 rs000008  () 投稿日時 2008/8/6 23:06:00
るしぇさん 
 
いつもアドバイスありがとうございます。 
改行ではなく、空白行の有無で処理する事にして 
みました。 
 
'空白行かどうか 
        If value = String.Empty Then 
            Return "空白行があります。削除してください。" 
 
            '/で区切られているか  
        ElseIf value.Contains("/") = False Then 
            Return "/で区切られていません。" 
            Flg = True 
        End If 
 
みなさん、ありがとうございました!!