2016-11-23 44 views
1

RCurl返回Windows和Linux系統上ftp目錄的不同換行符。RCurl在Mac上返回什麼換行符?

if(!requireNamespace("RCurl", quietly=TRUE)) install.packages("RCurl") 
link <- "ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/climate" 
RCurl::getURL(link, ftp.use.epsv=TRUE, dirlistonly=TRUE) 
Sys.info()['sysname'] ; .Platform$OS.type 

# Windows/windows: "climate\r\nphenology\r\nradiosondes\r\nclimate_urban\r\n" 
# Linux/unix: "climate\nphenology\nradiosondes\nclimate_urban\n" 

要獲得字符串的載體,我可以

p <- strsplit(p, "\n")[[1]] 
p <- gsub("\r", "", p) # additional carriage return in windows libcurl 

同時處理不過:似乎MAC只能從https://stat.ethz.ch/R-manual/R-devel/library/utils/html/write.table.html的EOL解釋返回\r。在那種情況下,我的方法會失敗。

有人可以用mac測試併發布mac(Sys.info()['sysname']:「Darwin」)輸出嗎? solaris(「SunOS」)如何?

+0

或者用重gers in strsplit:'「[\\ n \\ r \\ l]」'分割任何回車樣式。這可能會導致您的p列表中出現空條目,但可能會在之後進行過濾。 – Tensibai

+0

經過測試:'「[\ r \ n]」'是正確的模式 – Tensibai

+0

或者你知道'readLines(textConnection(RCurl ...))' – hrbrmstr

回答

1

我會分裂的所有回車,與既包括和過濾空項(原因由\ n \ r做兩分),正則表達式後是這樣的:這給

t<-"climate\r\nphenology\r\nradiosondes\r\nclimate_urban\r\n" 
t1<-"climate\nphenology\nradiosondes\nclimate_urban\n" 

p<-unlist(strsplit(t,"[\n\r]")) 
p<-p[nchar(p)>0] 

p1<-unlist(strsplit(t1,"[\n\r]")) 
p1<-p[nchar(p1)>0] 

> p 
[1] "climate"  "phenology"  "radiosondes" "climate_urban" 
> p1 
[1] "climate"  "phenology"  "radiosondes" "climate_urban" 
0

一個更爲簡潔,平臺agnositc的替代方案,也使用curl包:

library(curl) 
readLines(curl(link, handle=new_handle(dirlistonly=TRUE, ftp_use_epsv=TRUE))) 
## [1] "hourly"  "daily"  "monthly"  "multi_annual" "subdaily" 
+0

真棒,但在我的情況下(Windows),我得到:'錯誤:FTP:無法檢索(RETR失敗)指定的文件' –

+0

'readLines()'也適用於'RCurl'調用。沒有足夠的週期利用tdy來幫助調試curl和Windows。 – hrbrmstr

相關問題