島田と申します
先ほど変なタイトルのメールを送ってしまい、申し訳ありませんで
した。改めて同じ内容のメールを送ります。
SJISで、全角と半角が混じっている文字列の左からnバイトまたは
右からnバイトを切り出すメソッドを作って見ました。
みそは切り出す文字の境界に全角文字がきて1バイトめと2バイト目
が泣き別れになるのを避けることです。そのような状況では切り出
す長さをn-1バイトにして処理しています。
-----------------------------------ここから開始
$KCODE='s'
require 'jcode'
class String
# SJISで左のnバイトを切り出す。
# 境界に2バイト文字がある時は長さをn-1バイトにする。
#
# $KCODE='s'; require 'jcode'がこの行以前にあることが前提
def jleft(n)
if self.length <= n
xx = self.dup
else
if self[0..(n-1)].jlength == self[0..n].jlength
#境目に2バイト文字がある
xx = self[0..(n-2)]
else
xx = self[0..(n-1)]
end
end
xx
end
# SJISで右のnバイトを切り出す。
# 境界に2バイト文字がある時は長さをn-1バイトにする。
def jright(n)
if self.length <= n
xx = self.dup
else
n = self.length - n
if self[0..(n-1)].jlength == self[0..n].jlength
#境目に2バイト文字がある
xx = self[(n+1)..-1]
else
xx = self[n..-1]
end
end
xx
end
end
#-------------------ここからテスト
cc = "ABCDEF"
(1..cc.length).each {|n|
xx = cc.jleft(n)
print xx, "(", n, ")\n"
}
(1..cc.length).each {|n|
xx = cc.jright(n)
print xx, "(", n, ")\n"
}
__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/