3

在此先感谢您的帮助。本质上,我正在编写一个构建 URL 的程序,该 URL 将提供一个 CSV 文件。该程序要求用户提供几个输入,然后将这些输入附加到基本 URL。我遇到的问题是,当我尝试将它们粘贴到 URL 中时,每个用户输入之间都会增加一个空格。问题出在#Build URL 行中。

这是代码

 #URL Builder for Yahoo Finance
 #Requests Input from User, Builds URL, downloads csv.file from site
 #Requests are for:
      #Ticker (2-4 letter - character string)
      #Start Month (00 - 11 integer)
      #Start Day (1 - 31 integer)
      #Start Year (Four digit integer)
      #End Month (00 - 11 integer)
      #End Day (1 - 31 integer)
      #End Year (Four digit integer)

 #Functions
      Get_Ticker <- function(){readline("Please enter a Ticker:>>> ")} 
      Get_Month_Begin <- function(){as.numeric(readline("Enter the start month (MM):>>> "))}
      Get_Day_Begin <- function(){as.numeric(readline("Enter the start day (1-31) :>>> "))}
      Get_Year_Begin <- function(){as.numeric(readline("Enter the start year (YYYY) :>>> "))}
      Get_Month_End <- function(){as.numeric(readline("Enter the end month (MM) :>>> "))}
      Get_Day_End <- function(){as.numeric(readline("Enter the end day (1-31) :>>> "))}
      Get_Year_End <- function(){as.numeric(readline("Enter the end year :>>> "))}

 #Function Calls
      Ticker <- Get_Ticker()
      Month_Begin <- Get_Month_Begin()
      Day_Begin <- Get_Day_Begin()
      Year_Begin <- Get_Year_Begin()
      Month_End <- Get_Month_End()
      Day_End <- Get_Day_End()
      Year_End <- Get_Year_End()

 #Build URL
 #Example URL: ichart.finance.yahoo.com/table.csv?s=DVN&a=00&b=1&c=1992&d=11&e=31&f=2013&g=d&ignore=.csv
      CSV_Base_URL <- "ichart.finance.yahoo.com/table.csv?s="
      CSV_URL_Complete <- paste(CSV_Base_URL,Ticker,"&a=",Month_Begin,"&b=",Day_Begin,"&c=",Year_Begin,"&d=",Month_End,"&e=",Day_End,"&f=",Year_End,"&g=d&ignore=.csv",sep="")

 #Download CSV
      Yahoo_Finance_TBL <- read.csv(CSV_URL_Complete)

 #Write CSV File
      write.csv(Yahoo_Finance_TBL, file="Yahoo_Finance_File", row.names=FALSE)

再次,我非常感谢您的帮助。

尊敬,

乔纳森

4

2 回答 2

3

为避免出现空格,您需要使用 paste (sep=""),但您已经这样做了。事实上,我不确定问题出在哪里,因为您的代码似乎对我来说工作正常。这是我将您的代码放入我的 R 会话时的输出:

> Ticker <- Get_Ticker()
Please enter a Ticker:>>> GOOG
> Month_Begin <- Get_Month_Begin()
Enter the start month (MM):>>> 01
> Day_Begin <- Get_Day_Begin()
Enter the start day (1-31) :>>> 01
> Year_Begin <- Get_Year_Begin()
Enter the start year (YYYY) :>>> 2013
> Month_End <- Get_Month_End()
Enter the end month (MM) :>>> 02
> Day_End <- Get_Day_End()
Enter the end day (1-31) :>>> 28
> Year_End <- Get_Year_End()
Enter the end year :>>> 2013
> CSV_Base_URL <- "ichart.finance.yahoo.com/table.csv?s="
> CSV_URL_Complete <- paste(CSV_Base_URL,Ticker,"&a=",Month_Begin,"&b=",Day_Begin,"&c=",Year_Begin,"&d=",Month_End,"&e=",Day_End,"&f=",Year_End,"&g=dignore=.csv",sep="")
> CSV_URL_Complete
[1] "ichart.finance.yahoo.com/table.csv?s=GOOG&a=01&b=1&c=2013&d=2&e=28&f=2013&g=dignore=.csv"

生成的 URL 运行良好。

于 2013-03-25T16:51:20.497 回答
2

问题是您在构建它时没有添加"http://"到 URL。如果您不告诉它,R 应该如何知道这是一个 URL。目前它正在当前工作目录中的文件系统上寻找具有该名称的文件。

你要:

CSV_Base_URL <- "http://ichart.finance.yahoo.com/table.csv?s="

您添加到问题评论流中的 URL有效的,因此通过上述添加,R 应该从 URL 下载并读取 CSV。

`?read.csv 有:

file:
....
      ‘file’ can also be a complete URL.  (For the supported URL
      schemes, see the ‘URLs’ section of the help for ‘url’.)

那有:

 For ‘url’ the description is a complete URL, including scheme
 (such as ‘http://’, ‘ftp://’ or ‘file://’).  Proxies can be
 specified for HTTP and FTP ‘url’ connections: see ‘download.file’.

URLs:

     ‘url’ and ‘file’ support URL schemes ‘http://’, ‘ftp://’ and
     ‘file://’.

这解释了这个问题。

有人可以推测,从 URL 栏(例如 Chrome)抑制协议的浏览器可能会导致人们不知道 URL 需要的不仅仅是地址部分吗?

于 2013-03-25T17:12:44.213 回答