[#49119] Ruby/Tk カーソル位置の移動方法について — masa masa <masamasa.ruby@...>
初めまして安藤と申します。
3 messages
2013/01/07
[#49131] [ANN] Ruby生誕20周年記念パーティのお知らせ — Kakutani Shintaro <shintaro@...>
一般社団法人日本Rubyの会のかくたにです。
6 messages
2013/01/15
[#49138] [ANN] Ruby 1.9.3 patchlevel 374 — "U.Nakamura" <usa@...>
Ruby ユーザーの皆様
3 messages
2013/01/17
[#49140] [ANN]Ruby-2.0.0-rc1, Ruby-1.9.3-p374 Windows用インストーラパッケージ — arton <artonx@...>
artonです。
7 messages
2013/01/18
[#49271] Re: [ANN]Ruby-2.0.0-rc1, Ruby-1.9.3-p374 Windows用インストーラパッケージ
— whiteleaf <2nd.leaf@...>
2013/03/12
whiteleaf です。
[#49272] Re: [ANN]Ruby-2.0.0-rc1, Ruby-1.9.3-p374 Windows用インストーラパッケージ
— Takahiro Kambe <taca@...>
2013/03/12
In message <CAGePti=3ArS8QeiAgt+B5t4StXdHZ6vuiz9d+=Ef-wk1M=WkDg@mail.gmail.com>
[#49148] Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます — Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
はじめまして。横塚と申します。
16 messages
2013/01/29
[#49150] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— Urabe Shyouhei <shyouhei@...>
2013/01/29
On 01/29/2013 06:35 PM, Daisuke Yokotsuka wrote:
[#49154] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
2013/01/29
Shyouhei様
[#49156] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— Takeshi Iogawa <alpha@246.ne.jp>
2013/01/29
いおがわと申します。
[#49149] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— "Shota Fukumori (sora_h)" <sorah@...>
2013/01/29
sorahです。
[#49152] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— sunao tanabe <aib@...>
2013/01/29
たなべです。
[#49166] Enumerator#+ — 小田 利通 <oda@...>
13 messages
2013/01/31
[#49167] Re: Enumerator#+
— <alucky0707@...>
2013/01/31
あらきという者です。
[#49169] Re: Enumerator#+
— "H.Hiro" <main@...>
2013/01/31
SC5IaXJvGyRCJEckOSEjGyhCDQoNCj4gGyRCPi5FRCRIPz0kNyReJDkhIxsoQg0KPg0KPiAbJEI6
[ruby-list:49160] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
From:
Takeshi Iogawa <alpha@246.ne.jp>
Date:
2013-01-29 14:29:41 UTC
List:
ruby-list #49160
いおがわです。
> で、encodingの問題も、実行性能も、無事に解決できました。
お役に立てたようでよかったです。
> 他人が見て、何をやっているのか一目で理解できるコードかと言うと、ちょっ
と悩ましい。
Ruby は既存のクラスの挙動を変更できますから(組み込みのコアクラスでも!!)
以下のようなコードをスクリプトの最初のほうに記述しておく(もしくは別ファ
イルにしてrequire)って方法もあるにはあります。。。
# Stringクラスを拡張し、bytesliceメソッドを定義する
unless String.instance_methods.find {|m| m == :byteslice}
class String
def byteslice *a, &b
enc = self.encoding
r = self.force_encoding("BINARY").slice(*a, &b).force_encoding(enc)
self.force_encoding enc
r
end
end
end
# -- ここまで
そーすると、1.9.2 でも(1.9.1でも)
target = data.byteslice 0, 72
って書けますよ。(やってることは前回と変わらないですがforce_encoding が隠
蔽されるので見通しはよくなるかと。。。実行性能的には若干不利かな)
# 将来的に1.9.3以上にバージョン上げたときは標準のbytesliceが使われるよう
# になります。
(注) 1.9.3 のbyteslice の引数・戻り値をちゃんと調べ切れていないで上記
コード書いてますので、1.9.3に上げた途端にピギャー、となる可能性があります。
Try するなら1.9.3のbyteslice の仕様をきちんと確認ください
いわゆる『モンキーパッチ』という奴なのでむやみやたらと手を出さないほうが
よいと思います。
あくまで、「こんな手もある」というコトで。。。
(2013/01/29 21:20), Daisuke Yokotsuka wrote:
> いおがわ様
>
> ご教示、ありがとうございます。
>
> target = data.force_encoding("BINARY").slice(0,72).force_encoding("Windows-31J") ;
>
> で、encodingの問題も、実行性能も、無事に解決できました。
>
>> # ただ、force_encoding に頼るのはあまりよい方法ではない、と
>> # 考えますが。。。
>
> ですよね。
> 他人が見て、何をやっているのか一目で理解できるコードかと言うと、ちょっと悩ましい。
> でも、とってもシンプルなコードになりました。
> ありがとうございます。
> あとはコメントで凌ぐということで・・・・
>
>> ところで、余計なお世話ですが、1バイト文字とマルチバイト文字の
>> 混在する文字列を問答無用でぶった切るとあまりよくないことが
>> 起こったりしませんか? 特にSJISで"\" なんかが絡んでくると
>> いやらしいバグが出そうで気になります
>
> はい、おっしゃる通りで、普通はこんなことはしないのですが、
> 今回は、固定書式のCOBOLソースの解析なので、コメント行以外に
> 72バイト目を跨る2バイトコードは存在しないという前提です。
>
> ありがとうございました。
>
> 横塚
>
>
> <5107AF72.9030507@246.ne.jp> の、
> "[ruby-list:49156] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます" において、
> "Takeshi Iogawa<alpha@246.ne.jp>"さんは書きました:
>
>> いおがわと申します。
>> MLの参加自体新参者なので僭越ですが。。。
>>
>> str = "7bit asciiが混じった長い文字列"
>> enc = str.encoding
>> str.force_encoding("BINARY").slice(0,72).force_encoding(enc)
>>
>> ではいかがでしょう?
>> # ただ、force_encoding に頼るのはあまりよい方法ではない、と
>> # 考えますが。。。
>>
>> ところで、余計なお世話ですが、1バイト文字とマルチバイト文字の
>> 混在する文字列を問答無用でぶった切るとあまりよくないことが
>> 起こったりしませんか? 特にSJISで"\" なんかが絡んでくると
>> いやらしいバグが出そうで気になります
>>
>
> --
> Daisuke Yokotsuka
>
>
--
Takeshi Iogawa