2010-09-21 4 views
0

Je le code suivant:question de sortie rubis

File.open("/log/#{hostname}-#{@tdate}-errors.txt",'w') do |o| 
    run=tn.cmd('String'=>'sh int', 'Match'=>/#/) { |c| puts c} 
    run.each_line do |re| 
    title = re.match /([\S]+)Ethernet\S+/ 
    rep = re.match /\d+ input errors/ 
    #o.puts run 
    o.puts title 
    o.puts rep 
    end 
end 
tn.close 

Il écrit dans un fichier très bien, mais ajoute un tas d'espaces entre le titre et le représentant. Comment puis-je me débarrasser des espaces?

+0

Qu'est-ce 'tn'? L'échantillon semble être incomplet. –

+0

Cest où j'établis une connexion telnet – nomoreflash

+0

À quoi ressemble la sortie typique de la commande 'telnet'? –

Répondre

0

Vous pouvez rstrip pour enlever les espaces de fuite http://ruby-doc.org/core/classes/String.html#M000822

+0

ne sais pas comment utiliser rstrip avec le code que j'ai ci-dessus. Aucune suggestion? – nomoreflash

+0

Le fichier ressemble à ceci: GigabitEthernet3/1 0 erreurs d'entrée avec plusieurs lignes vides entre GigabitEthernet3/1 et 0 erreurs d'entrée – nomoreflash

+0

'puts' ajoutera une nouvelle ligne à la fin de la chaîne. Je recommande de faire quelque chose comme 'o.print title.rstrip + rep.rstrip' – deadkarma

0

Je pense que vous voulez vraiment faire quelque chose comme ceci:

File.open("/log/#{hostname}-#{@tdate}-errors.txt",'w') do |o| 
    run = tn.cmd('String'=>'sh int', 'Match'=>/#/) { |c| puts c} 
    title = nil 
    error_count = nil 
    run.each_line do |line| 
    title = $1 if line =~/(\S+Ethernet\S+)/ 
    error_count = Integer($1) if line =~ /(\d+) input errors/ 
    end 
    title ||= 'no title' 
    error_count ||= 0 
    o.puts title 
    o.puts error_count 
end 
tn.close 
+0

Le fichier ressemble à ceci: GigabitEthernet3/1 0 erreurs d'entrée avec des lignes vides multipe entre GigabitEthernet3/1 et 0 erreurs d'entrée – nomoreflash