Почему моей программе выдан неожиданный токен: ошибка $ end? - PullRequest
0 голосов
/ 27 марта 2019

Вот мой незаконченный код:

#When convert button is pressed
File.rename("*.osz", "*.zip$")

dialog.directory(

    def extract_zip(file, destination) FileUtils.mkdir_p(destination)

    file_path = "./convert_temp/*.zip"
    destination = "./convert_temp/osz/"

    extract_zip(file_path, destination)

until File.exists?( ".osu$" ) == false do
  File.rename("./convert_temp/osz/*.osu$", "*.txt$")
  File.foreach(filename) do |file|

  file_string = File.read('./convert_temp/osz/*.txt$')

  if file_string.include?('Mode: 1')
    puts 'Yes'
  else
    puts 'No'
  end
end
end

Robocop дает следующую синтаксическую ошибку:

unexpected token $end (Using Ruby 2.2 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)

1 Ответ

2 голосов
/ 27 марта 2019

На самом деле, Rubocop даже не может проанализировать файл, потому что он имеет синтаксические ошибки.

Сообщение об ошибке syntax error: unexpected token $end означает, что синтаксический анализатор ruby ​​успешно выполнял синтаксический анализ, но затем он неожиданно обнаружил $end, что является способом синтаксического анализа, чтобы сказать «конец файла».Он ожидал больше кода, но вместо этого нашел конец файла.

Вот как ваш код выглядит с правильным отступом:

#When convert button is pressed
File.rename("*.osz", "*.zip$")

dialog.directory(

  def extract_zip(file, destination) FileUtils.mkdir_p(destination)

    file_path = "./convert_temp/*.zip"
    destination = "./convert_temp/osz/"

    extract_zip(file_path, destination)

    until File.exists?( ".osu$" ) == false do
      File.rename("./convert_temp/osz/*.osu$", "*.txt$")
      File.foreach(filename) do |file|

        file_string = File.read('./convert_temp/osz/*.txt$')

        if file_string.include?('Mode: 1')
          puts 'Yes'
        else
          puts 'No'
        end
      end
    end

Использование такого вида отступа позволяет легко увидеть, что есть некоторые пропущенные концы / скобки, потому что последняя строкаоставленный висеть в воздухе вместо того, чтобы закрываться к левому краю, с которого он начинался.

Дополнительные примечания:

dialog.directory(

  def extract_zip(file, destination) FileUtils.mkdir_p(destination)

Очень необычно определять новый методвнутри вызова метода.File.open(def hello_world(..)) Не имеет большого смысла.

until File.exists?( ".osu$" ) == false do

Используете ли вы $ как способ обозначения "имя файла заканчивается на .osu"?Если да, это не работает так.Это будет искать файл с .osu$ в качестве имени.

  File.foreach(filename) do |file|

Параметр file не используется в следующем блоке, вы используете file_string.

    file_string = File.read('./convert_temp/osz/*.txt$')

Вы не можете одновременно читать несколько файлов.Кроме того, File.foreach выше будет читать файл построчно, поэтому здесь вы пытаетесь прочитать его снова, внутри цикла, который уже читает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...