Comment afficher une variable à l'intérieur de la chaîne avec Ruby
Donc, j'ai le code suivant qui lit un fichier texte ligne par ligne.
Chaque ligne se termine par un retour chariot. Le code ci-dessous affiche ce qui suit:
define host {
use servers
host_name ["buffy"]
alias ["buffy"]
address ["buffy"].mydomain.com
}
Comment puis-je me débarrasser de l'équerre et d'un devis?
File.open('hosts','r') do |f1|
while line = f1.gets
data = line.chomp.split("\n")
File.open("nagios_hosts.cfg", "a") do |f|
f.puts "define host {\n";
f.puts "\tuse servers\n"
f.puts "\thost_name #{data}"
f.puts "\talias #{data}"
f.puts "\taddress #{data}.mydomain.com"
f.puts "\t}\n\n"
end
end
end
l'a, changé la ligne à lire. data = ligne.bande
OriginalL'auteur luckytaxi | 2009-12-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez Utiliser
au lieu de #{données}
C'est parce que split crée un tableau de chaînes de caractères.
Toutefois, si vous voulez vraiment tout simplement de passer à la ligne sans le point à la fin de la ligne, vous pouvez utiliser la méthode sur bande.
est-il une meilleure façon de le faire? mon fichier texte contient les éléments suivants: serveur1 serveur2 server3 server4
Oui, vous obtenez toujours un tableau lorsque vous utilisez split, même si c'est un tableau avec un seul élément. Cependant, je ne suis pas sûr que vous en avez vraiment besoin ou si la bande serait suffisant.
oh je suis vraiment de la daube, oi n'avez même pas besoin de faire quoi que ce soit. j'ai supprimé les données = ligne partie et juste imprimé "ligne" à l'intérieur de {}
OriginalL'auteur phtrivier
split
retourne un tableau.OriginalL'auteur TK.
Si votre fichier est le suivant
Et vous voulez produire un fichier comme ceci :
Je ferais quelque chose comme :
mon erreur, fixe...
une dernière question, bien que je préfère ton code au mien, comment puis-je rendre votre code plus organisé? Ce que je veux dire c'est, si je tiret "define host", puis dans le fichier de sortie, cette ligne est mise en retrait. Cependant, je ne veux pas que les autres lignes pour être mis en retrait. Il fonctionne en fait à mon goût dans mon code, mais oui, le f.met n'est pas attrayant (plus de la frappe).
Alors, une autre solution serait de mettre toutes les lignes de texte à imprimer dans un tableau (quelque chose comme lignes = ["define host {", "utiliser des serveurs", "host_name #{server_name]"] ) et de transmettre le tableau de met (de sortie.puts(lignes) ) ... normalement, il faut ajouter le retour à la ligne si je crois que ruby-doc.org/core/classes/IO.html#M002252 ...
OriginalL'auteur phtrivier