2010-07-22 5 views
1
File.open(path, 'r').each do |line| 
    row = line.chomp.split('\t') 
    puts "#{row[0]}" 
end 

path est le chemin du fichier ayant un contenu comme le nom, l'âge, la profession, passe-tempsChaîne # scission Ruby ne se comporte pas comme prévu

Je me attends à la sortie à ne citer que mais je reçois tout le ligne.

Pourquoi est-ce vrai?

+0

Modifier votre question d'inclure l'entrée et la sortie échantillon - qui aidera les gens à répondre à votre question. – Gishu

Répondre

0

Votre question n'a pas été très claire

split("\n") - si vous voulez diviser par des lignes

split - si vous voulez diviser par des espaces

et que je peux comprendre, vous n'avez pas besoin chomp, car il supprime tous les "\ n"

+0

désolé monsieur mais comment accepter nd j'ai résolu mon problème actully im en utilisant split ('\ t') à la place si ("\ t") guillemets simples que l'utilisation im est erronée – Milan

+0

Pour accepter la réponse, vous pouvez cliquer sur la coche du bon côté de la question. Pour augmenter la réponse, vous pouvez cliquer sur le triangle pointant vers le haut qui se trouve également sur le côté droit de la réponse. Bonne chance – BlackTea

5

La question a déjà une réponse acceptée, mais il convient de noter quelle était la cause du problème original:

Ceci est la partie du problème:

split('\t') 

Ruby a plusieurs formes de chaîne entre guillemets, qui ont des différences, celles généralement utiles.

Je cite Ruby Programming at wikibooks.org:

... guillemets doubles sont conçus pour interpréter les caractères évadés tels que nouvelles lignes et onglets de sorte qu'ils apparaissent comme nouvelles lignes et onglets réels lorsque la chaîne est rendue pour l'utilisateur. Les guillemets simples affichent cependant la séquence d'échappement réelle , par exemple affichant \ n au lieu d'une nouvelle ligne.

Lire plus loin dans l'article lié à voir l'utilisation de %q et %Q cordes. Ou Google pour "délimiteurs de ruby ​​string", ou voir this SO question.

Alors '\t' est interprété comme "barre oblique inverse + t", alors que "\t" est un caractère de tabulation.

String#split prendra aussi un Regexp, qui dans ce cas pourrait lever l'ambiguïté:

split(/\t/) 
+0

Oui, votre réponse est beaucoup plus précise. Parce que le gars parlait de lignes et que sa question n'était pas très claire, je pensais qu'il cherchait un moyen de diviser le texte par lignes. – BlackTea

Questions connexes