DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列の検査について

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

お世話になります。

VBを初心者です。

文字列中のあるカラムから長さを指定して、文字列を検査する
ということはできないのでしょうか?
文字列全体からの検査はできるようですが・・・

コボルでいうところの、"IF YYMM(1:2) = "08" 〜 "
のような記述はできないのでしょうか?
■No22821に返信(KYOUさんの記事)
> コボルでいうところの、"IF YYMM(1:2) = "08" 〜 "
> のような記述はできないのでしょうか?

if YYMM.SubString(0,1) = "08" then

Stringクラスによる文字列操作|VB6との違い
http://shinshu.fm/MHz/88.44/archives/0000026611.html
■No22823に返信(やじゅさんの記事)
> ■No22821に返信(KYOUさんの記事)
>>コボルでいうところの、"IF YYMM(1:2) = "08" 〜 "
>>のような記述はできないのでしょうか?
>
> if YYMM.SubString(0,1) = "08" then
>

やじゅさん回答ありがとうございます。

Datasetの配列に対して行いたいのですが、
配列に対してカラム指定ができないのか、エラーになってしまいます。(下記エラー)
一旦別の変数に入れて判断するしかないのでしょうか?


具体的には以下のようにコーディングしています。
---------------------------------------------------
Dim dr As DataRow
Dim strTemp() As String 'csvレコード
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

'フィールド毎にcsvレコードを分解
Select Case intCnt
Case 0
dr(2) = strTemp(intCnt)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

If (Me.dr.Item(2) <> "R ") Then
MessageBox.Show(Me.dr.Item(2), "項目内容'R'か'M'か'D'か'CM'でない")
End If
---------------------------------------------------

(エラー内容)
---------------------------------------------------
エラー 1 縮小変換しないで呼び出される、アクセス可能な 'Item' がないため、オーバーロードの解決に失敗しました:
'Public ReadOnly Default Property Item(columnName As String, version As System.Data.DataRowVersion) As Object': パラメータ 'columnName' と一致する引数は 'Integer' から 'String' へ縮小変換します。
'Public ReadOnly Default Property Item(columnName As String, version As System.Data.DataRowVersion) As Object': パラメータ 'version' と一致する引数は 'Integer' から 'System.Data.DataRowVersion' へ縮小変換します。
'Public ReadOnly Default Property Item(columnIndex As Integer, version As System.Data.DataRowVersion) As Object': パラメータ 'version' と一致する引数は 'Integer' から 'System.Data.DataRowVersion' へ縮小変換します。
---------------------------------------------------
■No22825に返信(KYOUさんの記事)
> If (Me.dr.Item(2) <> "R ") Then

If (Me.dr(2)).ToString <> "R ") Then
余分な括弧があったので修正
If (Me.dr(2).ToString <> "R ") Then
やじゅさんありがとうございました。
正しく検査されるようになりました。

ふと思ったのですが、最初に書いていたのは、

If (Me.dr.Item(2) <> "R ") Then
DataRow(行)の2番目のアイテムが"R "なら〜

ですが、

教えていただいた、
If (Me.dr(2).ToString <> "R ") Then
DataRow(行)の文字列が"R "なら〜

”2番目のアイテム”というキーワードが消えていないでしょうか?
解決済み!
> If (Me.dr.Item(2) <> "R ") Then
> DataRow(行)の2番目のアイテムが"R "なら〜
:略
> If (Me.dr(2).ToString <> "R ") Then
> DataRow(行)の文字列が"R "なら〜
>
> ”2番目のアイテム”というキーワードが消えていないでしょうか?

前者のIf文と後者のIf文はまったく同じ意味になります。
Me.dr(2)はMe.dr.Item(2)の省略形です。
これはVB.NETのDefaultプロパティの構文によるものです。

DataRow.Item(Int32)プロパティのヘルプ
http://msdn.microsoft.com/ja-jp/library/kwfe1t7z(VS.80).aspx

上記のヘルプのItemプロパティの宣言で「Default Property Item」とDefaultが
付与されて宣言されています。ItemプロパティはDefaultプロパティとして
定義されているので、省略して表記することができます。
解決済み!
■No22829に返信(よねKENさんの記事)
>>If (Me.dr.Item(2) <> "R ") Then
>>DataRow(行)の2番目のアイテムが"R "なら〜
> :略
>>If (Me.dr(2).ToString <> "R ") Then
>>DataRow(行)の文字列が"R "なら〜
>>
>>”2番目のアイテム”というキーワードが消えていないでしょうか?
>
> 前者のIf文と後者のIf文はまったく同じ意味になります。
> Me.dr(2)はMe.dr.Item(2)の省略形です。
> これはVB.NETのDefaultプロパティの構文によるものです。
>
よねKENさん、詳しい御説明ありがとうございます。

省略して表記できるんですね。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板