如何遍历行并在 Sinatra 中打印出 CSV::Table 值
How to iterate over rows and print out CSV::Table values in Sinatra
我正在制作一个简单的 Sinatra 应用程序并具有以下 'numbers.csv' 文件:
Name,Title,Phone
Ally Smith,Manager,888-552-444
Rick Jones,Director,888-552-447
Hayley Bowman,Accountant,888-552-424
任务是在 erb 文件中打印姓名和 phone 号码。
我最初用嵌套数组解决了这个问题:
get '/' do
# turns CSV into array with nested arrays
@names = CSV.read('names.csv')
# delete headers
@names.shift
erb :index
end
和每个循环:
<tr>
<th>Name</th>
<th>Number</th>
</tr>
<% @names.each do |row| %>
<tr>
<td> <%= row[0] %> </td>
<td> <%= row[2] %> </td>
<tr>
<% end %>
现在我正在努力克服对使用 objects 和哈希的恐惧,所以我是这样处理问题的:
get '/' do
# turns CSV into object with key value pairs
@numbers = CSV.read('numbers.csv', headers:true)
erb :index
end
我知道使用 CSV::Table object 和 headers 的好处意味着我可以像这样访问值:
@names[i]["Name"]
@names[i]["Phone"]
其中 i
是每行的计数器,后跟键名。
我尝试在 erb 文件中写一个 while 循环——失败了。我理解的 foreach 循环也是 CSV 方法并相应地修改了我的代码 – 失败。
我在遍历行和调用特定键时遇到问题。
我不确定我是否使用了正确的循环。
如有任何建议,我们将不胜感激。
我已经为此工作了几个小时:(
代码没问题。如下所示:
> numbers = CSV.read('numbers.csv', headers:true)
> numbers.each do |row|
> puts "#{row['Name']} - #{row['Phone']}"
> end
Ally Smith - 888-552-444
Rick Jones - 888-552-447
Hayley Bowman - 888-552-424
我认为你的问题是你的变量。您应该在第二个示例中使用 @numbers
而不是 @names
:
@names[i]["Name"] # should be @numbers[i]['Name']
我正在制作一个简单的 Sinatra 应用程序并具有以下 'numbers.csv' 文件:
Name,Title,Phone
Ally Smith,Manager,888-552-444
Rick Jones,Director,888-552-447
Hayley Bowman,Accountant,888-552-424
任务是在 erb 文件中打印姓名和 phone 号码。
我最初用嵌套数组解决了这个问题:
get '/' do
# turns CSV into array with nested arrays
@names = CSV.read('names.csv')
# delete headers
@names.shift
erb :index
end
和每个循环:
<tr>
<th>Name</th>
<th>Number</th>
</tr>
<% @names.each do |row| %>
<tr>
<td> <%= row[0] %> </td>
<td> <%= row[2] %> </td>
<tr>
<% end %>
现在我正在努力克服对使用 objects 和哈希的恐惧,所以我是这样处理问题的:
get '/' do
# turns CSV into object with key value pairs
@numbers = CSV.read('numbers.csv', headers:true)
erb :index
end
我知道使用 CSV::Table object 和 headers 的好处意味着我可以像这样访问值:
@names[i]["Name"]
@names[i]["Phone"]
其中 i
是每行的计数器,后跟键名。
我尝试在 erb 文件中写一个 while 循环——失败了。我理解的 foreach 循环也是 CSV 方法并相应地修改了我的代码 – 失败。
我在遍历行和调用特定键时遇到问题。
我不确定我是否使用了正确的循环。
如有任何建议,我们将不胜感激。
我已经为此工作了几个小时:(
代码没问题。如下所示:
> numbers = CSV.read('numbers.csv', headers:true)
> numbers.each do |row|
> puts "#{row['Name']} - #{row['Phone']}"
> end
Ally Smith - 888-552-444
Rick Jones - 888-552-447
Hayley Bowman - 888-552-424
我认为你的问题是你的变量。您应该在第二个示例中使用 @numbers
而不是 @names
:
@names[i]["Name"] # should be @numbers[i]['Name']