【问题标题】:How to erase spaces in paste function to build URL?如何删除粘贴功能中的空格以构建 URL?
【发布时间】:2013-03-25 16:39:21
【问题描述】:

提前感谢您的帮助。本质上,我正在编写一个构建 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)

再次感谢您的帮助。

尊敬的,

乔纳森

【问题讨论】:

  • 无法重现您的问题,对我来说您的代码有效...
  • 我没有看到任何对问题的标量响应的空格:[1] "ichart.finance.yahoo.com/table.csv?s=DELL&amp;a=10&amp;b=10&amp;c=2012&amp;d=10&amp;e=31&amp;f=2013&amp;g=dignore=.csv"sep="" 应该解决这个问题。另请注意,在较新版本的 R 中,paste0() 优于 paste(...., sep = "")(它应该更快,并且节省了sep = "" 的输入):-)
  • 我更新了我的代码 - 使用了 collapse=""(尽管建议使用 paste0(),我非常感谢。我的 URL 最后也有一个错误,应该是“g =d&ignore=.csv" 我仍然收到以下错误:文件中的错误(文件,“rt”):无法打开连接另外:警告消息:在文件(文件,“rt”)中:无法打开文件'ichart. Finance.yahoo.com/table.csv?s=DVN&a=11&b=1&c=2005&d=11&e=1&f=2011&g=d&ignore=.csv':没有这样的文件或目录
  • 那里没有空格!您是否尝试将这样创建的 URL 粘贴到浏览器中以检查该 URL 是否有效?
  • 然后天亮了 - 您需要将 "http://" 添加到您正在使用的基本 URL 的开头。有关更多详细信息,请参阅下面的答案。你不需要collapse="";问题是 R 无法知道您正在输入 URL,因为您没有指定 R 处理的 URL 方案(协议)之一。

标签: r url csv paste


【解决方案1】:

为避免出现空格,您需要使用 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 效果很好。

【讨论】:

  • 感谢您的帮助!我收到以下错误:文件中的错误(文件,“rt”):无法打开连接此外:警告消息:在文件(文件,“rt”)中:无法打开文件'ichart.finance.yahoo.com/ table.csv?s=DVN&a=11&b=1&c=2005&d=11&e=1&f=2011&g=d&ignore=.csv':没有这样的文件或目录
【解决方案2】:

问题是您在构建 URL 时没有将 "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 需要的不仅仅是地址部分?

【讨论】:

  • 非常感谢加文。我非常感谢您的帮助和解释。
  • 不用担心。很高兴能提供帮助 - 我花了一段时间才看到这里的问题。
猜你喜欢
  • 2012-05-04
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多