我尝试重用一些同事给(和学习)的旧代码。读取带有.sql扩展名的路径中的所有文件并进行一些替换,然后以新名称写出或保存已编辑。 之后我仍然没有在我的名字和命令找不到路径,然后测试后我直接指向一些文件并得到一些错误。我全都在Windows机器上。
path = "c:/WorkDir/Alpha/"
out.file<-""
file.names <- dir(path, pattern =".sql")
for(i in 1:length(file.names)){
file <- read.table(file.names[i])
gsub( "Merry Christmas", "Happy New Year", file )
out.file <- rbind(out.file, file)
write.table(out.file, file = c(file,"new")
}
所以file.names显示像xxx.sql没有部分,是命令应该照顾??
非常感谢 中号
答案 0 :(得分:1)
因此您的代码存在一些问题。
首先,gsub
是一个函数,它返回您所做的替换结果。它不会在您在函数中传递的数据中进行替换。所以你应该保存结果并在以后使用它。
my_vec = c("Merry Christmas", "2015")
my_new_vec = gsub("Merry Christmas", "Happy New Year", my_vec)
print(my_vec) # [1] "Merry Christmas" "2015"
print(my_new_vec) # [1] "Happy New Year" "2015"
然后,您应该确保正确设置了您的工作目录。 write.table
会将您的文件“.sql”保存在工作目录中,以获取与您相关的链接。
getwd() # the directory where write.table will write
setwd("c:/WorkDir/Alpha/") # set the working directory
如果您需要绝对链接,可以使用file.path(请参阅?file.path
)
file.name = "myfile.sql"
abs_path = file.path("c:/WorkDir/Alpha/", file.name)
print(abs_path) # [1] "c:/WorkDir/Alpha/myfile.sql"
最后,我不明白你想对rbind
做什么,这对我没有意义。如果您想使用new替换相同的名称,请尝试使用粘贴功能。
尝试从此开始,并使用?setwd
,?rbind
等滥用文档。
# Control your working directory
# use setwd() to change your working directory
print(paste("Working in ", getwd(), " directory"))
path = "c:/WorkDir/Alpha/"
file.names <- dir(path, pattern =".sql")
for(file.name in file.names){
file <- read.table(file.name)
result.replacement = gsub("Merry Christmas", "Happy New Year", file)
write.table(result.replacement,
file=paste(file.name, "new.sql", sep="_"))
}
<强>更新强>
由于您的数据是纯文本格式,因此您需要使用?readChar
和?writeChar
来读取/写入数据。
library(tools) # To get some information about paths
path = "c:/WorkDir/Alpha/"
file.names <- dir(path, pattern =".sql")
for(file.name in file.names){
file.ext = file_ext(file.name)
file.wthout_ext = file_path_sans_ext(file.name)
file.content <- readChar(file.name, file.info(file.name)$size)
result = gsub("Merry Christmas",
"Happy New Year",
file.content)
writeChar(result,
con=paste(file.wthout_ext, "_new.", file.ext, sep=""))
}
答案 1 :(得分:1)
有很多方法可以做你想要的,但我担心你无法使用read.table
函数读取.sql。另外,理想情况下,您的write.table
应该被置于循环之外。如果您想将其保留在里面,则需要添加append = TRUE
。
path = "C:/WorkDir/Alpha/"
out.file<-""
file.names <- dir(path, pattern =".sql")
for(i in 1:length(file.names)){
gsub( "Merry Christmas", "Happy New Year", file )
file <- read.table(file.names[i])
out.file <- rbind(out.file, file)
}
write.table(out.file, file = "yourBigFile.txt", row.names = FALSE, qmethod = "double")