というほどのものではありませんが。 でも久しぶりに真剣に考えました。難しいことはしていません。ちょっとした 分岐の入った、マニュアル操作再現のエディタのマクロらしい、マクロです。 アルゴリズム(仕様)に悩んだ、悩んだ。製作に総計6時間はかかっている。 2週間ぐらい考えていました。疲れ切った頭で。 \x ^aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)zzz$ のようなタグ付き置換用、検索文字列の上で実行してみてください。 次行にタグ番号を整理した「置換文字列」が現れます。 シフトで置換用にPSに両文字列を入れてくれます。 あ、ふつうのファイルの上で実行ね。編集モードオンリーのマクロです。 nifty初期のころにも、僕はこれを書いてましたね。 コマンドラインとかtext boxとかって、どうも緊張してしまいます。 ダミーファイルにとりあえず書き始めてしまうと、落ち着いて考えられます。 もし、「おい、こういう場合、バグるぜ」とかあったらお教えください。 あまり意地悪はなしです。正規表現のチェックとかはしていません。タグの 整合性もチェックしていません(カーニハン先生いわく「funny situationの ことを気にしすぎるな。仕様書〔document〕に最初から *bug欄 を作っておいて ユーザに注意喚起するもよろし」)。もっとも、僕のばあい、タグ付きとか キャラクタークラスとかの正規表現はマクロで出力してますから、まず、変な ミスはないのですが。 僕の頭が悪いというミスが、ミスの代表格。 そして、これでいいのか? みたいな、いつもの自信なし状態です。 このところ、けっこうテキストファイルをごにょごにょしてる時間が長いのですが、 そしてプログラミング関係本をそこそこ眺めてはいるのですが(Software Tools, __ in Pascal by Kernighan)、やっぱ、80x25文字が画面の基本と考えている のでインデントは少なめな書式になってます。意図です。 贅沢になれると、MS-DOS画面でつらいです。 僕的にはふつうですが、"Comment like crazy."というJeff先生の教えも反映させて ます。訳すと、「狂ったようにコメントを入れよ」。 VzマクロはVzマクロで、if...elseがあるとはいっても、ラベルジャンプだなぁ、 と進歩のないことになってます。そっちが読みやすいのだもの。 === tag_rplp by B ===; Tag Replacement Prep \x ^aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)zzz$ aaa\1\2\3\4zzz * M 50 ^^ "tag_rplp" ?. i=1, ;replace tag num (\i; \1, \2, \3 etc) k=ks&1, &s #k #i ;duplicate line #x ; ----- del top&tail \x , ^, $ ----- #< (cd=='\')? #g ;del \x ? { &m("\x missing. Regex?") >z } (cd=='x')? #g ; (cd==' ')? #g ; (cd=='^')? #g ;del ^ #> #s (cd=='$')? #g ;del $ #< ; ----- main loop ----- :a (ct==1)? >z ; ----- srch \( ----- (cd=='\')? { #d (cd=='(')? { #g &?("%d",i) i++, >b } ;\( found, del ( } ; & put \1 (\2,\3) #d >a ; ----- srch \) ----- ; now in delstring = DELing :b (cd=='\')? { #d (cd==')')? { #g #h } ;\) found, del \) } ;stop deleting ? { #g >b} ;deleting the inside>a; ----- if shift, get 2 strings in PS ----- :z (k)? { #< #b #> #G ;2nd line, repl str #e #< #b #> #G } ;1st line, srch str #< &d . *
> &s
> #k #i ;duplicate line
>少し面倒だなと感じることは確かにあります。
>「\1\2\3\4」って入力するの簡単だから…と言ったらニベもないですが。
>でも,自分もテキスト上でパターンを書いておいて
>自分だったらどう作る…と考えたとき,別のテキストに切り出しておいて,
>\(と\)に囲まれた【最短の】文字列をヌル置換した数を記憶しておいて,
>文字列のあったはずの場所に置換数分の\[num]を出力する……
>[^\()] を含まない文字列を指定するのがやたら面倒とか,
>こういうのって,やり方は色々あって,考えるの楽しいですよね。
>> &s
>> #k #i ;duplicate line
> ここのとこ,非ブロックの #y #k はサイレントで実行しないのが吉。
>※カーニハン先生の「ソフトウェア作法」,えらく使い込まれた感じに傷んでいる本を
>図書館で借りてちょっとだけ読みました。ふむふむ,で終わっちゃった。(笑)
題 + 「と思う」 いちおうワークファイルに検索文字列を写して、置換を基本に同じ結果を 得られるよう、やってみました。 頭を使うことも悩むこともありませんでしたが、\(, \) をカーソルを動かし ながら探す、という最初の案に1票という結果になりました。 aaa\([0-9]\)\([0-9]\) を aaa\([0-9]\) \([0-9]\) としてしまえば、処理が楽というのは、まあ、正しかったとは思いましたが。 以下は、骨の部分だけです。 ----- testfile.txt ----- aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)zzz ------------------------ === Macrotmp by B ===; も、大変。字がいっぱい。 * M 50 ^^ "Macrotmp" ; --- tag pair num check ; \(, \) 整合性チェック #56 "\(" #m "\(" #m "AY" m=r, #56 "\)" #m "\)" #m "AY" n=r, (m==n)?? {&m("\( \) tag pair num, incorrect").} ; --- cut each ...\), for REGEX replacement below #56 "\)" #m "\)\n" #m "AY" ; \(, \) ペアを1行に一個にする ; 次のregex置換(文字列削除)のため ; --- del ...\) tail #56 "\x \\(.+$$" #m "\(" #m "AY" ; \(...\)の ...\)を削る(行末) ; 途中文字列は、行末には来ていないはず。 ; --- renumber \1, \2, \3 by looping i=1, ; \1, \2, \3 の番号振り #F "\(" #m ; :a ; #c (r)? >b ; #d #g &?("%d",i) i++, ;>a ; ここまで; --- get the original & correct 1-line form :b #56 "\n" #m "" #m "AY" ; 複数行だったのを1行に戻す &m("finished") . *
めざらさん 以下2点は、わりと最初から考えていたことでした。>なるほど。ぶった切っちゃうというのは一案でしたね。\(.....\)..\(....\)..\(......\) <-----------------------------> 最長一致で上全部にヒットしてしまい、これではダメだな、と。 これを回避するためにぶった切ることを最初に思いつきました。 .....\) の処理が楽、は、後知恵というか副産物でした。>しかも整合性チェックまで入れるとは,少しやりすぎ(笑)ではありませんか。最終的に捨てましたが、正規表現チェッカー機能を少しは入れたら? という考えはありました。 ただ、自画自賛ですが、最初の解決案では、テキスト上の次行に結果が でます。そこで変なことが起こっていないと確認できるから、それでいい、と。 その後、「\x 」がなければマクロを止める、というのは外しました。 sedでも使えるじゃん、これ、と。
そうだ! ssedには、Perl-like な「最短文字列」しか食べない 「*?」というnon-greedyな演算子があるじゃないか、と思い出してしまい……。 (onigsed については、調べません) 以下のような悲惨なことになりました。 正規表現のメタ文字をエスケープするの、嫌いです。好きな人はまず いないと思うけど。だから、置換に失敗したくない! sedに数を数えさせるのは、えーと、ふつう、ムリです。下のように なります。そのうち数を数えはじめそうで、自分が怖いです。 ホールドスペースに最初、"0123456789"(文字列!)を入れておくなど、 やり方がないわけじゃありません。 ま、バカです。 Perl-like regex がある awk。聞いたことがありません。\(...\)を 1個1個分解して、配列に入れるのでしょうか。 「素直にPerlでやれよ!」。Perl regexが使えるPerlを所有しておりません。 厚い厚い日本語の壁があるのです。 Vzマクロはとてつもなく偉い、という結論です。 --- input.txt \x ^aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)\zzz$ ------------- --- output.txt aaa\1\2\3\4\zzz ------------- --- detag.sed --- #ssed -R (Perl-mode) -f detag.sed s/^\\x \^// s/^\\x // s/\$$// s/\\(.*?\\)/\\1/ s/\\1\)/\\1/ #泥縄です。訳が分かりません。 s/\\([^1]*?\\)/\\2/ #悲しくなる s/\\2\)/\\2/ #同 s/\\([^12]*?\\)/\\3/ #悲しい s/\\3\)/\\3/ s/\\([^123]*?\\)/\\4/ #さらに悲しい s/\\4\)/\\4/ s/\\([^1234]*?\\)/\\5/ #もっと悲しい s/\\5\)/\\5/ s/\\([^12345]*?\\)/\\6/ #以下同文 s/\\6\)/\\6/ s/\\([^123456]*?\\)/\\7/ s/\\7\)/\\7/ s/\\([^1234567]*?\\)/\\8/ s/\\8\)/\\8/ s/\\([^12345678]*?\\)/\\9/ s/\\9\)/\\9/ ----------------- 上、それほど時間はかかっていません。 が、作業途中、とんでもない虚しさが心の中でどんどん巨大化していった のは事実です。
> Perl-like regex がある awk。聞いたことがありません。\(...\)を
>1個1個分解して、配列に入れるのでしょうか。
\(aaa\)bbb\(ccc\)ddd\(eee\)fff ↓ \1bbb\2ddd\3fff アルゴリズム的には進歩なし。 えーと、そこは数えられないっす。ほぼ文字列定数なので、"str" 「最短」は正規表現ですなおに実現できました。技を使っていません。 しかし、こうは言いたい。 見よ、この気持ちの悪い正規表現を!!! くらえっ!!! って誰が食うの? たぶん、分身の術をやったらめったらに使ったバルタン星人だと思う。 ----- t.awk ----- # jgawk -f t.awk t.txt { sub(/\\\([^)\\]+\\\)/,"\\1"); sub(/\\\([^)\\]+\\\)/,"\\2"); sub(/\\\([^)\\]+\\\)/,"\\3"); sub(/\\\([^)\\]+\\\)/,"\\4"); sub(/\\\([^)\\]+\\\)/,"\\5"); sub(/\\\([^)\\]+\\\)/,"\\6"); sub(/\\\([^)\\]+\\\)/,"\\7"); sub(/\\\([^)\\]+\\\)/,"\\8"); sub(/\\\([^)\\]+\\\)/,"\\9"); print } ----------------- C:\>jgawk -f t.awk t.txt \1bbb\2ddd\3fff いちおう書いておきましょうか、明日の自分のために。バルタン正規表現。 1行で十分。2行目以下は反復なので。 /\\\([^)\\]+\\\)/ を "\\1" に置換する。 \\ ;literal \ -- A -- \( ;literal ( あわせて \( [^)\\]+ ;否定 ) でもなく \ でもない。[ ]内でも、\\ で \ \\\) ;-- A -- にほぼ同じ ;literal \ ;literal ) literalはエスケープされましたの意味。 "\\1" ;literal \1 は、""内でもこうなる。awkの本にはよく書いてあります。 たぶん、 2022/07/05 21:25 446,464 gawkw.exe C:\>gawkw -W version ;for Win32 (Japanized) GNU Awk 3.1.5 あたりでは実装されていると思いますが、ふつうのawk (jgawk)で使う、sub(), gsub() 以上に強力な、gensub()というのがあり、ここでは、タグ付き置換ができるはずです。 GNU extention だと思います。
前に気になることがあったので覚え書。簡単に。 VWX の正規表現は立派です。ERE (Extended Regular Expression)で awk 並です。 多くの日本語対応DOSスクリプティングツールの時期には、ふつう、EREを搭載 させていると思いますが。grepな連中とか。 ただ、sedは過去との互換性がありますから、「+」がありません。ですから、 しょうがなく「*」で代用します。2個重ねて代用します。 あ+ は ああああああ にヒット あ* は すべての文字のヒットになるので(0個以上だから)、代用するには ああ* とします。これで、 ああああああ にヒット。 ふつう VWX で置換する場合、「あ+」になります。「*」を使うのは例外中の例外です。 sedには、「+」がないから、「*」を使うしかないのです。 付けたし(例外)はありますが、VWXではふつう「+」と覚えておいて良いと思います。 例外? Chapter 1 Chapter1 どっちでも削除したい。s/Chapter *1// 特殊な事例(英文etext処理)だと思いますが、僕は、よくこんなのを使います。 s/ *Chapter *1 *// ;(1) もっと文脈を強めると s/^ *Chapter *[0-9][0-9]* *// ;(1)より、どう強力か? となります。 つまり、1字だけを対象にするから「あ*」が怖くなるんですね。他にアンカーが あるのが普通なので、「+」がないsed でも「*」を怖がらなくていいんです。 というわけで、VWXでは、ふつう、「a*」ではなく「a+」となります。 1字だけのとき注意、ということです。
> あ* は すべての文字のヒットになるので(0個以上だから)
>「ら*」がすべての文字にマッチするなら,最長一致でcもマッチするはずですね。
難しいですよ。 パターン:【\x 信じら*れる】 (d) 信じられる信じられる (e) 信じれる信じられる さあ、どこにマッチするでしょう? マッチ調査は頭から。 自信なかったけど、うん、これで正しい。 see #5196 パターン:【\x \\(.+\\)】 ;\\ はリテラル\にする \(aaaaa\)aa\(aaaaa\)aa\(aaaaa\) パターン:【\x \\([^\\]+\\)】 ;否定内でも[^]、\\する \(aaaaa\)aa\(aaaaa\)aa\(aaaaa\)
>(1)「\x あ*」は何にでも当たる。--- t.sed --- s/a*//g # aa*のつもりですね ------------- --- t.awk --- { gsub(/a*/,"") # /aa*/のつもりですね print } ------------- とはいえ、上は何をしようとしているのでしょうか? 他に間違いがないといいのですが。
VWX置換の場合、「\x あ*」(1字のみ)であのように振舞うのをバグと 呼んでもいいし、ユーザのインストラクションがバグってると言ってもよいで しょう。そもそも意味不明な命令です。 「何にでも当たる」。そう見える。しかし、これは、無条件に無文脈で「あ*」 が「.」と同じ意味になるわけではない。前か後ろに何かあれば、予定通りに、 期待通りに振舞ってくれます。 「*」は、「あってもなくても、いっぱいあってもいいよ」という意味の修飾語。 ただし、ふつう文脈が、あるいは前後が、必ずある。 「Chapter *1」のように。OCRでは、スペースがよく飛んでしまうのです。 あるいはスペースがなぜか3つになっていたり……。 (しつこいですが、上の例でrと1の間には、スペースがなくても良いという 意味であって、何がきても良いという意味ではない。きっと正確にいえば、存在 しない、あるいは単数・複数存在するスペース以外はダメです。普通でしょ? で、rと1が文脈を作っている。) いらぬお節介というか不要な一言かもしれませんが、#5266の(3)をよーく 考えてみてください。そっちが普通です。その考え方が普通です。 ふてました? むくれて寝てやる、となってるのかなぁ、と。 お陰様で、僕のほうはすっかり整理がついてしまいました。
> あ* は すべての文字のヒットになるので(0個以上だから)、
> お陰様で、僕のほうはすっかり整理がついてしまいました。
>わたしは単に,文太さんが書かれた…
>> あ* は すべての文字のヒットになるので(0個以上だから)、
>…の説明が間違っていると言いたかっただけですよ。
>> お陰様で、僕のほうはすっかり整理がついてしまいました。
>あ,そう? それならいいんだけど。
> ちょっと休みますね。少々手を広げすぎた、あるいは、ここがリミット、
> 死んじゃう前に、オフライン会、またやりましょうね!
> こんな本をめざらさんが読んだら、まだまだこれからじゃい! と燃えてくれるかも
> またお世話になります。m(__)m
>文太さんちの玉葱苗は,いまどんな具合ですか?
>このままだと,昨年季節外れな春先に買った苗と大して変わらないのでは。
> 早生でも、まだほとんど膨らんでないのじゃないでしょうか。
> 今日、タマネギを半年(以上)ぶりに買いました。
>あ,そういえば,大根…ふくよか2号…の出来はどうでしたか?
>こんなのできました(笑)。
> あと1〜2月は大丈夫でしょう。別種のダイコンが他に10本あります。
> あ、それはダイソーの種だからでは、きっとないと思う。
> 直接「ふくよか2号」に味が似てるのはどれですか、と訊いてみる
>リンクを貼り直したので,ご面倒でなければ見てください。
>葉っぱはおそらく使えなくなっちゃいますけどね。
>>あ、それはダイソーの種だからでは、きっとないと思う。"
>自分が下手だからです(笑)。ほんとにプランタやポットで育てるの苦手なので。
>日陰がいいのかな…と思うけれど,
>ちゃんと「来年は代わりのものを紹介させていただきます」と伝えられていますよ。
>ダイソーで「おでん大根」種を買ったのに,
>楽しくて仕方がない。ダイソーさんにもお世話になりますわ。
> 今晩、ふくよか2号を大根おろしで食べてみよう! 正統派。
> >[^\()] を含まない文字列を指定するのがやたら面倒とか,
> ここは意図が読めませんでした。?
>たぶん,履歴がどのくらい使えるかで面倒度が変わってくるからでしょう。
>正規表現のパターンの中でメタ文字を書く場合,エスケープしなきゃならないじゃないですか。
く、くだらないクイズです。以下は何でしょうか? ) i \x ) \([a-z]\) ) \1 e ( \x \([a-zA-Z]\) ( \1 ( . T \x \. \([A-Z]\) . \1 \x \([a-z]\) , ;以下、サンプル文字列なし \1 , \x \([a-z]\) \(['"]\) ; ditto \1 \2 \x \([a-z]\) \([A-Z]\) ; ditto \1 \2 \x ^ \([A-Z]\) ; ditto \1 ---------------------------------------------------- (ま、僕は、〈そんなこと〉をしている、という近況報告です) (下らなさすぎるので、以下は省略バージョン) ) i ;これが現実的な文字列で目標パターン \x ) \([a-z]\) ;VWX用の正規表現に一般化すると、こうなる ) \1 ;置換文字列では、こうしたい。 e ( ;パターン1に同じ。「文字列」が写されて \x \([a-zA-Z]\) ( ;いない場合もある。 \1 ( ;半角スペースを2→1にしたいのだな。 . T \x \. \([A-Z]\) ;ピリオドのあとのスペースを2つに . \1 ;したがっているのだろう。 (もちろん、久しぶりの真剣マクロ、大活躍です! という報告も 含まれました。ゲームの季節では、ない、かな、僕のばあい、、、。 これが、僕のゲームなんだ、、、。 もちろん、上はメモファイルです。c:\aaa.txt) ---------------------------------------------------- 僕は何をしているのか? はい、主にFortranの参考書のetextを作っています。インド製の教科書なので pdf&OCRすると、変なことがいっぱいおこるので、修正しながら読んで います。 _Programming in FORTRAN_, Second Edition, by P.V.S. RAO, Bombay, NEW DELHI なんての。 (Fortranの参考書・教科書は少ないです。あ、あそこなら! とうちの図書館を みたら、あるある、でした。) そんなふうにして探し回ったあげく、ようやくたどりついたのが 黒瀬ヨシノブ著『パソコンによる Fortran90: MS-Fortran Ver.5.1 入門』 (1992、啓学出版)。 これ、すごくいい本です。MS-Fortran Ver.5.1 もゲットできました! (Fortranは古い言語なので、その歴史を追うのは、とても面倒でした) Ver.5.1は、もちろん、DOS/Win9x 汎用版。つまり英語のみ。上の本では、日本語も 通るしNECだし。 英語用Vzを年末年始につくります。 vze.com/vze.def/vzfle.def etc ...。DOS/Win9x 機用。 材料工学とか、とにかく正確な計算! という分野では、まだまだFortran、 需要があるようでした。NASAでもスパコンでも使うらしいし。 僕の需要は、文字列処理のfilterなんですけどね。む、向かない! もちろん、Kernighan, _Software Tools_ (for Fortran) & _ST in Pascal_ から来ています。 こっちに関しては、どこまで真剣か真面目か、は分かりませんが、楽しいです。 grep, sed, regex engine, editor まで、作ってますねぇ。Fortran と Pascalで。 ふと、Vzソースの話は? と自問することはありますが、どうせ、今日しか 生きられないのだから、いいの、いいの、となってます。うちのVzは、今日も 元気に仕事をしてくれています。 あい変わらずヘロヘロです。 喜ぶべきか悲しむべきか、今年も、ゴールが見えてきました。 今年も、いろいろと、ありがとうございました。m(_B_)m
> 聖井蛙。(なんちゃって〜)
> 井蛙(せいあ、生没年不詳)とは、江戸時代の浮世絵師。
> はい、ぽっかーん、としていました。
> なんだか自分が異星人になったみたいな気分です。80年代、何をして生きていたのだろう?
>
> https://ja.wikipedia.org/wiki/%E8%81%96%E9%97%98%E5%A3%AB%E6%98%9F%E7%9F%A2
>でも全然外してるみたいだし。(^^;;
> >でも全然外してるみたいだし。(^^;;
> なの? それに気づいていない、、、。
> 『ジャンプ』なんでしょ???? wikiもすぐさま通過しました。
> > 闘ってないしなーと思って,聖☆おにいさん に寄せました。☆忘れたか。
> 『ブラックジャック』か『ドカベン』あたりで終わりましたねぇ。
> いい年こいて、『スラム・ダンク』を買いました。そのうち新作も観てしまうのでしょう。元バスケ選手。
> そういえば、新海誠は、いちおう見ておくつもり。きれいな絵なわりに廃墟もの・終末ものなので。
> そうだ、『のだめカンタービレ』はコミックス、持ってます。同作者による『グリーン』(農業もの!)というのもあるんです。あれは捨てていいな。
> 「聖闘士セイヤ」ネタですか。(^^;
> あ〜,ちょっとわかりにくかったですかねー。(笑)
> 闘ってないしなーと思って,聖☆おにいさん に寄せました。☆忘れたか。
> 逆にあれほどゴロゴロしてないですけどね。
> konno さんでなければ 350じゃ閃かないな。
> ああ,タイトル回収に走ってしまっていたのか。流石です。
> ☆マークの麦のやつです。
> 1本でフワフワするので省エネでしょ。(^^;
> わたしはそれの黒いのが好きですね。
> 金の赤いやつと並び,今年のベスト2でしょうか。
> がぶがぶ飲んで割り勘にするメフィラスにはスペシウム光線うちたくなる。
> (しかし,それにしても……モノホンじゃなくて第二,第三のレベルに生活を落として,なおかつそれも買い控えるという老後。空白,いや後退の十年か。)
>あの裏切りの三浦ですよね。(^^;
>飲みなれるとモノホンはきつく感じますので、
> > 1本でフワフワするので省エネでしょ。(^^;
> 一緒です。そのくらいが幸せですね。
> がぶがぶ飲んで割り勘にするメフィラスにはスペシウム光線うちたくなる。
> あぁ、私は撃たれてしまう部類のようです。
> 食べるほうで割り勘勝ちした人は撃ちませんよね?ね?
> 適量を知る人は撃ちません。
> が、なんと、携帯電話を紛失してしまったのですよ。
>結局は,手元では VZ マクロでやっつけてしまっていたりする。
>相変わらず何がしたいのかわからない。
>…と言うか,やりたいことを何なら簡単にできそうか見当をつけようとしているのかもしれない…
>でもそれらは仕事で必要な処理だった(過去形)はずで,完全フリーの現在では
>悲しい性なのかもしれない。
もう、ここに繋げちゃう。 えーと、記念に報告しておきます。 OCRでpdfからetext素材を得るとですね、へんな文字が入るのです。 95h という文字。9は青色。発泡酒の缶の色ではなく。 以下のようにしてください。僕は、新出さんのあと、NT用に再移植された unix-like toolsを使っているようなのですが、trで削除できます! (DOS環境だと新出さんにお出ましいただくのでしょう) 以下のごとく。>tr -d \x95 < c:\test.txt >kek.txt ;-d = del option ゼロ置換でない。前にも登場したことがあるtrですが、これがけっこうな曲者でして、 なかなか思ったとおりにいかない。最初8進数(オクタル)で指定できるのか! とやったのに、敗退したり。 コマンドラインの書き方に、けっこうクセがあります。 必要になったら実験してみてください。>tr "chr1" "chr2" というほど甘くない、 場合があるはずです。 Vzのゼロ置換でも消せないし、どういう文字化けなのかもよく分からなくて、 手で消してました。 95h, extended ascii character なはずです。 追記:どうでもいいことですが、「 95 」という文字列になっている場合(前後の 文字はなんでもよい)、Vz置換で消せます。行頭、行末、あるいは行内単独(のみ) のときに、手を焼いていました。 追記2:\manディレクトリのtr.txtを読むと、ツールズのというか引数展開ルーチンの というか、コマンドライン解釈のというか、ひぃえ〜〜なぐらいに深い世界ですねぇ、 と思うと思います。UNIXでもDOSでも。 追記3:としきさんに課題を出されたときも、trの使い方で、おたおたしたんだ。 できましたよん! >tr [a][b] < object.txt しかダメって珍しいですよね。ま、 こうしかなれんのでしょう。