C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 検索結果を出す方法(ASP)


(過去ログ 23 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■9914 / inTopicNo.1)  検索結果を出す方法(ASP)
  
□投稿者/ komaru (48回)-(2007/11/07(Wed) 10:45:22)

分類:[ASP.NET (VB)] 

ASP初心者です。
質問のなかに何か問題発言があったら、お許しください。

ページ内検索文字と一致する文字をすべて変色する。
検索文字の変更:英文字(小文字⇔大文字⇔半角⇔全角)
        日本語(ひらがな⇔カタガナ)
以下のように書いてあるんですが、一個目の結果はうまく表示しますが、
2個目の処理を追加すると表示できなくなっています。

ASP初心者ですので、ご診断をお願いします。

strWk = objTS.ReadALL

Do While strStart<>0
strStart = InStr(strMoji, strWk, "<")
If strMoji<>1 and strStart<>0 then
strWkA = Replace(Mid(strWk,strMoji+1,strStart-strEnd-1),strSearchA,"<B><font color='Lime'>" & strSearchA & "</font></B>")
'Response.write(strWkA)
strStart = InStr(strMoji, strWkA, "<")
strWkB = Replace(Mid(strWkA,strMoji+1,strStart-strEnd-1),strSearchB,"<B><font color='Purple'>" & strSearchB & "</font></B>")
'Response.write(strWkB)
strStart = InStr(strMoji, strWkB, "<")
strWkC = Replace(Mid(strWkB,strMoji+1,strStart-strEnd-1),strSearchC,"<B><font color='Teal'>" & strSearchC & "</font></B>")
strStart = InStr(strMoji, strWkC, "<")
Response.write(Replace(Mid(strWkC,strMoji+1,strStart-strEnd-1),strSearchD,"<B><font color='RED'>" & strSearchD & "</font></B>"))
End if
IF strStart<>0 Then
strEnd = InStr(strStart, strWkC, ">")
Response.write(Mid(strWkC,strStart,strEnd-strStart+1))
End if
strMoji = strEnd

Loop
引用返信 編集キー/
■9986 / inTopicNo.2)  Re[1]: 検索結果を出す方法(ASP)
□投稿者/ カンタービレ (24回)-(2007/11/08(Thu) 16:20:40)
No9914 (komaru さん) に返信
>
> ページ内検索文字と一致する文字をすべて変色する。
> 検索文字の変更:英文字(小文字⇔大文字⇔半角⇔全角)
>         日本語(ひらがな⇔カタガナ)
> 以下のように書いてあるんですが、一個目の結果はうまく表示しますが、
> 2個目の処理を追加すると表示できなくなっています。

ソース、途中を抜き出しているようですが診断の前の段階だと思いマス。
変数の初期状態、型も分からず推測になっちゃうし適切なコメントをもらえないと思いマスよ。
アルゴリズムも整理してから作っているというより分かる範囲を作っては動かし
つまずいた、というイメージでしょうか。

この課題(?)、コード上では固定で4つのキーワード(上の課題内容からは見当たりません。)で
それぞれ色を変えたHTMLタグを挿入しようとしているようなイメージを受けますが
4つってどこから出てきたのでしょう?
検索文字の変更と書かれていますが、どっちからどっちに変換するかも分かりません。
タグじゃないところに「<」があったらどうするとか、検索文字自体が「div」とか
タグに使われるような文字列だったらとかの問題が出てきます。

課題の通りのものを作ろうとなると、もう少し整理した方がいいかも知れませんね。
@検索文字列は空白(?)区切りで可変で下記判定を行う。
AHTML上のタグ以外の文字から検索文字に該当するか判定する。(全角・半角等区別なし)
B検索文字にヒットした箇所は該当文字の前後にヒットタグを挿入する。
Cヒットタグは検索文字列の数だけ別の色を用意し適用させる。

こんな感じででしょうか。

検索の際の条件判定ではSystem.Text.RegularExpressions.Regex.IsMatchなどよいかもデス。
タグ以外を拾うにはHtmlDocumentクラスを使い、最下層のHtmlElementまで掘り下げていく
感じになりそうデス。
で、編集の際はinnerHtmlを操作という感じで編集処理を行い、
これらの処理を検索文字数だけ繰り返すというところでしょうか。
で最終的にResponseとして編集されたHtmlDocumentを返すという形が考えられマス。

当然、検索文字列が複数とする場合に検索文字列同士も同一ではないか、他の文字列に
含まれていないかなど、チェックすべきところは多数出てきマス。
検索文字例:「お兄ちゃん」「兄」「ちゃんこ」
HTML内文字:「今日はお兄ちゃんコメントしないの?」
の3つだったらどう色を付けるか、デス。

突き詰めていくと大変デスね。。。どこまでやってOKとするかが仕様の決めですので
もう少し整理して、その上で分からない点を質問にした方が回答も早くつくと思いマス。
引用返信 編集キー/
■9995 / inTopicNo.3)  Re[1]: 検索結果を出す方法(ASP)
□投稿者/ Jitta on the way (33回)-(2007/11/08(Thu) 19:24:56)
No9914 (komaru さん) に返信
> ASP初心者です。
> 質問のなかに何か問題発言があったら、お許しください。
>
> ページ内検索文字と一致する文字をすべて変色する。
> 検索文字の変更:英文字(小文字⇔大文字⇔半角⇔全角)
>         日本語(ひらがな⇔カタガナ)
> 以下のように書いてあるんですが、一個目の結果はうまく表示しますが、
> 2個目の処理を追加すると表示できなくなっています。
>
> ASP初心者ですので、ご診断をお願いします。
>
> strWk = objTS.ReadALL
>
> Do While strStart<>0
> strStart = InStr(strMoji, strWk, "<")
> If strMoji<>1 and strStart<>0 then
> strWkA = Replace(Mid(strWk,strMoji+1,strStart-strEnd-1),strSearchA,"<B><font color='Lime'>" & strSearchA & "</font></B>")
> 'Response.write(strWkA)
> strStart = InStr(strMoji, strWkA, "<")
> strWkB = Replace(Mid(strWkA,strMoji+1,strStart-strEnd-1),strSearchB,"<B><font color='Purple'>" & strSearchB & "</font></B>")
> 'Response.write(strWkB)
> strStart = InStr(strMoji, strWkB, "<")
> strWkC = Replace(Mid(strWkB,strMoji+1,strStart-strEnd-1),strSearchC,"<B><font color='Teal'>" & strSearchC & "</font></B>")
> strStart = InStr(strMoji, strWkC, "<")
> Response.write(Replace(Mid(strWkC,strMoji+1,strStart-strEnd-1),strSearchD,"<B><font color='RED'>" & strSearchD & "</font></B>"))
> End if
> IF strStart<>0 Then
> strEnd = InStr(strStart, strWkC, ">")
> Response.write(Mid(strWkC,strStart,strEnd-strStart+1))
> End if
> strMoji = strEnd
>
> Loop

以下のようにやっている一行一行について、書いた意図を書いてください。

うまくいかないのは、意図と実際がズレているため、ということが多いです
書いた意図は、掲示板を見ている人にはわかりません
そこの説明を省いたために、右往左往し口口口
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -