Как я могу импортировать и повторно экспортировать текстовый файл без изменения пробелов или столбцов?

Иногда, когда в процессе dev есть обе рабочие станции WIN и системы LINUX (хостинг), а в коде вы не видите никакого вывода перед соответствующей строкой, это может быть форматирование файла и отсутствие Unix LF (linefeed) заканчивается.

Что мы обычно делаем, чтобы быстро исправить это, переименуйте файл, а в системе LINUX создайте новый файл вместо переименованного, а затем скопируйте его в него. Во многих случаях это решает проблему, так как некоторые из файлов, которые были созданы в WIN, когда-то перемещенные на хостинг, вызывают эту проблему.

Это исправление - это легкое исправление для сайтов, которыми мы управляем по FTP, и иногда может спасти наш новый членов команды некоторое время.

0
задан Paulina M. 16 January 2019 в 20:28
поделиться

2 ответа

Чтобы использовать R-функции в столбце, нам нужно сначала преобразовать данные во фрейм. Это означает, что нам нужно будет восстановить интервал между исходными файлами в конце.

Во-первых, мы будем читать с colClasses = 'character', чтобы сохранить ведущие нули:

prf003 <- read.table(data, colClasses = "character")

prf003[, 2] <- seq.int(nrow(prf003))

Теперь мы определим вектор для расстояния между столбцами (обратите внимание, нам нужен пустой элемент в конец, поскольку после последнего столбца нет пробелов):

spacing <-  c("  ", " ","   ","     ", "             ", "        ","")

И используйте mapply с paste0, чтобы добавить эти пробелы в конец каждого столбца (это относится к paste0(prf003[ ,1], spacing[[1]]), paste0(prf003[ ,2], spacing[[2]]) и т.д. :

formatted_prf <- mapply(paste0, prf003, spacing) 

Затем мы можем записать обратно в исходный формат файла, используя write.table

write.table(formatted_prf, "new_prf.tre", sep = "", quote = FALSE, 
  col.names = FALSE, row.names = FALSE)

Отметив, что оба sep должны быть пустыми, и quote = FALSE чтобы это не испортило наш интервал.

Это вывод write.table:

0001  1 1BF   19.2     0.0             5500        0
0001  2 1BF   19.2     0.0             5500        0
0001  3 1BF   19.2     0.0             5500        0
0001  4 1BF   19.2     0.0             5500        0
0001  5 1BF   19.2     0.0             5500        0
0001  6 1BF   19.2     0.0             5500        0
0001  7 1BF   19.2     0.0             5500        0
0
ответ дан Mako212 16 January 2019 в 20:28
поделиться

Предположим, у нас есть вектор символов L, считанный с использованием readLines, как показано в примечании в конце. Тогда предположим, что вы хотите, чтобы замена столбца 2 также имела 2 цифры после десятичной дроби:

substr(L, 7, 12) <- sprintf("%6.2f", seq_along(L))
writeLines(L, stdout()) # replace stdout() with "myfile.dat", say

, давая:

0001    1.00 1BF 19.2     0.0             5500        0
0001    2.00 1BF 19.2     0.0             5500        0
0001    3.00 1BF 19.2     0.0             5500        0
0001    4.00 1BF 19.2     0.0             5500        0
0001    5.00 1BF 19.2     0.0             5500        0
0001    6.00 1BF 19.2     0.0             5500        0
0001    7.00 1BF 19.2     0.0             5500        0

Примечание

Lines <- "0001  116.00 1BF 19.2     0.0             5500        0           
0001  216.00 1BF 19.2     0.0             5500        0           
0001  316.00 1BF 19.2     0.0             5500        0           
0001  416.00 1BF 19.2     0.0             5500        0           
0001  516.00 1BF 19.2     0.0             5500        0           
0001  616.00 1BF 19.2     0.0             5500        0           
0001  716.00 1BF 19.2     0.0             5500        0"
L <- trimws(readLines(textConnection(Lines)))
0
ответ дан G. Grothendieck 16 January 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: