[HOME]  [リストへもどる]
一括表示

  置換のアルゴリズム - 文太 07/01/25-00:20 No.2104
  ┣ Re: 置換のアルゴリズム - Konno 07/01/25-00:45 No.2106
  ┃┗ Re^2: 置換のアルゴリズム - 文太 07/01/25-01:03 No.2110
  ┗ Re: 置換のアルゴリズム - としき 07/01/25-01:03 No.2109
   ┗ Re^2: 置換のアルゴリズム - 文太 07/01/25-01:07 No.2111

(2104) 2104置換のアルゴリズム  投稿者:文太   2007/01/25(木) 00:20
   コメント数 2

置換のアルゴリズム

 怒涛というか、次から次へと質問ばっかりではしたなくて申し訳ありません。

 また、最近、Vzがエディタであることを忘れているかのような話ばかりです
いません(これは謝ることでもないか)。というか、文章作成をしないで、この
文字はまだラインバッファだ、あ、テキストバッファか、つまりまだメモリー上
であって、ということはあのあたりのセグメントで…、みたいに病的になってい
て、本来のプログラミングの道具としてのVzの本質に迫っているかのようでも
あり、でも僕的にはけっこう大きく間違っているような気がかなりしてるようで
もあり…。どうでもよい!

 とにかく、訳あって、ヌルと改行文字の相互置換をしたいな、と思いました。
どんなアルゴリズムがノーマルというか標準的でしょうか。
 現実的な問題としては、 たかだか千〜2千バイト程度なので、 どうやっても
「動くものが作れれば楽しいし」、大差ないのでしょうが、どんなものであって
もキーボードの上の指と頭が止まってしまうもので、ご相談させていただきたい
わけです。どこにも例題ないし、Vzはどんなにテキストがでかくても超速いし。
 ちょっとこれは、Vzのソースのここ、では辛すぎでしょう。

 いちおう目論見というか夢を書いておくと、テキスト・PS(サイズが調整で
きて、ヒストリーのバッファならどこでも)・ダミーバッファ(DB)を相互乗
り換えできたら、DBに存在意義が出るな、と思っているわけです。サンダーバ
ード2号計画。
 じつはダミーバッファ文字列をメニューに出すのは、その上そこに編集コマン
ドを入れようなどと思ったら、遠い遠い先のことになるような気が強くしたので、
ダミーバッファにテキストからデータが送れたらとりあえずおいしい、と思って
いるわけです。PS・DB相互転送なら置換は要らないのですが、でもそれはち
と現実的でない。保存の紙というか、ファイルが必要だろうと。EMS はそのため
のワークに使えば勉強した甲斐があるかな、と。下のようなレベルのことができ
ないくせに、けっこう大胆なことを言っておりますが。しかし、このアイディア
ってけっこう根本的というか、けっこうすごいと思ってます。1024  でひらめい
た! 自慢するなよ。


 別に慌ててません。時間がおありのときにでも、どうか。


;----改行をヌルに
LF	equ	0Ah
CR	equ	0Dh
				;サイズは測ってあるとする。
	push	??
	pop	ds		;セグメント設定はあと。たぶんEMS
	xor	si,si		;ポインタ
	mov	cx,"size"	;サイズが分かってるとする。decするカウンタ。
	mov	ax,CRLF

MAIN:	cmp word ptr [si],ax	;メインループ、前から舐めて改行に会ったら
	je	REPL		;置換ルーチンで置換。
	inc	si		;改行でないならそのまま。
	dec	cx
	loop	MAIN		;サイズ(カウンタ)減らして、0で終了。
	jmp	FIN

REPL:	????			;★置換ルーチン

	jmp	MAIN

FIN:
	ret

 ★のところなのですが、愚直にやると、2バイト→1バイトでもあり、ポイン
タで書き直したら、その後ろ全部ごそっと前に動かさなければですよね。すると
サイズが変わる。厳密にサイズ情報を管理しながらやるしかないのでしょうか。
最後がヌル2つのヒストリーバッファでもないので、「こんな場面で終了」とい
うわけにもいかないな、と。うーん、すごく大変ですよねぇ、これ。うーん。こ
の愚直さがアセンブラの極意? もうちょっと何とかなるのではないかと。m(__)m

      - No.2104 -    このTreeへ           [リストへもどる] pre

(2104) 2106Re: 置換のアルゴリズム  投稿者: Konno   2007/01/25(木) 00:45
    2104 番 文太 さんへのコメント    コメント数 1

>  とにかく、訳あって、ヌルと改行文字の相互置換をしたいな、と思いました。
> どんなアルゴリズムがノーマルというか標準的でしょうか。

これは、Vzの標準の置き換えでは駄目なんですか?
改行は、\n だし、置き換え窓で、^P  @  と打てばヌル文字に置き換えられますよね。

#こんな話ではなさそうだなぁ(^^;
      - No.2106 -    このTreeへ    コメント元:2104 へ [リストへもどる] pre

(2104) 2110Re^2: 置換のアルゴリズム  投稿者:文太   2007/01/25(木) 01:03
    2106 番 Konno さんへのコメント

金野さん

> これは、Vzの標準の置き換えでは駄目なんですか?
> 改行は、\n だし、置き換え窓で、^P  @  と打てばヌル文字に置き換えられますよね。
 うーん、#56 ?
 異セグとEMSがらみなんですよ。一回ファイルにダンプか? これが楽かも。

      - No.2110 -    このTreeへ    コメント元:2106 へ [リストへもどる] pre

(2104) 2109Re: 置換のアルゴリズム  投稿者:としき   2007/01/25(木) 01:03
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2104 番 文太 さんへのコメント    コメント数 1

>  ★のところなのですが、愚直にやると、2バイト→1バイトでもあり、ポイン
> タで書き直したら、その後ろ全部ごそっと前に動かさなければですよね。すると
> サイズが変わる。厳密にサイズ情報を管理しながらやるしかないのでしょうか。

そうですね。
データサイズがある程度小さいのなら、愚直にやるのが単純だと思います。
数百KBとか数MBとかを相手にするのなら、データ構造から見直すべきだと
アドバイスしたいところですが。

よくあるのは、入力側と出力側を別領域にして、基本はコピー、という方法かな。
特定の文字の時だけ、別の文字をコピーする、というやつね。

      - No.2109 -    このTreeへ    コメント元:2104 へ [リストへもどる] pre

(2104) 2111Re^2: 置換のアルゴリズム  投稿者:文太   2007/01/25(木) 01:07
    2109 番 としき さんへのコメント

としきさん

> データサイズがある程度小さいのなら、愚直にやるのが単純だと思います。

 そう?!

> よくあるのは、入力側と出力側を別領域にして、基本はコピー、という方法かな。
> 特定の文字の時だけ、別の文字をコピーする、というやつね。

 なるほど! これか?
 まったく別の挫折したニーモニックで、同じことは体験してました。別領域に
すれば、もっと単純じゃねーか、と。でも、こっちにもってこれなかった。もっ
てきたからといって、出来るわけではないのだけど。

 m(__)m

      - No.2111 -    このTreeへ    コメント元:2109 へ [リストへもどる] pre