That's a clever use of gsubfn. Here is a very minor simplification using the same code but representing it in formula notation and sprintf:
gsubfn('([^\t]+)\t', ~ sprintf("%s%*s", x, 8-nchar(x)%%8, " "), tmp) On Tue, Dec 9, 2008 at 12:51 PM, Greg Snow <[EMAIL PROTECTED]> wrote: > This is basically your approach, but automated a bit more than you describe: > > > library(gsubfn) > > tmp <- > strsplit('one\ttwo\nthree\tfour\n12345678\t910\na\tbc\tdef\tghi\n','\n')[[1]] > > tmp2 <- gsubfn('([^\t]+)\t', function(x) { > ln <- nchar(x) > nsp <- 8-(ln %% 8) > sp <- paste( rep(' ', nsp), collapse='' ) > paste(x,sp, sep='') > }, tmp ) > > tmp2 > cat(tmp2, sep='\n') > > This is based on the assumption of tab stops every 8 columns, change the 2 > 8's above if you want something different. > > Hope this helps, > > > -- > Gregory (Greg) L. Snow Ph.D. > Statistical Data Center > Intermountain Healthcare > [EMAIL PROTECTED] > 801.408.8111 > > >> -----Original Message----- >> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >> project.org] On Behalf Of Dennis Fisher >> Sent: Tuesday, December 09, 2008 9:40 AM >> To: [EMAIL PROTECTED] >> Subject: [R] Replacing tabs with appropriate number of spaces >> >> Colleagues, >> >> Platform: OS X (but issue applies to all platforms) >> Version: 2.8.0 >> >> I have a mixture of text and data that I am outputting via R to a pdf >> document (using a fixed-width font). The text contains tabs that >> align columns properly with a fixed-width font in a terminal window. >> However, when the PDF document is created, the concept of a tab is not >> invoked properly and columns do not align. >> >> I could use brute force as follows: >> 1. identify lines of text containing tabs >> 2. strsplit on tabs >> 3. count characters preceding the tab, then replace the tab with the >> appropriate number of spaces (e.g., if the string preceding the tab >> has 29 characters, add 3 spaces), then paste(..., sep="") >> >> However, I am sure a more elegant approach exists. Can anyone offer >> one? >> >> Dennis >> >> >> Dennis Fisher MD >> P < (The "P Less Than" Company) >> Phone: 1-866-PLessThan (1-866-753-7784) >> Fax: 1-415-564-2220 >> www.PLessThan.com >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting- >> guide.html >> and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.