如何在文件前添加(在顶部添加)

Rom*_*rik 12 c++ java r file prepend

想象一下你有一个文件

sink("example.txt")
data.frame(a = runif(10), b = runif(10), c = runif(10))
sink()
Run Code Online (Sandbox Code Playgroud)

并希望添加一些标题信息,如

/* created on 31.3.2011 */
/* author */
/* other redundant information */
Run Code Online (Sandbox Code Playgroud)

我该如何添加这个"标题"?手动完成它似乎微不足道.点击几下进入,复制/粘贴或写入信息就完成了.当然,在R中,我可以读入example.txt,创建example2.txt,添加标题信息然后example.txt.

我想知道是否有另一种方式从"顶部"附加文件.其他解决方案(来自c ++或Java ...)也欢迎(我很好奇其他语言如何解决这个问题).

Jor*_*eys 7

在R中,不需要使用额外的文件.你可以这样做:

writeLines(c(header,readLines(File)),File)
Run Code Online (Sandbox Code Playgroud)

然而,使用linux shell似乎是最佳解决方案,因为R并不以高性能文件读写而闻名.特别是因为你必须先读完整个文件.

示例:

Lines <- c(
"First line",
"Second line",
"Third line")
File <- "test.txt"
header <- "A line \nAnother line \nMore line \n\n"

writeLines(Lines,File)
readLines(File)    

writeLines(c(header,readLines(File)),File)
readLines(File)
unlink(File)
Run Code Online (Sandbox Code Playgroud)


tgm*_*ath 6

在linux shell中它很简单:

echo 'your additional header here' >> tempfile
cat example.tst >> tempfile
mv tempfile example
rm tempfile
Run Code Online (Sandbox Code Playgroud)

  • @tgmath:不,不是.Gareth建议读取*all*数据(标题+内容),而您的解决方案更优化,您(或OS)只读取内容.+1 (2认同)
  • `rm tempfile`不会失败,"找不到文件"或等同? (2认同)

Gar*_*vis 5

在任何语言中,最终只有一种解决方案.那就是覆盖整个文件:

contents = readAllOf("example.txt")

overwrite("example.txt", header + contents )
Run Code Online (Sandbox Code Playgroud)