2010-04-23 7 views
4

Comment puis-je dans Ruby lire une chaîne d'un fichier dans un tableau et seulement lire et enregistrer dans le tableau jusqu'à ce que je reçois un tel marqueur comme ":" et arrêter de lire?Lire à partir d'un fichier dans un tableau et arrêter si un ":" est trouvé dans ruby ​​

Toute aide serait très apprécié =)

Par exemple:

10.199.198.10:111 test/testing/testing (EST-08532522) 
10.199.198.12:111 test/testing/testing (EST-08532522) 
10.199.198.13:111 test/testing/testing (EST-08532522) 

Ne devrait lire ce qui suit et être contenu dans le tableau:

10.199.198.10 
10.199.198.12 
10.199.198.13 

Répondre

13

C'est un peu trivial problème, en utilisant String#split:

results = open('a.txt').map { |line| line.split(':')[0] } 

p results 

sortie:

["10.199.198.10", "10.199.198.12", "10.199.198.13"] 

String#split pauses une chaîne au délimiteur spécifié et retourne un tableau; donc line.split(':')[0] prend le premier élément de ce tableau généré.

Dans le cas où il y a une ligne sans un :, String#split retournera un tableau avec un seul élément qui est la ligne entière. Donc, si vous avez besoin de faire un peu plus la vérification des erreurs, vous pouvez écrire quelque chose comme ceci:

results = [] 

open('a.txt').each do |line| 
    results << line.split(':')[0] if line.include? ':' 
end 

p results 

qui ne va ajouter des lignes de division au tableau des résultats si la ligne a un caractère : en elle.

Questions connexes