假设我有这个.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")
答案 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 caveats或sed
之类的命令行实用程序。但是,如果您想坚持使用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')