Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么会出现“语法错误,意外结束”和“输入意外结束”?_Ruby - Fatal编程技术网

Ruby 为什么会出现“语法错误,意外结束”和“输入意外结束”?

Ruby 为什么会出现“语法错误,意外结束”和“输入意外结束”?,ruby,Ruby,当我运行代码时,会收到非常奇怪的错误消息: /Users/Pan/Data/external/filter_url_1008.rb:35: syntax error, unexpected keyword_end /Users/Pan/Data/external/filter_url_1008.rb:45: syntax error, unexpected end-of-input, expecting keyword_end filter_file.close

当我运行代码时,会收到非常奇怪的错误消息:

/Users/Pan/Data/external/filter_url_1008.rb:35: syntax error, unexpected keyword_end /Users/Pan/Data/external/filter_url_1008.rb:45: syntax error, unexpected end-of-input, expecting keyword_end filter_file.close ^ 是否删除if语句行上的then?它可能是有效的,但肯定不是常见用法

Ruby也没有++操作符。

在Ruby中不能使用++操作符。 改用match_count+=1

编辑
它们并不是真正奇怪的错误消息,只是一条表明语法错误的消息:程序甚至还没有开始被解释,这是一个预运行检查。

您做了一些错误的事情。这并不是试图重写代码以避免出错,而是展示如何以更易于维护的风格编写代码,更接近Ruby方式:

require 'fileutils'

SOURCE_DIR = '/20131008' 
DEST_DIR ='/20131008_filtered'

BLACKLIST = %w[
  adf.ly
  bebo.com
  bing.com
  bullhornreach
  craigslist.org
  ebay.com
  ebayrt.com
  facebook.com
  feedsportal
  foursquare.com
  google.co.uk
  google.com
  google.ie
  instagram.com
  itunes.apple.com
  linkedin.com
  maps.google
  pinterest.com
  tumblr.com
  twitlonger.com
  twitpic.com
  twitter.com
  waze.com
  youtube.com
]

unless File.exist?(DEST_DIR) 
  FileUtils.mkdir_p(DEST_DIR)
  print(DEST_DIR + " was created!\n") 
end

File.foreach("filtered_index.txt") do |line|
  # $match_count = 0
  match_count = 0

  BLACKLIST.each do |blacklist_atom|
    match_count += 1 unless (line.downcase[blacklist_atom])
  end

  if (BLACKLIST.length == match_count)
    FileUtils.cp(
      File.join(
        SOURCE_DIR,
        File.basename(
          line,
          File.extname(line)
        ) + '.html'
      ),
      DEST_DIR
    )
  end
end
出了什么问题:

使用常量,并将其移动到文件顶部,以便查看/编辑。 按照站点名称对列表进行排序,以便更容易编辑/扩展列表,并查看是否已有条目。 不要打开一个文件,做一堆事情,然后把它全部读到内存中,做更多的事情,拆分它,然后迭代行,然后做一堆事情,然后关闭它。相反,请使用更智能的文件方法,如File.foreach,并使用块自动打开然后关闭文件。将文件完全读入内存是一个非常坏的习惯,因为它根本不可伸缩;想象一下,如果文件大于程序的可用内存,将会发生什么。 您没有将变量插入字符串,还添加了一个额外的前导路径分隔符:

FileUtils.mkdir_p("/dest_dir")
不要在块中使用$global变量。这表明对变量作用域缺乏了解

全局变量$match_count仅初始化,不读取。 您可以更简洁地编写非子字符串搜索:

if !(line.downcase.include? "blacklist_atom")
使用类似于:

unless line.downcase[blacklist_atom]
使用内置功能:

filename_cp = line[line.index("20131008/") + 9..line.index(".html") - 1]
相反,请使用File.join。。。因为它知道操作系统需要什么路径分隔符。使用File.basename。。。因为它使用相同的路径分隔符来提取文件


ilename=filename\u cp.to\u s+.html?很抱歉,这是一个类型错误,我已将其更改。问题仍然是一样的,你知道怎么回事吗?基本上我想做的是选择一堆遵守我设置的规则的html文件,并将它们复制到一个新文件夹。@meagar match_count++导致错误…@ArupRakshit是的,我是ruby-c test.rb在错误的目录中;我需要停止离开test.rbs到处乱跑:|是的,我的也崩溃了,但这是一个不存在的目录错误。奇怪的是,我会仔细检查是否还有其他错误。谢谢./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/Ruby/2.0.0/fileutils.rb:245:in`mkdir':权限被拒绝-/20131008\u filtered Errno::EACCES,我试图删除创建目录的这段代码,仍然出错。需要检查整个代码。@user2641480您粘贴的是权限错误:您无法在/System/…中写入或创建目录。。。没有根。尝试使用sudo启动程序,或者,更好的是,尝试移动/20131008_filtered inside~/以避免触摸/。理解,尝试检查逻辑。谢谢,尝试了你告诉我的。仍然不工作,我想知道目录路径可能有问题。真的,谢谢你的帮助。我是编程新手,将来会更加努力。
filename_cp = line[line.index("20131008/") + 9..line.index(".html") - 1]