- PR -

文字列の変更チェック

1
投稿者投稿内容
mi_yan
会議室デビュー日: 2003/01/30
投稿数: 8
投稿日時: 2004-02-13 09:14
こんにちは。
困り果てて皆さんにお聞きしようと思って投稿させていただきました。

現在、ASP.NETでアプリケーションを構築しているのですが、困った仕様があって実現方法がわからずに悩みっぱなしです・・・・

仕様:ある文字列が変更された場合、変更された部分文字列だけが色替えされる。
例:
今日はいい天気でした。明日も晴れるかな。(元の文字列)

今日もいい天気です。明日も晴れるといいな。(変更後)
色が変わる部分:「も」「す」「といいな」

このような事を実現するクラスや機能は.NET FrameWorkに無いでしょうか??
これはどのように実現できるのでしょうか??

皆様のお知恵を拝借し、ご教授いただければと存じます。
どうぞよろしくお願いいたします。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-02-13 10:09
引用:

mi_yanさんの書き込み (2004-02-13 09:14) より:
仕様:ある文字列が変更された場合、変更された部分文字列だけが色替えされる。



これは仕様というより単なる要求(要件)ですね。
どういう手段で文字列を変更し、どのタイミングで、
どこに色を変えた文字列を表示するのでしょうか?

例えば、

元の文章が表示されている個所があり、
その下にでもテキストボックスがある。
テキストボックスに変更後の文字列を入力してもらい、
ボタンのClickなどで確定させる。
結果の色分けされた文字列の表示は次の画面(同じaspx)でテキストボックスの下に表示する。

というシチュエーションなら、
・どういう手段→ユーザに表示されている文字列の変更後の文字列を全部入力してもらう
・どのタイミング→ボタンのClickで画面遷移したとき
・どこに表示→次の画面(同aspx)でテキストボックスの下

ということになるでしょうけれど、
この部分にもいろんな仕様が考えられるので、画面のデザイン(ユーザインタフェース)や
画面遷移の仕様もはっきりさせましょう。

作ろうとするアプリの目的から考えた場合に、
機能の実装方法を検討する上で必須の仕様があると思いますが、
その内容によってはWebアプリでは実現できない、
代替手段を考えないといけない場合もありえますから。
(あるいは仕様の方を再検討し、Webアプリで実現できる形に変更する)

#画面の構成等、遷移が質問の焦点ではなく、
#あくまで「文字列のどこが変更されたか?を知る方法」であれば、
#会議室でのやり取りをする上では、この部分の仕様はとりあえずどうでもいいのですけどね。

引用:

例:
今日はいい天気でした。明日も晴れるかな。(元の文字列)

今日もいい天気です。明日も晴れるといいな。(変更後)
色が変わる部分:「も」「す」「といいな」



「今日もいい天気です。」がもし「今日もいい天気でし。」だったら、
「た」が削除されたということが表現されませんがそれはよいのでしょうか?
また、
変更後の文字列が
・「今日はとてもいい天気でした。明日も晴れるかな。」(「とても」が増えただけ)
・「明日も晴れるかな。今日はいい天気でした。」(「最初の文と後の文が逆転)
とか、それぞれの状況でどういう風に変化したと判断し、その結果をどのように表現するのでしょう?

引用:

このような事を実現するクラスや機能は.NET FrameWorkに無いでしょうか??



「このような事」というのはどの部分を指していますか?
変更点を抽出するようなコンポーネントですか?
それとも色分けの手段ですか?それ以外ですか?

変更点を抽出してくれるようなものは.NET Frameworkにはないので、
Webでそういうコンポーネントが公開されていないか、
市販のコンポーネントがないか探し、なければ(あるいはあっても仕様に合わなければ)
自作することになるでしょう。

引用:

これはどのように実現できるのでしょうか??



まずは「変更点」をきちんと定義するところからじゃないでしょうか。
仕様が決まらなければ、実装の方式も決められませんから。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2004-02-13 10:15 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-13 10:15
あんまりスマートじゃないのですがテーブル(サーバーコントロール)に出力する方法
を考えてみましたので参考にして下さい

コード:
// テーブルに任意の文字色のラベルを追加
private void Output( System.Web.UI.HtmlControls.HtmlTable table
			, string text
			, System.Drawing.Color color )
{
	// ラベルを作成
	System.Web.UI.WebControls.Label label 
		= new System.Web.UI.WebControls.Label();

	// ラベルに文字色と文字列を設定
	label.ForeColor =  color;
	label.Text = text;
	
	// テーブルの最初のセルにラベルを追加
	table.Rows[0].Cells[0].Controls.Add( label );
}


protected System.Web.UI.HtmlControls.HtmlTable Table1;
private void Page_Load(object sender, System.EventArgs e)
{
	// 黒色・赤色・黒色で表示
	Output( Table1, "ああああ", System.Drawing.Color.Black );
	Output( Table1, "いいいい", System.Drawing.Color.Red );
	Output( Table1, "うううう", System.Drawing.Color.Black );
}

mi_yan
会議室デビュー日: 2003/01/30
投稿数: 8
投稿日時: 2004-02-13 11:10
ゆうじゅんさん、よねさん、早速の返信ありがとうございます。

かなり言葉足らずだったようで、申し訳ございません。

現状構築中のシステムは、以前稼働していたシステムのリプレイス&リニューアルという
位置付けです。

