Skip to content

Problem with loop in folders

4 messages · Shubhasmita Sahani, Bert Gunter, Sarah Goslee +1 more

#
Hi Everyone,
I am trying to loop through the folders in the major working directory.
Read the dbf file into the data frame then save the data frame as CSV file
in another folder.
For this, I have written this code, But not able to figure out where it is
going wrong. Any ideas will be of great support.


 setwd(choose.dir())
 csvpath= "C:/plan/Learning/dummydata/csv/"
 a<-list.dirs()
 inpath<-"C:/workplan/Q2/Project1"

 for (folder in list.dirs()[-1]) {

   path<-setwd(paste0("inpath",folder))
   dbf<-list.files(path, pattern = "*ward.dbf")
   df <- read.dbf(dbf)
   dbfname<-basename(dbf)
   name<-file_path_sans_ext(dbfname)  # get the name of the file like
agra_ward
   write.csv( df, file = paste0("csvpath",name,"csv"))
   print(path)

 }
#
What package is "read.dbf" from? What error message/behavior did you see?
Should it be:
 path<-setwd(paste0("inpath/",folder)) ## did you forget the "/" ?

Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )

On Fri, Apr 24, 2020 at 7:08 AM Shubhasmita Sahani
<shubhasmita.sahani at gmail.com> wrote:
#
I suspect much if not all of your trouble would be eliminated by using
file.path() instead of paste0().

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/file.path

(Also check your file name - you probably want a . between name and
csv, so using paste(name, "csv", sep = ".") would create a more usual
file name.

It's always a good idea to work thru your loop by hand once, and look
at all the intermediate steps. Often that quickly shows you where you
went wrong.

Sarah

On Fri, Apr 24, 2020 at 10:08 AM Shubhasmita Sahani
<shubhasmita.sahani at gmail.com> wrote:
1 day later
#
Hi,

I am sorry if I am misunderstanding what you are trying to do here, but can
you simplify it this way?
 (unfortualtely, this is untested since I dont have a suitable set of files
and a directory structure to test against)

dbifiles <- list.files(pattern="*.dbi",recursive=TRUE)

csvfiles <- gsub("dbi$","csv",dbifiles)

for(i in seq_along(csvfiles)){

    df <- read.dbf(dbfiles[i])

    write.csv( df, file =csvfiles[i])

}

or something along these lines?

Fredrik

On Fri, Apr 24, 2020 at 4:08 PM Shubhasmita Sahani <
shubhasmita.sahani at gmail.com> wrote: