2015-05-28 3 views
2

Я хотел бы преобразовать файл, как следуетконвертировать текстовый файл разделенного новой строки в CSV-файл

hello 
world 
123 

bye 
world 
456 

byee 
world 
456678 

в файл CSV, как

hello,world,123 
bye,world,456 
byee,world,456678 

ли возможно сделать это без перебора весь файл и видя новую строку?

+0

что я wo uld do: 'scan()' каждый раздел в, объединить все разделы, а затем write.csv(). Возможно, лучшее решение. – Vlo

ответ

2

Используйте емкость multi.line из scan и затем write.table с соответствующими параметрами:

txt <- "hello 
world 
123 

bye 
world 
456 

byee 
world 
456678" 
temp <- data.frame(scan(text=txt, 
        what= list(word="", dest="", num=numeric(), "NULL"), 
        multi.line=TRUE)) 
write.table(temp, sep=",", file="", quote=FALSE,col.names=FALSE) 
#------------- 
1,hello,world,123, 
2,bye,world,456, 
3,byee,world,456678, 

Очевидно, что вы будете использовать имя юридического файла, если вы хотите, это было отправлено на диск.

1
dat <- readLines(# con = 'path/to/your/file' 
    con = textConnection('hello 
world 
123 

bye 
world 
456 

byee 
world 
456678') 

write.csv(
    t(matrix(
    dat[-seq(4,length(dat),4)], # Drop the spacer 
    length(dat)/3,3), # Estimate columns 
    file = "path/to/your.csv" 
)) 
+0

Нет. Вы должны были заработать свою юповоту. –

1

Сканируйте его, сформируйте его в матрицу по 3 столбца за строкой и запишите его. (Заменить первый аргумент scan и второй аргумент write.table с именами файлов ввода и вывода.)

m <- matrix(scan(textConnection(Lines), what = ""), ncol = 3, byrow = TRUE) 
write.table(m, stdout(), sep = ",", row.names = FALSE, col.names = FALSE, quote = FALSE) 

дает:

hello,world,123 
bye,world,456 
byee,world,456678 

Примечание

Мы использовали это в качестве входных данных

Lines <- "hello 
world 
123 

bye 
world 
456 

byee 
world 
456678" 
Смежные вопросы