[#42454] 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...>

出沢です

22 messages 2006/06/22
[#42455] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/22

From: しん <dezawa@aliadne.net>

[#42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です。

[ruby-list:42392] Re: ruby -Ks -rjcode -e"p('|%5.5s|'%'泣き別れ')" #=> "|泣き怖"

From: take_tk <ggb03124@...>
Date: 2006-06-12 10:08:29 UTC
List: ruby-list #42392
たけ(tk)です

[ruby-list:42391] Re: ruby -Ks -rjcode  -e"p('|%5.5s|'%'泣き別れ')" #=> "|泣き怖" にて
Kazuhiro NISHIYAMA <zn@mbf.nifty.com> さん曰く:
> '%5.5s'の仕様を考えると"| 泣き|"になることはあっても"|泣き |"には
> ならないような気がしますが、'%-5.5s'にすれば良さそうです。

そうですね。

> 泣き別れを防ぐには、現在の正規表現の実装に依存してしまいますが、
> 正規表現ですべての文字にマッチさせると、泣き別れの1バイト目が
> 消えることを利用して以下のようにするというのはどうでしょうか?
> 
> C:\ruby\bin>ruby -v -Ks -e"fmt='%5.5s';p(('|'+fmt+'|')%(fmt%'泣き別れ')[/.*/])"
> ruby 1.8.4 (2006-04-14) [i386-mswin32]
> "| 泣き|"

実際のプログラムでは

fmt   = "┃%-20.20s│%14.14s│%14.14s│%-32.32s┃"
array = ["2001/01/09 15:10:10", "13", "32", "DB_EX.RB"]

から次のようなテキストを作っているんです(短くしてあります)。
"┃2001/01/09 15:10:10 │        13│        32│DB_EX.RB     ┃"

普通はこれで fmt % array で一発なのでほくほくしていたところ、ごくまれに、
泣き別れが出てしまった、ということです。

対処の仕方はいろいろあるわけで、
上の場合には
sizes=[20, 14, 14,32]
から fmt を作っているので
あらかじめ、次のようなのをかまして対処したわけです。
array2 = []
array.each_with_index{|v,i|array2[i] = v.jleft(sizes[i])}
array = array2

でも、これじゃあ、何のための String#% か分かんないな、と思った次第です。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武


In This Thread