以前のシステムの仕様は、ソースや仕様書、動くシステム自体が残っていない為に部分的にしか分かりません。
ですが、以前のシステムでご質問させていただいた機能が実装されていたようです。

その機能は
<<登録時>>
1.利用者はある情報をHTMLのテキストエリアから文字列情報として入力する。
2.システムは文字列情報をDBに格納(登録)する。
3.管理者は登録された文字列情報を承認する。
<<編集時>>
4.利用者は登録済みの文字列情報を編集する。
5.管理者は編集された文字列情報を承認する。
という機能でして、この4から5の時に実現されていたようです。
ですから、表示時に色を変えるのは5の時です。

*4→5への画面遷移はありません。


>「今日もいい天気です。」がもし「今日もいい天気でし。」だったら、
>「た」が削除されたということが表現されませんがそれはよいのでしょうか?

そうですね。そこはそれで良いと思います。


>・「今日はとてもいい天気でした。明日も晴れるかな。」(「とても」が増えただけ)
この場合は「とても」が色替え対象文字列となります。

>・「明日も晴れるかな。今日はいい天気でした。」(「最初の文と後の文が逆転)
この場合は変更なしとみなす事でOKかと思います。

>>このような事を実現するクラスや機能は.NET FrameWorkに無いでしょうか??

>「このような事」というのはどの部分を指していますか?
>変更点を抽出するようなコンポーネントですか?
>それとも色分けの手段ですか?それ以外ですか?

「このような事」とは変更点を抽出するというコンポーネントorクラスが提供するメソッドです。

>変更点を抽出してくれるようなものは.NET Frameworkにはないので、
>Webでそういうコンポーネントが公開されていないか、
>市販のコンポーネントがないか探し、なければ(あるいはあっても仕様に合わなければ)
>自作することになるでしょう。

やはり自作という事になりますよね・・・

>まずは「変更点」をきちんと定義するところからじゃないでしょうか。
>仕様が決まらなければ、実装の方式も決められませんから。

確かに仰る通りですね。何をもって変更とみなすか。ですね。
その点はユーザーにも話してみたいと思います。

でも、前回はどうやって実現していたんでしょう・・・
弊社で構築してないので、、、
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-13 11:22
引用:

mi_yanさんの書き込み (2004-02-13 11:10) より:

<<登録時>>
1.利用者はある情報をHTMLのテキストエリアから文字列情報として入力する。
2.システムは文字列情報をDBに格納(登録)する。
3.管理者は登録された文字列情報を承認する。
<<編集時>>
4.利用者は登録済みの文字列情報を編集する。
5.管理者は編集された文字列情報を承認する。
という機能でして、この4から5の時に実現されていたようです。
ですから、表示時に色を変えるのは5の時です。
*4→5への画面遷移はありません。


 揚げ足取りなツッコミで恐縮ですが、4→5で画面遷移がないなら、利用者は管理者を自分の席に連れてきて「承認してくれ」と言っていたのですか?!
 遷移と言うより、「別個の機能」でしょうね。


引用:

>「今日もいい天気です。」がもし「今日もいい天気でし。」だったら、
>「た」が削除されたということが表現されませんがそれはよいのでしょうか?

そうですね。そこはそれで良いと思います。


>・「今日はとてもいい天気でした。明日も晴れるかな。」(「とても」が増えただけ)
この場合は「とても」が色替え対象文字列となります。

>・「明日も晴れるかな。今日はいい天気でした。」(「最初の文と後の文が逆転)
この場合は変更なしとみなす事でOKかと思います。


 まぁ、変更点の検索は、diffのアルゴリズムの応用で何とかなると思います。1文字を「1行」と読み替えれば、ほぼそのままシフトできると思います。が、最後の「変更なしと見なす」は、まぁ、無理かなぁ・・・。あと、全く別の文章に変わったときも、どうなるんでしょうねぇ???
mi_yan
会議室デビュー日: 2003/01/30
投稿数: 8
投稿日時: 2004-02-13 11:45
Jittaさん返信ありがとうございます。

> 揚げ足取りなツッコミで恐縮ですが、4→5で画面遷移がないなら、利用者は管理者を自分
>の席に連れてきて「承認してくれ」と言っていたのですか?!
>遷移と言うより、「別個の機能」でしょうね。

すみません。そういう意味です・・・

> まぁ、変更点の検索は、diffのアルゴリズムの応用で何とかなると思います。1文字を
>「1行」と読み替えれば、ほぼそのままシフトできると思います。が、最後の「変更なしと
>見なす」は、まぁ、無理かなぁ・・・。あと、全く別の文章に変わったときも、どうなるん
>でしょうねぇ???

全く別の文章になったら全文色替え対象ですね。
diffのアルゴリズムを自作するという事になりますね?.NETではそんなクラスは無いという
事ですね。。。。

恐縮ですが、何か参項になる文章やWEB等がありますでしょうか?
ご教授いただければ幸いです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-13 12:22
引用:

mi_yanさんの書き込み (2004-02-13 11:45) より:

恐縮ですが、何か参項になる文章やWEB等がありますでしょうか?
ご教授いただければ幸いです。


とりあえず、googleで'diff アルゴリズム'を検索しました。

http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=%B2%B3
http://www2.airnet.ne.jp/sardine/docs/NOTE-gdiff-19970901.html
http://hpcgi1.nifty.com/~k_ogata/diary/diary.rb?section=note&name=diff
1

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