Je veux trier par délimiteur d'onglet avec ruby

Notez que le texte a été trié à partir du texte délimité par des tabulations pour le rendre plus facile à voir.

Tout d'abord, le texte délimité par des tabulations sous-jacent

profile.txt #LR utf-8 
john	m	19
micheal	m	28
abbie	f	31
dabid	m	17
claire	f	26

À gauche, "Nom, Sexe, Année" sont répertoriés séparés par des tabulations. Je voudrais les trier par nom.

Tout d'abord, vérifiez comment le texte lui-même est sorti.

 File.open("meibo.txt") do |text|
   text.each_line do |line|
    p line
  end
end

Lorsque vous développez le fichier avec

$ ruby example.rb
"john\tm\t19\n"
"micheal\tm\t28\n"
"abbie\tf\t31\n"
"dabid\tm\t17\n"
"claire\tf\t26\n"

Puisqu'il est exprimé comme, créez un tableau de chaque ligne à l'exclusion de l'espace de tabulation et du code de saut de ligne Tri et sortie en standard.

Écoulement brutal

  1. Ouvrez le fichier et rendez-le lisible
  2. Trier par nom
  3. Sortie standard

1. Ouvrez le fichier et chargez-le

Mettez chaque ligne dans le tableau une fois comme [nom, sexe, âge].

profile = []

 File.open("profile.txt") do |text|
   text.each_line do |line|
    profile << line.chomp.split("\t")
  end
end

Par .chomp pour supprimer \ n à la fin de chaque ligne et délimiteur de tabulation,.split ("\ t")sépare

$ ruby example.rb
[["john", "m", "19"],
["micheal", "m", "28"],
["abbie", "f", "31"],
["dabid", "m", "17"],
["claire", "f", "26"]]

De cette façon, le tableau «profile» a été parfaitement obtenu »[nom, sexe, âge]« et seulement les données nécessaires.

2. Trier par nom

Puisque ruby a une méthode sort_by, utilisez cette méthode pour trier par nom.

 profile_sort =  profile.sort_by{|man| man[0]}
pp profile_sort

Le résultat de sortie est

$ ruby example.rb
[["abbie", "f", "31"],
["claire", "f", "26"],
["dabid", "m", "17"],
["john", "m", "19"],
["micheal", "m", "28"]]

Et il a été trié en toute sécurité par ordre de nom.

3. Sortie standard

Lorsque vous atteignez ce point, sortez le tableau trié, redirigez-le et triez-le.

 profile_sort.each do |text|
  puts text.join("\t")
end

Concaténez les chaînes du tableau en les connectant avec \ t. Il sera délimité par des tabulations lors de la sortie avec put. De plus, met affichera un saut de ligne, donc la peine d'écrire met text.join (" \ t ") +" \ n " Vous n'avez pas besoin d'écrire un code de saut de ligne.

Faites cela et la sortie sera

$ ruby example.rb
abbie	f	31
claire	f	26
dabid	m	17
john	m	19
micheal	m	28

Oui, vous avez trié avec succès les fichiers délimités par des tabulations.

Recommended Posts

Je veux trier par délimiteur d'onglet avec ruby
[Ruby] Je veux faire un saut de méthode!
Je souhaite supprimer un fichier géré par Git
Je veux obtenir la valeur en Ruby
Je veux convertir des caractères ...
Je souhaite effectuer une factorisation prime rapide avec Ruby (ABC177E)
Je veux créer un fichier Parquet même en Ruby
[Ruby] Je souhaite inverser l'ordre de la table de hachage
Webpack et webpacker que je veux dire aux gens de Ruby maintenant
Je souhaite ajouter une fonction de navigation avec ruby on rails
Je veux limiter l'entrée en réduisant la plage de nombres
Je veux changer la valeur de l'attribut dans Selenium of Ruby
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
Je souhaite développer une application web!
Je veux écrire un joli build.gradle
Je souhaite éliminer les messages d'erreur en double
Je veux créer une application ios.android
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Je souhaite installer PHP 7.2 sur Ubuntu 20.04.
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
[Ruby] Je souhaite afficher les éléments publiés par ordre de date la plus récente
Je souhaite effectuer un traitement Group By avec Stream (group-by-count, group-by-sum, group-by-max)
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je souhaite cibler les champs statiques sur @Autowired
Je veux faire du développement d'équipe à distance
Essayez de trier les classes par type d'énumération
Exécuter R à partir de Java Je veux exécuter rJava
[Swift] Je veux dessiner des lignes de quadrillage (carrés)
Je souhaite envoyer un e-mail en Java.
Je souhaite terminer correctement l'installation de npm [2020]
Je veux utiliser java8 forEach avec index
Je veux var_dump le contenu de l'intention
Je souhaite transmettre APP_HOME pour me connecter à Gradle
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
rsync4j --Je veux toucher rsync en Java.
[Notions de base sur Ruby] J'ai essayé d'apprendre des modules (Chapitre 1)
Je veux jouer avec Firestore de Rails
Je veux être finalement même à kotlin
Je veux écrire rapidement de java vers sqlite
Je veux tronquer après la virgule décimale
Je veux réduire les erreurs simples. Pour vous commander.
Je souhaite effectuer un traitement d'agrégation avec spring-batch
[Rails] Je veux charger du CSS avec webpacker
[Ruby] Lorsque vous souhaitez remplacer plusieurs caractères