【问题标题】:Overwrite variables to a specific position in text file with R用R将变量覆盖到文本文件中的特定位置
【发布时间】:2013-06-18 21:25:54
【问题描述】:

我正在尝试将现有文本文件(参见下面的摘录)中的变量“替换”为 我的 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 

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

【问题讨论】:

  • 我的建议:我发布的内容存储在 .txt 文件中。 (除其他外)我想打开 .txt 文件并替换 var1-var6 下面的一些值现在更清楚了吗?

标签: r text-files overwrite


【解决方案1】:

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

  1. 使用 readLines 读取数据以获取行列表
  2. 使用 grepl 查找包含 var1 的行的索引
  3. 使用strsplit 提取向量中的值:xx
  4. 使用新值创建一个新的向量列表并使用 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 "               

【讨论】:

    【解决方案2】:

    这就是我的做法(基本上是来自 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
    

    /干杯

    【讨论】:

    • 如果你仔细观察,我引用了你(!)并做了一些小改动(写命令)。这是为更多搜索者添加的一些信息。
    • 正确。但是当我明确要求在文本文件中替换 smth 时,我完成了答案。
    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多