- さくら
- 常連さん
- 会議室デビュー日: 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
ちなみに先頭のループは、末尾が改行コードの場合は取り除く処理です。
この辺りは仕様によるのかな?
|