1

我正在尝试用我的 R 脚本“替换”现有文本文件(参见下面的摘录)中的变量。变量称为 var1 到 var6,下面的值需要替换。文本文件中变量的位置始终相同。

*** BLOCK B: WATER FLOW INFORMATION ************************************
hTab1   hTabN
1e-006   10000
  M          H
  0          0
var1     var2     var3     var4     var5     var6
0.095     0.41     0.03     1.5     0.26     0.5 

有人有什么想法吗?亲切的问候

4

2 回答 2

1

我得到了这个解决方案,也许其他人更简单。

  1. 使用 readLines 读取数据以获取行列表
  2. 使用 grepl 查找包含行的索引var1
  3. strsplit使用xx提取 aa 向量中的值
  4. 使用新值创建一个新的 vector 列表并使用 xx 命名:这里的新值为 1:6
  5. 用于gsubfn替换旧列表。

这是我的代码

ll <- readLines(textConnection(object='*** BLOCK B: WATER FLOW INFORMATION ************************************
  hTab1   hTabN
1e-006   10000
M          H
0          0
var1     var2     var3     var4     var5     var6
0.095     0.41     0.03     1.5     0.26     0.5 '))
## get the line with values
id <- which(grepl('var1',ll))
##

xx <-strsplit(gsub('[ ]+','|', ll[id+1]),'[|]')

## replace values
library(gsubfn)
vals <- 1:6
names(vals) <- xx[[1]]
ll[id+1] <- gsubfn("[[:digit:]]+[.][[:digit:]]+",  as.list(vals), ll[id+1])

1] "*** BLOCK B: WATER FLOW INFORMATION ************************************"
[2] "  hTab1   hTabN"                                                         
[3] "1e-006   10000"                                                          
[4] "M          H"                                                            
[5] "0          0"                                                            
[6] "var1     var2     var3     var4     var5     var6"                       
[7] "1     2     3     4     5     6 "               
于 2013-06-21T17:06:53.883 回答
0

我就是这样做的(基本上是 agstudy 的解决方案)

library(gsubfn)
l  <- readLines("myfile.txt")
id1 <- which(grepl('var1',l))
x <-strsplit(gsub('[ ]+','|', l[id1+1]),'[|]')
vals1 <- c("",0.095, 0.41, 0.03,  1.5,0.26,999999)    # var values to be altered manually, i added ""
names(vals1) <- x[[1]]
l[id1+1] <- gsubfn("[[:digit:]]+[.][[:digit:]]+",  as.list(vals1), l[id1+1])
writeLines(l, "myfile.txt")                           # overwrites the old myfile.txt

/干杯

于 2013-06-21T18:05:43.347 回答