No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 33 | 34 | 35 |...| 57 | 58 | 59 || Next»

桁数に線形なループ回数の足し算 in sed

インクリメントだと桁数に指数的になってしまうので筆算のように計算するスクリプトを書いてみた.メイン部分はキャリーと足される二つの数の全パターンについて次のキャリーと一桁の答えを生成する正規表現マッチ連発部分.普通にやると全部で200通りになってしまうので少々まとめて40通りに抑えたが… 手で書くのは面倒なのでプログラムに機械生成させて手を抜く.もっとスマートなプログラムが出来ないかなぁ?

sum.sedgen.java

sed に四則演算させたい

インクリメントとデクリメントが出来るので頑張れば出来るだろうけど高速に実装できないかなぁと.ちょっと調べてもあまり見つからない….さすがに bc の機能を置き換えるのはむりかな.

sed 再学習

sed は s コマンドしか使えないというのも悲しいので他のコマンドも含めてちゃんと学習しなおす.

とりあえず,sed にはパターンスペースとホールドスペースという二つのバッファがあって,それぞれ改行文字でセグメントという単位に区切られる.s コマンド以外は,これら二つのバッファに対して queue の操作みたいなことを行うか,ラベルへのジャンプをするのが基本.sed の基本的な文法は

「条件」「コマンド」
「条件」「コマンド」
…

で,上から順にパターンスペースが条件にマッチしたらコマンドが実行される.

条件抜粋:

数字
指定行番号
$
最終行である
条件1,条件2
条件1が成立した行から条件2が成立した行まで. ある種のフラグとして利用可能
条件!
条件が成立しない
/正規表現/
正規表現にマッチ

使うコマンドの抜粋:

p
パターンスペースを改行つきで出力
P
パターンスペースの最初のセグメント(改行で区切られたもの)を出力
q
パターンスペースを改行つきで出力して終了
{
次の } までを命令として実行
s/正規表現/文字列/
正規表現にマッチする部分を文字列に置き換える(最初のみ)
s/正規表現/文字列/g
正規表現にマッチする部分を文字列に置き換える(全部)
y/文字列1/文字列2/
文字列1 の各文字を文字列2の対応する文字に置換
d
パターンスペースを削除後に新しい行をパターンスペースに読み先頭へジャンプ
D
パターンスペースの最初のセグメントを削除し先頭に戻る.パターンスペースが空なら次の行を読みこむ
N
一行読みパターンスペースに追加(改行も生きてる)
h
パターンスペースの内容をホールドスペースに読み込む
H
パターンスペースの内容をホールドスペースへ追加
g
ホールドスペースの内容をパターンスペースに読み込む
G
ホールドスペースの内容をパターンスペースに追加
x
パターンスペースとホールドスペースの内容の入れ替え 
b ラベル
ラベルへジャンプ.ラベルなしで先頭へジャンプ
t ラベル
直前の s で置換されたらジャンプ(正規表現条件と s と b で置換可能)
:ラベル
ジャンプ先のラベル
i\ 文字列
文字列を出力.行頭の空白や改行には \ をつける

TIPS:

  • /正規表現/{ 命令列 } という書き方を見ると awk を思い出せる
  • スクリプトの最後にジャンプが無いときは p と d が挿入される
  • s コマンドとかで正規表現が省略されると直前の正規表現が使われる
  • コマンドはセミコロンで区切ると一行で書ける

とりあえず,セグメントに区切って複数のデータを持ち運びつつ,s を使って必要な部分を抜き出して加工すると.何かのアルゴリズムを sed で実装するための導出規則がほしいところだ.

XML Schema

書き方がたくさんありすぎてどう書けばよいか分からず.再利用は考えないけどメンテナンスはしやすい書き方ってどういうものだろう? とりあえず anonymous type で突っ走る.

もう少し分かりやすくバグれ

Axis にサービスをデプロイしてるのにサービス一覧に登録されないなぁと思っていたらサービスを提供する jar を lib に入れてなかったのが原因だった.こういう場合はリストの生成時とかにクラスファイルが見つからないとエラーを吐いてくれ,と思う.

問題半分解決

eXist で POST したデータを request:get-data() で取得しようとしても空文字列しか帰ってこなかった問題の原因が分かった.どうやら POST するときに Content-type: application/x-www-form-urlencoded が付いていたのが原因らしい.こいつのせいでどのような変換が起きたかは知らないが,とにかくデータが変になってたらしい.Content-type: text/text とかにしたらちゃんとデータが取れた.

しかし,XML を送っても get-data() が string しか返してくれない… XML を送った場合はちゃんとパースしてノードを返すはずなのだが.とりあえず半分問題が解決したからよしとしよう.

«Prev || 1 | 2 | 3 |...| 33 | 34 | 35 |...| 57 | 58 | 59 || Next»
Search
Feeds

Page Top