Вставить текст между конкретными строками в текстовом файле?(Р) - PullRequest
0 голосов
/ 04 декабря 2018

Допустим, у меня есть этот файл .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 голосов
/ 04 декабря 2018

Вот один из подходов: определите функцию для вставки строки в определенную позицию, затем примените функцию к вашим данным, затем запишите файл обратно на диск.

# 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)

Затем запишите новый текст обратно в любой файл, в котором вы его хотите:

writeLines(dat_inserted, "output_filename.txt")

Если вы работаете с действительно большими файлами, может быть лучше использовать утилиту командной строкикак sed или awk.Но если вы хотите придерживаться R, то вышеприведенный подход является простым и понятным.

Обратите внимание, что вы можете вставить символьный вектор to_insert произвольной длины (включая ноль) - не просто одну строку, как в вашем примере.Так что функция может быть более точно названа insert_lines_at().

0 голосов
/ 04 декабря 2018

Вот один из способов, которым вы можете это сделать.Это перезапишет «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')
...