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
greg.snow at imail.org
801.408.8111
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Dennis Fisher
> Sent: Tuesday, December 09, 2008 9:40 AM
> To: r-help at stat.math.ethz.ch
> 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 at 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.