Insert line breaks in long string — word wrap

前端 未结 4 1618
情书的邮戳
情书的邮戳 2020-12-03 01:15

Here is a function I wrote to break a long string into lines not longer than a given length

strBreakInLines <- function(s, breakAt=90, prepend=\"\") {
  w         


        
相关标签:
4条回答
  • 2020-12-03 01:40

    For further completeness, there's:

    • stringi::stri_wrap
    • stringr::str_wrap (which just ultimately calls stringi::stri_wrap

    The stringi version will deal with character sets better (it's built on the ICU library) and it's in C/C++ so it'll ultimately be faster than base::strwrap. It's also vectorized over the str parameter.

    0 讨论(0)
  • 2020-12-03 01:51

    How about this:

    gsub('(.{1,90})(\\s|$)', '\\1\n', s)
    

    It will break string "s" into lines with maximum 90 chars (excluding the line break character "\n", but including inter-word spaces), unless there is a word itself exceeding 90 chars, then that word itself will occupy a whole line.

    By the way, your function seems broken --- you should replace

    lineLen <- 0
    

    with

    lineLen <- wordLen[i]
    
    0 讨论(0)
  • 2020-12-03 02:00

    You can look at e.g. the write.dcf() FUNCTION in R itself; it also uses a loop so nothing to be ashamed of here.

    The first goal is to get it right --- see Chambers (2008).

    0 讨论(0)
  • 2020-12-03 02:05

    For the sake of completeness, Karsten W.'s comment points at strwrap, which is the easiest function to remember:

    strwrap("Lorem ipsum... you know the routine", width=10)
    

    and to match exactly the solution proposed in the question, the string has to be pasted afterwards:

    paste(strwrap(s,90), collapse="\n")
    

    This post is deliberately made community wiki since the honor of finding the function isn't mine.

    0 讨论(0)
提交回复
热议问题