Skip to content

file path

14 messages · Tal Galili, Duncan Murdoch, Uwe Ligges +6 more

#
Dear all, is there any function to assert whether a file path is
legitimate, and to convert any potential file path to a legitimate
file path?

I automate a batch of files and write them to plain text files with
cat(). The file argument of cat() is generated automatically which may
contain characters such as ? < >, unacceptable in Windows OS. What I
do at this moment is to strip such characters off with gsub(). Is
there any direct way to make legitimate file path without detailed
knowledge about the naming rule specific to a OS?

Best
#
On 09/05/2012 4:03 AM, Wincent wrote:
I would just try to create the file, and if you fail, it's not 
legitimate.  Alternatively, you could look at the tests that R uses when 
it checks a package:  we try to keep filenames portable to all operating 
systems.  The rules seem to be strictest for vignettes:

         ## we specify ASCII filenames starting with a letter in R-exts
         ## do this in a locale-independent way.
         OK <- 
grep("^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz][ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-]+$", 
vignettes)

Duncan Murdoch
#
Hmm, I don't think it gives what I want.

For example, I assign a file name to f,
[1] "e:/a?b.txt"

The resultant character is not accepted as a file name by Windows OS.
On 9 May 2012 20:32, Tal Galili <tal.galili at gmail.com> wrote:

  
    
#
On 09.05.2012 17:14, Wincent wrote:
Not on Linux if you write to a smb file system, and that system won't 
tell you in advance. hence you have to know it yourself or correctly 
interpret the corresponding error messages.

Uwe Ligges
#
Why not just construct a valid file name and use that in cat? You can then use 
file.path to join paths together if you want to write to a specific location, 
as in your example.

steve

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On 
Behalf Of Wincent
Sent: Wednesday, May 09, 2012 11:15 AM
To: Tal Galili
Cc: r help
Subject: Re: [R] file path

Hmm, I don't think it gives what I want.

For example, I assign a file name to f,
[1] "e:/a?b.txt"

The resultant character is not accepted as a file name by Windows OS.
On 9 May 2012 20:32, Tal Galili <tal.galili at gmail.com> wrote:
--
Wincent Ronggui HUANG
Sociology Department of Fudan University PhD of City University of Hong Kong 
http://homepage.fudan.edu.cn/rghuang/cv/

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
#
As I said, the file name is derived automatically from text processing.
Thanks all the same.
On 10 May 2012 20:35, Upton, Stephen (Steve) (CIV) <scupton at nps.edu> wrote:

  
    
#
Has any mentioned

?make.names
On Thu, May 10, 2012 at 8:39 AM, Wincent <ronggui.huang at gmail.com> wrote:

  
    
3 days later
#
Thanks for the suggestion. The file name in my case is Chinese, which
makes the regular expression less useful.

Anyway, I would like to pose a followup question.
I have a character string of "ABC\D", and want to strip away the "\"
and want a returned character of "ABCD". How can I do it with gsub() ?

Thanks again.
On 9 May 2012 22:40, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:

  
    
#
No, but make.names only makes syntactically valid names of R object.

I think I have mentioned what I did in the first email, although no
concrete example was provided. Let me explain a bit. I have a text
file like this,

Title:AA?
Content: 1xxxxxx1
------------
Title:BA
Content: 2xxxxxx2

I want to read the file in, process it and export it into two separate
files. 1. d:/output/AA.txt with content of 1xxxxxx1, and 2.
d:/output/BA with content of 2xxxxxx2.

The first file name is AA because I know "AA?" is not a valid file
name in Windows and ? is removed. However, there are lots of files and
it will be convenient if I can convert any invalid file name (like
"AA?") into a valid file name (like "AA") automatically.
write a function to construct valid file names because what is a valid
file name depends on the OS and prior knowledge is needed.

Best
On 10 May 2012 20:53, jim holtman <jholtman at gmail.com> wrote:

  
    
#
This works on Mac:

str <- "abc/d"
gsub("/", "", str)

Return:
"abcd"


Sent from my iPhone
On May 14, 2012, at 4:28 AM, Wincent <ronggui.huang at gmail.com> wrote:

            
#
Emm, my bad.
I meant str <- "abc\d".
Any ideas?
On 14 May 2012 18:02, Baoqiang <bqcaomail at gmail.com> wrote:

  
    
#
On 14-05-2012, at 12:07, Wincent wrote:

            
gsub("\\\\", "", str)

Berend
#
On May 14, 2012, at 6:35 AM, Berend Hasselman wrote:

            
#1:  One cannot execute:  str <- "abc\d" , at least on my machine,  
since that throws an error because "\d" is an "unrecognized escape".

#2: If the string has a backslash as its fourth character then it  
would need to be created with:

str <- "abc\\d"

(Then Berend's gsub would succeed.)

#3: If the string contains an ASCII cntrl-d. then the needed gsub  
command would be:

str <- "abc\004"
gsub("\\\004", "new", str)
[1] "abcnew"