Path: sran124!katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 18 Jun 90 10:17:38 Organization: Software Research Associates, Inc.,Japan In-reply-to: katsu@sra.co.jp's message of 15 Jun 90 06:42:44 GMT Newsgroups: sra.test Subject: Re: Today's Junk article. [Unimaga 1990Jun little language] Distribution: sra References: 梅雨の晴れ間記念 「本日のごみ記事」 この企画の趣旨: 布団を干したい。 「意地のプログラミング」 (失敗例) 記事 で katsu@sra.co.jp (WATANABE Katsuhiro) いはく > でも、数字にカンマをつけることぐらいはできそうなので、ちょっと > nroff でやってみました。 式の評価をしなくてもよくて、カンマをつけるだけだったらそれこそもう 色々なコマンドでできるようです。(Unix Magazine の元の記事でこれを わざわざ bc で書こうとしていたのは、当然うまくいった暁には式の評価も あわせてやらせようという企てだったからでしょう。) bc でなければ、普通は sra.unix の のように sed でやるのだろうと思います。 ところで、今まで私が書いた一連の bc, dc, m4, nroff のスクリプトでは、 全て入力を数として扱い、算術的な「10で割る」「あまりをとる」という 操作を用いてコンマの挿入を行なってきました。 これに対して、sed でスクリプトを書いた場合には、入力を文字列として 扱い、「最後の3文字を取り出す」とか、「ここをこう書き換える」などという 操作を用いることになります。 マニュアルをめくってみると、sed 以外にも文字列を扱って書き換える コマンドは(エディター類は言うに及ばず)沢山あることに気がつきました。 例えば sendmail なんかがそうです。(sendmail の場合文字列を、一段抽象化 したトークンの形で扱っているので厳密には sed ともちょっとちがうかも しれません。) というわけで、数にコンマを挿入する sendmail.cf を書いてみました。 ---------------- comma.cf ### ### SENDMAIL CONFIGURATION FILE ### for comma insertion ### ### katsu@sra.co.jp ### ### ex) echo -n | sendmail -Ccomma.cf '' -1234567890 Dnnobody Do-+0123456789 CN0 1 2 3 4 5 6 7 8 9 CS- + CA- + 0 1 2 3 4 5 6 7 8 9 OQ/tmp OS/tmp/sendmail.st S1 #none S2 #none S4 #none # # Name Canonicalization # (remove non-numeric characters) # S3 R$*$‾A$* $1$3 R$*$=N$‾N$* $1$2$4 # # Mailer specification # Mlocal, P=/bin/mail, S=10, R=20, A=mail -d $u Mprog, P=/bin/sh, S=10, R=20, A=sh -c $u Mecho, P=/bin/echo, S=10, R=20, A=echo $u S10 #none S20 # none # # RULESET ZERO # (insert commas) # S0 R$* $:$1, R$*$=N$=N$=N$=N,$* $1$2,$3$4$5,$6 R$*, $@$#echo$@unknown$:$1 ---------------- echo -n | sendmail -Ccomma.cf '' -1234567890 なんてことをやってみてください。「''」は符号とスイッチの区別を つけるために必要です。(-C を忘れないように......) しかし、反省するに、この試みはどうやら失敗でした。 [問題点] 1.パイプで入力を渡すことができないので、実際に応用する際にスクリプトが 書きにくい。 「To: 1234567890」などというメール(?)を扱うことにすればうまくいく かもしれないが、ちょっとやってみた限りではだめだった。 2.mail と全然関係がないのに mail 関係の設定をしなければならなかったり して、長くなってしまった。(実は本質的な部分は7、8行しかない。) [注意を要したところ] 1.local mailer と prog mailer は使わなくとも必ず定義しなければならない。 2.ruleset 0 の返す token 列で、相手先のホスト名($@ の後、上では unknown。mailer の呼び出しの際、$h はこれに置き換えられる。)は、 よしんば使われなくとも省略できない。普段 local mailer を使う時には $#local$:foo のように $@ の所を省略できているが、これはどうも例外のような 気がする。(よくわからない) [sendmail で書くことによる利益] 川辺さんを「ひまなんだねえ。」と呆れさせることができる。 -- ----____----____ 渡邊克宏 環境開発部 今月の歌: 「♪ 僕等の名前を覚えて欲しい 大型機を知らない子供達さ ♪」