For循环和if-in-put函数-Ruby
我正在尝试使用for循环和if条件,使用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
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@maxpleanerdata=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