有没有办法保存到Squib中的特定文件名?

时间:2017-09-01 23:41:49

标签: ruby squib

作为一个说明,我是一个相对经验丰富的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]),但这并不是一种很好的方法。

有没有办法做到这一点? 还有一种方法可以为整个文件名做前缀吗?

2 个答案:

答案 0 :(得分:1)

prefixcount_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的数组 - 我不确定+正在做你认为它做的事情。使用zipmap之类的内容来组合数组。就像我在这里做的那样: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中组合来自多列的输入,我也会使用枚举,这样我就可以将其他列编入索引。