作为一个说明,我是一个相对经验丰富的Python程序员,但最近才拿起ruby。
我正在使用gem squib
为纸牌游戏生成牌。
虽然大部分内容都是无痛的,但在保存到PNG时尝试从源CSV中的数据生成特定文件名时遇到了问题。
在爆管内生成PNG的标准代码如下:
save_png dir: "testdecks/build_#{buildstring}"
效果很好,并以[{1}}
格式在./testdecks/build_ddmmyyhhmm
生成一系列卡片
源文件包含文件名和数量的列,但是使用以下代码我收到错误:
card_00.png
错误:
save_png dir: "testdecks/build_#{buildstring}", prefix: data['Filename'] + '[' + data['Quantity'] + ']'
我认为TypeError来自于我试图用数组捕获一个字符串,但是我不确定是否有办法连接两个Squib :: DataFrame数组并添加额外的字符。
作为一种解决方法,我可以将其全部烘焙到文件名字段中(例如C:/Users/Francis/RubymineProjects/thewalls/thewalls_builder.rb:35:in `block in <top (required)>': no implicit conversion of String into Array (TypeError)
from C:/Ruby23-x64/lib/ruby/gems/2.3.0/bundler/gems/squib-6149023dbbac/lib/squib/deck.rb:74:in `instance_eval'
from C:/Ruby23-x64/lib/ruby/gems/2.3.0/bundler/gems/squib-6149023dbbac/lib/squib/deck.rb:74:in `initialize'
from C:/Users/Francis/RubymineProjects/thewalls/thewalls_builder.rb:17:in `new'
from C:/Users/Francis/RubymineProjects/thewalls/thewalls_builder.rb:17:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
而不是wall[8]
),但这并不是一种很好的方法。
有没有办法做到这一点? 还有一种方法可以为整个文件名做前缀吗?
答案 0 :(得分:1)
prefix
和count_format
选项支持数组,因此每张卡都会被赋予不同的前缀和/或计数格式。
顺便说一句,如果需要,您可以将count_format
有效地用作“后缀”或“整个文件名” - 您可以看到我如何将它们连接在一起:https://github.com/andymeneely/squib/blob/master/lib/squib/args/save_batch.rb#L53-L55。不可否认,我们可以更直观地处理这个问题(参见https://github.com/andymeneely/squib/issues/159)
我相信问题就在于你如何构建prefix
s的数组 - 我不确定+
正在做你认为它做的事情。使用zip
和map
之类的内容来组合数组。就像我在这里做的那样:https://github.com/andymeneely/project-bolt-rats/blob/master/lib/deck.rb#L41-L44
png_prefixes = data.card.zip(data.size).map do |c,s|
"creature_#{s}_#{c}_".downcase
end
save_png prefix: png_prefixes
答案 1 :(得分:0)
我发现map是一个有效的工具,用于生成任意数组来提供爆管。从csv加载所有内容,使用复杂的转换映射一些列,创建一个套牌。
如果我在csv中组合来自多列的输入,我也会使用枚举,这样我就可以将其他列编入索引。