

rails では、 `String#truncate` が利用でき、たとえば以下のような挙動を示します。

[code]

    'hogehoge'.truncate(6, omission: '...')
    # => 'hog...'
    
[/code]

File の中身を、同様に omission 付きで表示しながら truncate したいと思いました。

File が大きかった場合を考えて、 File の中身をすべて読み込むのは避けたいと思っています。

### 質問

  * rails で、 File に対して omission 付き truncate のようなことをやる場合にはどうしたらよいでしょうか。


CC BY-SA 4.0
2018-07-20T02:54:49.613
46755
2018-07-20T05:23:21.407
754
question
ruby-on-rails
rails で、ファイルの中身を omission 付き truncate する方法


`IO.read(N)` や `IO#read(N)` で指定 **バイト数**
だけ読むことが出来ますが、今回は文字単位でなければならないので単純には使えませんね。

基本的には `truncate` する長さより多めに読み込んで `String` のインスタンスが作れれば、あとは `String#truncate`
に任せられるのではないでしょうか。具体的には

[code]

    io.each_char.first(1500 + 1).join.truncate(1500, omission: '(以下略)')
    
[/code]

のようになります。


CC BY-SA 4.0
2018-07-20T05:23:21.407
46767
2018-07-20T05:23:21.407
17037
46755
answer