Неверный вывод в быстрее CSV? Слишком много "в рубине - PullRequest
1 голос
/ 01 декабря 2011

Я использую Ruby и просто хочу читать в CSV-файле. Мой CSV выглядит так:

"official_code","username","lastname","firstname","email","Course Groups","password"
"1626","000078sr","LENS","Ser","blab@hogent.be","project1g43","pwd7975"
"7334","000116jd","DE ","Joen","je0116@.hogent.be","project1g08","pwd5259"
"2003","000136bv","VACKE","Bert","hogent.be","project1g18","pwd5908"
"4065","000166cr","ROHøJ","Chrian","chrhogent.be","project1g10","pwd5000"

Сделано в Excel и установлено в CSV-файл

Но когда я делаю в моем приложении:

 FasterCSV.foreach(file.path, {:headers=>true }) do |row|

            @samples[i] = row
      i += 1
    end # do

 if @samples.size > 0
      @headers = @samples[0].headers
    end 

и, на мой взгляд, я просто делаю:

<%= @headers.inspect %>


<ul>
<% @samples.each do |a| %>
<li>
<%= a %>
</li>
<% end %>
</ul>

Я получаю:

["\"official_code\",\"username\",\"lastname\",\"firstname\",\"email\",\"Course Groups\",\"password\""]

"""1626"",""000078sr"",""ENS"",""Sder"",""san.hogent.be"",""project1g43"",""pwd7975"""
"""7334"",""000116jd"",""DE VOS"",""Jen"",""jeroen.ogent.be"",""project1g08"",""pwd5259"""
"""2003"",""000136bv"",""VYCKE"",""Bet"",""berent.hogent.be"",""project1g18"",""pwd5908"""
"""4065"",""000166cr"",""ROøJ"",""Chstian"",""chr.hogent.be"",""project1g10"",""pwd5000"""

Так что есть путь ко многим ". Кто-нибудь знает, что я делаю неправильно? Это как строки только с 1 столбцом. Если я сделаю samples[0].each, я получу только 1 элемент. Целую строку, а не столбцы.

1 Ответ

0 голосов
/ 01 декабря 2011

Когда вы ссылаетесь на @samples, вы смотрите на массив строк , каждая из которых является массивом проанализированных полей.

Поэтому, когда вы используете @samples.each do |a|, a - это строка, и я думаю, что вы получите результат вызова #inspect для этой строки.

Что произойдет, если вы попробуете что-то подобное?

options = { :headers=>true, :return_headers => true }
@samples = FasterCSV.read(file.path, options).to_a

if @samples.size > 0
  @headers = @samples.shift 
end 

Вам нужно :return_headers=>true, если вы хотите получить настоящие ярлыки; :headers=>true только сообщает FasterCSV о наличии заголовков - по умолчанию они отбрасываются. FasterCSV.read получает и анализирует все данные за одно нажатие, что проще, чем создание массива самостоятельно. Обратите внимание на to_a в конце, который заставляет результат действительно быть массивом - это может упростить ситуацию в следующей части.

Что произойдет, если вы измените представление следующим образом (используйте #join вместо #inspect в заголовках и добавьте #join в строках)?

<%= @headers.join(', ') %>

<ul>
<% @samples.each do |a| %>
<li>
<%= a.join(', ') %>
</li>
<% end %>
</ul>

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

...