Определение расширения файла после загрузки с помощью регулярного выражения в switch / if - PullRequest
0 голосов
/ 04 марта 2012

Я работаю над приложением, которое анализирует различные формы электронных таблиц. Он работал для CSV, и теперь я пытаюсь расширить его до XLS, XLSX, ODS и Google Spreadsheets, используя roo gem.

Я хочу, чтобы загруженный файл был правильно проанализирован в зависимости от имени файла. Я пытался сделать это с помощью регулярных выражений и переключений и если утверждения, но до сих пор это не сработало. Кажется, проблема в условии с регулярным выражением, потому что даже файлы CSV больше не анализируются.

Вот моя текущая версия:

def create
  @deck = Deck.new
  @deck.name = params[:uploadform][:name]
  @deckmsg = ""

  if @deck.save
    @deckmsg='Deck was successfully created.'
  else
    respond_to do |format|
      format.html { render action: "new", notice: 'Deck was not created.' }
    end
  end

  if params[:uploadform][:file] =~ /.*(csv)$/
    begin
      @answers = Array.new
      @questions = Array.new
      CSV.parse(params[:uploadform][:file].read) do |row| 

Если я возьму оператор if, он сработает, поэтому проблема должна быть в этом. Я использую обычную форму загрузки.

1 Ответ

6 голосов
/ 04 марта 2012

Возможно, загруженный вами файл CSV имеет расширение с большой буквы?myfile.CSV не будет соответствовать вашему регулярному выражению.Вы можете исправить это, сказав, что оно совпадает с регистронезависимым:

/.\.csv$/i

Я также удалил лишние скобки и добавил в явном ., чтобы mycsv не совпадало.Вам также не нужно сопоставлять все символы перед расширением (но, вероятно, вы хотите убедиться, что есть хотя бы один символ, чтобы файл не назывался просто «.csv»).

Кроме того, вероятно, чтоparams[:uploadform][:file] не строка, как вы ожидаете.Вероятно, это ActiveDispatch::UploadedFile, и в этом случае вам нужно будет вызвать original_filename, чтобы получить имя файла:

params[:uploadform][:file].original_filename =~ /.\.csv$/i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...