2014-11-21 4 views
0

Хотел бы посмотреть, смогу ли я получить некоторую помощь при переформатировании некоторых элементов массива, поэтому они выводятся определенным образом. Вот то, что я до сих пор:Элементы массива Ruby gsub для переформатирования

node = gets.chomp 
nodelist = `knife node list` 

if nodelist.include?(node) 
    cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1) 
    cookbook_versions.collect!{|element| element.gsub!(#regexhere)} 
    puts cookbook_versions 
else 
    puts "not found" 
end 

В настоящее время выходы:

7-zip 1.0.2 
apache2 2.0.0 
apt 2.6.0 
ark 0.9.0 

Я хочу, чтобы выглядеть следующим образом:

"7-zip": "1.0.2", 
"apache2": "2.0.0", 
"apt": "2.6.0", 
"ark": "0.9.0" 

Кто-нибудь знает некоторые регулярные выражения, которые могли бы помочь мне сделать это? или любым другим способом? Я поставил #regexhere в код выше, потому что мои попытки до сих пор даже не приблизились.

+0

Что такое 'node' для вашего cu rrent-выход и что вы хотите? –

+0

Когда вы задаете вопрос о форматировании данных, поставьте пример своих входных данных, а не заставляйте нас изобретать его. –

ответ

0

У вас есть массив строк, как

["7-zip 1.0.2", "apache2 2.0.0"] 

и хотите, чтобы превратить их в список ключ-значение (хотя я подозреваю, что вы на самом деле хотите JSON).

node = gets.chomp 
nodelist = `knife node list` 

if nodelist.include?(node) 
    cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1).map {|line| line.split(" ", 2) } 
    puts JSON.pretty_generate Hash[*cookbook_versions.flatten] 
else 
    puts "not found" 
end 

С помощью демонстрации:

# Given: 
x = ["apache2 1.9.6", "iptables 0.12.0", "logrotate 1.5.0", "pacman 1.1.1"] 

> puts JSON.pretty_generate Hash[*x.flat_map {|line| line.split(" ", 2) }] 
{ 
    "apache2": "1.9.6", 
    "iptables": "0.12.0", 
    "logrotate": "1.5.0", 
    "pacman": "1.1.1" 
} 

Если вы хотите без вмещающих скобки, вы можете просто хотите итерацию и отображения списка вручную:

if nodelist.include?(node) 
    cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1).map {|line| line.split(" ", 2) 
    puts cookbook_versions.map {|line| format('"%s": "%s"', *line) }.join(",\n") 
else 
    puts "not found" 
end 

С выходом:

"apache2": "1.9.6", 
"iptables": "0.12.0", 
"logrotate": "1.5.0", 
"pacman": "1.1.1" 
+0

Ваш второй блок был именно тем, что я искал. Большое спасибо! И да, ваше подозрение было правильным ... Я искал форматирование json для вывода. – PurrBiscuit