HSP教室 入門編

その20 文字列の置換

	;		wordrep.as
	title "wordrep"
	mes  "wordrep 98/7/10"
	;[ テキストのバッファを確保 ]
	alloc buf1,32000	;元のテキスト
	alloc buf2,32000	;変更後のテキスト
	alloc a1,32000		;テンポラリ
	alloc dl,1000		;ファイルリスト
	str buf1
	str buf2
	str a1
	buf2=""
	;[ ディレクトリ選択 ]
	dirlist dl,"*.*"	
; カレントディレクトリのファイル一覧
	pos 100,100
	a=0:objsize 120,24
	combox a,120,dl
	objsize 80,40,16
	button "ok",*start
	stop
	;[ テキスト読み込み ]
*start
	notesel dl
	noteget rname,a
	mes rname		;処理ファイル名の表示
*convert
	bload rname,buf1	; テキストファイル読み込み
	;[ コンバート開始 ]
	strlen buf1len,buf1
	sw="test"
	nw="テスト"
	strlen swl,sw
	st=0	;search top
	;[ メインループ ]
*mainlp
	instr c,buf1,sw,st	
;文字列buf1を検索し、swを探す、答えはcに入る
	if c=-1:goto *txtcnv2	;マッチしないので終わりの場合
	strmid a1,buf1,st,c 	;a1にヒット前をコピー
	buf2=buf2+a1
	buf2=buf2+nw
	st=st+c+swl		;新しいポインタをセット
	goto *mainlp
	;[ 終了処理 ]
*txtcnv2
	strmid a1,buf1,st,buf1len-st
;最後のhit+1から文字列の最後まで
	buf2=buf2+a1
	;[ セーブ ]
*txtcnv3
	strlen buf2len,buf2
	bsave "out.txt",buf2,buf2len
	end

今回は文字列の置換です。
サンプルでは”test”を”テスト”という文字に置き換えます。
テキストファイルを作って実験してください。
結果は”out.txt”というファイルに出力されます。
今回の置換では、”元のテキスト”と”変換後のテキスト”と”作業中のテキスト”の3つについて領域を確保します。
検索命令instrで、目的のワードをサーチします。
目的のワードを見つけたら、ワードの直前までを”変換後のテキスト”にコピーし、次に”テスト”ということばをコピーします。
目的のワードが見つからなかったときは、残りのテキスト全てを”変換後のテキスト”にコピーします。

今回のサンプルには、複数の置換を行う”wordrepm.as”も同梱しておきました。

wordrep.asをダウンロード。


目次に戻る