- PR -

rdoResultsetで取得したレコードに含まれる改行

1
投稿者投稿内容
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 2006-06-02 15:15
VB6+SQLServer2000のシステムのメンテナンスをしています。

TableA
 Code VARCHAR(2)
 Name VARCHAR(3)
 Contents VARCHAR(2000)
というテーブルがあって、Contentsには改行つきの文字列が入っています。
(Multiline=TrueのTextBoxの中身をそのまま登録しているようです)

ここで、TableAに登録されたレコードのContentsが何行なのかを知りたいのです。
TableAをSelectしてrdoResultsetに格納してみたものの、カレントレコードの
Contentsが何行あるのかの調べ方がわからず、行き詰っています。
rdoColumns("Contents")をウォッチで見てみても改行抜きの文字列が入って
しまっているようですし、プロパティにもそれらしいものは見当たりませんでした。

どうしたら行数をとれるでしょうか?
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-06-02 15:42
引用:

さくらさんの書き込み (2006-06-02 15:15) より:

どうしたら行数をとれるでしょうか?



よく理解できていないかもしれませんが、Contents は文字列なんですよね?

コード:
private function ContentsRecordCount(byval contents as string, byval recordSeparator as string) as long
    dim s as string: s = contents
    dim recordSeparatorLength as integer: recordSeparatorLength = len(recordSeparator)
    do while (right$(s, recordSeparatorLength) = recordSeparator)
        s = left$(s, len(s) - recordSeparatorLength)
    loop
    ContentsRecordCount = split(contents, recordSeparator)
end function


こんな感じでしょうか?(^▽^;)
書きなぐっただけなので動作保障はありません・・・w
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 2006-06-03 14:06
R・田中一郎さん、コメントどうもありがとうございます。
頂いたご意見を元に考えてみました。
結局、ContentsをMidで1文字ずつとって
コード:
private function GetLineCnt(byval target as string) as integer
 dim cnt as integer
 dim ret_cnt as integer
 for cnt = 0 to len(target)
  if mid(target, cnt, 1) = vbCr) then
   ret_cnt = ret_cnt + 1
  end if
 next cnt
 GetLineCnt = ret_cnt
end function


という感じにしてみました。
これでいけそうです。どうもありがとうございました。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-06-03 14:33
NAL-6295です。

ループで回さなくても
コード:


Private Function GetLineCount(ByVal value As String, ByVal separator As String) As Integer
    Dim lineValues() As String
    lineValues = Split(value, separator)
    
    GetLineCount = UBound(lineValues) - LBound(lineValues) + 1
End Function




でとりあえず、出来ますよ。

#久しぶりにVB6をさわった・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-03 14:40
引用:

さくらさんの書き込み (2006-06-03 14:06) より:

結局、ContentsをMidで1文字ずつとって


Split で返された配列の要素数を返すか、InStr を使っての検索という方法もあります。
改行コードという点で、精神衛生上ちょっとひっかかりますが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-06-03 15:09
コード:
private function ContentsRecordCount(byval contents as string, byval recordSeparator as string) as long
    dim s as string: s = contents
    dim recordSeparatorLength as integer: recordSeparatorLength = len(recordSeparator)
    do while (right$(s, recordSeparatorLength) = recordSeparator)
        s = left$(s, len(s) - recordSeparatorLength)
    loop
    ContentsRecordCount = split(contents, recordSeparator)
end function


そういえば、最後に配列を返してますね(^□^;)
コード:
private function ContentsRecordCount(byval contents as string, byval recordSeparator as string) as long
    dim s as string: s = contents
    dim recordSeparatorLength as integer: recordSeparatorLength = len(recordSeparator)
    do while (right$(s, recordSeparatorLength) = recordSeparator)
        s = left$(s, len(s) - recordSeparatorLength)
    loop
    '以下の2行訂正・・・
    dim array() as string: array = split(contents, recordSeparator)
    ContentsRecordCount = ubound(array) - lbound(array) + 1
end function


NAL-6295さんのコードを読んで気づいた・・・w
ちなみに先頭のループは、末尾が改行コードの場合は取り除く処理です。
この辺りは仕様によるのかな?
1

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