在文本文件中的特定行之间粘贴文本? (R)

时间:2018-12-03 21:01:54

标签: r paste cat

假设我有这个.txt文件:

here is line 1
here is line 2
here is line 3
here is line 4

我想在第3行和第4行之间粘贴此字符串:

here is line 3.5

我该如何完成?起初,我认为也许写下面的内容可能有用,但这只会删除其他内容。

cat("",
"",
"",
"this is line 3.5",sep="\n", file = "file.txt")

2 个答案:

答案 0 :(得分:2)

这里是一种方法:定义一个函数以在特定位置插入字符串,然后将该函数应用于数据,然后将文件写回到磁盘。

class _Tabs extends State<Tabs> {
  List<Widget> _children;
  void _updateProfile(Map<String, dynamic> newMap) {
    setState(() {
      _infos = newMap;
    });
  } //here i want to update the info i receive

  Map<String, dynamic> _infos = ({
    'title': "Title",
    'name': "name",
    'points': 73,
    'about me': "texttexttexttexttext"
  });

  @override
  void initState() {
    _children = [
      MaterialApp(
        theme: ThemeData(
          primaryColor: Colors.white,
          primaryColorDark: Colors.cyan[700],
          primaryColorLight: Colors.cyan[200],
          accentColor: Colors.deepOrange[200],
        ),
        home: Text(''), //not important..
      ),
      Center(child: Text("2")), //some dummy page
      Text(''), // some other dummy page
      Profile(
          userInformationen: _infosTabs,
          updateProfile:
              _updateProfile), //the Profile Page plus the Error appears "Only static members can be accessed in initializers."
    ];
    super.initState();
  }
}

然后将新文本写回到所需的任何文件中:

# if the text is from a file `fname` you'd use `dat <- readLines(fname)` 
dat <- c("here is line 1",
         "here is line 2",
         "here is line 3",
         "here is line 4")

text_to_insert <- "here is line 3.5"

insert_line_at <- function(dat, to_insert, insert_after){
  pre <- dat[1:insert_after]
  post <- dat[(insert_after+1):length(dat)]
  return(c(pre, to_insert, post))
}

dat_inserted <- insert_line_at(dat, text_to_insert, insert_after=3)

如果要处理非常大的文件,最好使用list rendering caveatssed之类的命令行实用程序。但是,如果您想坚持使用R,那么以上内容就是一种干净+简单的方法。

请注意,您可以插入任意长度(包括零)的字符向量writeLines(dat_inserted, "output_filename.txt") -不仅仅是示例中的单个字符串。因此,该函数可能更恰当地命名为to_insert

答案 1 :(得分:1)

这是一种方法。这将覆盖“ file.txt”以包含多余的行。也许不是最有效或通用的。

x = readLines("file.txt")
x = c(x[1:3], "this is line 3.5", x[4])
writeLines(x, "file.txt")

要打印到控制台,请执行

cat(x, sep = '\n')