新井です。

In message "[ruby-list:31841] jleft, jright を作ってみました"
  on 11 Oct 2001 15:54:39 +0900,
  Shimada Yoshiro <yoshimada / yahoo.co.jp> wrote:
> 島田と申します
> 
> 先ほど変なタイトルのメールを送ってしまい、申し訳ありませんで
> した。改めて同じ内容のメールを送ります。
> 
> SJISで、全角と半角が混じっている文字列の左からnバイトまたは
> 右からnバイトを切り出すメソッドを作って見ました。
> 
> みそは切り出す文字の境界に全角文字がきて1バイトめと2バイト目
> が泣き別れになるのを避けることです。そのような状況では切り出
> す長さをn-1バイトにして処理しています。

[ruby-list:6005] を参考に私も作ってみました。jcode.rb に依存
しないのがミソです。
# jleft, jright はおまけで jfold がメイン

でも、jfold って既に誰かが作ってそうですよね。最上の実装の物
を FAQ に載せるか、jcode.rb に入れたいです。


# refered to [ruby-list:6005] class String def _jfold(len, over_boundary = false) return ["", self.dup] if len <= 0 left, right = self.unpack("a#{len} a*") if /.$/ !~ left if over_boundary left << right[0,1] right[0,1] = '' else right[0,0] = left[-1,1] left[-1,1] = '' end end [left, right] end def jfold(len, over_boundary = false) return _jfold(len, over_boundary) if not block_given? right = self while true left, right = right._jfold(len, over_boundary) yield(left,right) break if right.empty? end end def jleft(len) _jfold(len)[0] end def jright(len) _jfold(self.size - len, true)[1] end end if $0 == __FILE__ s = "あいうえおabcあいうえお" (-2 .. s.size+2).each {|i| p [i, s.jleft(i), s.jright(s.size - i)] } s.jfold(5) {|t,| p t } s.jfold(5,true) {|t,| p t } end
[-2, "", "あいうえおabcあいうえお"] [-1, "", "あいうえおabcあいうえお"] [0, "", "あいうえおabcあいうえお"] [1, "", "いうえおabcあいうえお"] [2, "あ", "いうえおabcあいうえお"] [3, "あ", "うえおabcあいうえお"] [4, "あい", "うえおabcあいうえお"] [5, "あい", "えおabcあいうえお"] [6, "あいう", "えおabcあいうえお"] [7, "あいう", "おabcあいうえお"] [8, "あいうえ", "おabcあいうえお"] [9, "あいうえ", "abcあいうえお"] [10, "あいうえお", "abcあいうえお"] [11, "あいうえおa", "bcあいうえお"] [12, "あいうえおab", "cあいうえお"] [13, "あいうえおabc", "あいうえお"] [14, "あいうえおabc", "いうえお"] [15, "あいうえおabcあ", "いうえお"] [16, "あいうえおabcあ", "うえお"] [17, "あいうえおabcあい", "うえお"] [18, "あいうえおabcあい", "えお"] [19, "あいうえおabcあいう", "えお"] [20, "あいうえおabcあいう", "お"] [21, "あいうえおabcあいうえ", "お"] [22, "あいうえおabcあいうえ", ""] [23, "あいうえおabcあいうえお", ""] [24, "あいうえおabcあいうえお", ""] [25, "あいうえおabcあいうえお", ""] "あい" "うえ" "おabc" "あい" "うえ" "お" "あいう" "えおa" "bcあい" "うえお"