Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For循环和if-in-put函数-Ruby_Ruby - Fatal编程技术网

For循环和if-in-put函数-Ruby

For循环和if-in-put函数-Ruby,ruby,Ruby,我正在尝试使用for循环和if条件,使用file.open和put函数创建文件。我的代码是 I want to write these entries only if it is not null. How to do it? Edit: Full code is 需要“fileutils” 需要“json” 需要“打开uri” 需要“pp” data=JSON.parse('data') 数组=数据 如果有数组&.any 草稿目录=文件。展开路径(“../drats”,dir) File

我正在尝试使用for循环和if条件,使用
file.open
put
函数创建文件。我的代码是

I want to write these entries only if it is not null. How to do it?

Edit: Full code is

需要“fileutils” 需要“json” 需要“打开uri” 需要“pp”

data=JSON.parse('data')

数组=数据 如果有数组&.any

草稿目录=文件。展开路径(“../drats”,dir) FileUtils.mkdir\u p(草稿目录)

数组。每个do |条目|

File.open(File.join(drafts_dir, "#{entry['twitter']}.md"), 'wb') do |draft|
keys = 1.upto(6).map { |i| "key_#{i}" }

values = keys.map { |k| "<img src='#{entry['image']} alt='image'>" if entry['image']}
# you can also do values = entry.values_at(*keys)

str = values.reject do |val|
  val.nil? || val.length == 0 
end.join("\n")

draft.puts str  
end
https://somesite.com/image.png“alt='image'>
https://twitter.com/mark“>马克


and `kevin.md` likewise.

您可以从数组生成字符串,拒绝空值:

keys = 1.upto(6).map { |i| "key_#{i}" }

values = keys.map { |k| entry[k] }
# you can also do values = entry.values_at(*keys)

str = values.reject do |val|
  val.nil? || val.length == 0 
end.join("\n")

draft.puts str

更新以响应更改的问题。这样做:

array.each do |entry|
  File.open(File.join(drafts_dir, "#{entry['twitter']}.md"), 'wb') do |draft| 
    next unless ['image', 'twitter'].all? { |k| entry[k]&.length > 1 }
    str = [
      "<img src='#{entry['image']} alt='image'>",
      "<a href='https://twitter.com/#{entry['twitter']}'>#{entry['twitter']}</a>"
    ].join("\n")
    draft.puts str  
  end
end
array.each do|条目|
File.open(File.join(drafts_dir,“#{entry['twitter']}.md”),'wb')do | draft |
下一步除非['image','twitter'],全部?{| k |条目[k]&长度>1}
str=[
"",
""
].join(“\n”)
草稿
结束
结束

假设您的
条目是散列

final_string = ''
entry.each_value { |value| final_string << "#{value}\n" }
puts final_string
final_字符串=“”

entry.each_value{| value | final_string谢谢你的回答,我已经更新了我的问题。你能看一下吗?@MonsoonMalabar我不明白。
你可以看到一些值为空。
…不,我看不到that@maxpleaner
data=JSON.parse('[{“key1”:“value”,“key2”:”,“key3”:“value”,“key4”:”,“key5”:“value”},{“key1”:“value”,“key2:”,“key3:“value”,“key4:”,“key5:“value”}]')
。这里第一组和第二组中的key2、key4的值为null。它实际上不是null,只是一个空字符串。使用
而不是
压缩
使用
拒绝{val | val.length==0}
或者如果您使用的是活动支持/rails,您可以使用
拒绝(&:blank?)
谢谢你的回答,我已经更新了我的问题。你能看一下吗?@MonsoonMalabar只需替换你的
草稿。将
行替换为我回答中的第一个片段替换
值=
行…
值=keys.map{k |“\n\n”如果条目[k]}
@MonsoonMalabar您能编辑您的问题以显示实际输入和预期输出吗?如果您刚开始这么做会更容易。@MonsoonMalabar好的,现在更简单。请参阅对我答案的编辑。“您可以看到一些值为空。”–我在您的代码中没有看到任何空值。
final_string = ''
entry.each_value { |value| final_string << "#{value}\n" }
puts final_string