Je dois analyser un fichier texte délimité par des tabulations avec Ruby pour en extraire des données. Pour une raison inconnue, certaines colonnes ne sont pas utilisées et sont essentiellement des espaceurs; Je voudrais ignorer ces colonnes car je n'ai pas besoin de leur sortie (cependant je ne peux pas ignorer toutes les colonnes vides car certaines colonnes légitimes ont des valeurs vides). Je connais déjà les indices de ces colonnes (par exemple les colonnes 6, 14, 24 et 38). Bien que je puisse simplement ajouter un conditionnel pendant que j'analyse le fichier et disse analyser ceci à moins que ce ne soit une de ces colonnes, cela ne semble pas très "Rubyish" - y a-t-il une façon meilleure et plus élégante de gérer ce ? RegExps, peut-être? J'ai pensé à faire quelque chose comme [6, 14, 24, 38].each { |x| columns.delete_at(x) }
pour supprimer les colonnes inutilisées, mais cela va me forcer à redéterminer les indices des colonnes dont j'ai réellement besoin. Ce que je voudrais vraiment faire, c'est faire une boucle sur l'ensemble, en vérifiant l'index de la colonne actuelle et l'ignorer si c'est l'un des "mauvais". Cependant, il semble très moche d'avoir le code comme unless x == 6 || x == 14 || x == 24 || x == 38
Comment passer certaines colonnes lors de l'analyse d'un fichier texte avec Ruby?
Répondre
Pas besoin d'un conditionnel massif comme ça.
bad_cols = [6, 14, 24, 38]
columns.each_with_index do |val,idx|
next if bad_cols.include? idx
#process the data
end
Cool, j'avais lu à propos de each_index, je ne savais pas qu'il y avait aussi each_with_index. Merci!! –
Je pense que ce que je devrais probablement faire au lieu d'extraire les données du fichier lui-même serait simplement de l'ouvrir et de supprimer les lignes dont je n'ai pas besoin; Je prévois de le charger dans une base de données de toute façon, mais je ne veux pas supprimer manuellement les lignes inutilisées chaque fois que je dois le charger. –
- 1. Trier à l'aide de certaines colonnes
- 2. HTML comment passer à travers des colonnes
- 3. Comment afficher uniquement certaines colonnes d'une table de données?
- 4. Comment copier une structure de répertoires dans ruby, à l'exclusion de certaines extensions de fichier
- 5. Lecture d'un fichier avec Ruby
- 6. Comment exporter des colonnes de texte 'lookal date' vers csv
- 7. Comment passer tableau en php à ruby?
- 8. Ruby win32ole - comment passer un paramètre VARIANT?
- 9. Passer le fichier .xsd lors de la recherche
- 10. Lecture de la ligne de fichier précédente avec Ruby
- 11. Recherche plein texte SQL avec des colonnes de clé étrangères
- 12. Exclure certaines extensions de fichier lors de l'obtention de fichiers à partir d'un répertoire
- 13. SQL: Comment sélectionner uniquement les lignes avec une valeur unique sur certaines colonnes?
- 14. Comment changer le titre de certaines entrées de texte en fonction d'une radio avec jquery?
- 15. Comment passer un fichier dans PHP CLI?
- 16. Ruby: chaîne de guillemets automatiques, pas d'autres données, lors de l'écriture dans un fichier?
- 17. Comment passer deux paramètres lors de l'utilisation de std :: mem_fun?
- 18. Comment nettoyer les colonnes mal alignées dans du texte?
- 19. Préférer certaines extensions de fichier avec l'achèvement du nom de fichier Emacs
- 20. gridview: Fichier modèle dynamique avec zone de texte
- 21. Sélectionner uniquement certaines colonnes d'une table sur un LEFT JOIN
- 22. mysql recherche plein texte avec des colonnes nulles
- 23. Colonnes de texte énumérées dans SQL
- 24. Ruby - Passer des blocs à des méthodes
- 25. Comment spécifier le codage du fichier de sortie dans Ruby?
- 26. Lecture de la ligne précédente du fichier avec Ruby
- 27. Interrogation pour lignes consécutives avec certaines caractéristiques
- 28. Comment passer l'ID avec Html.BeginForm()?
- 29. Implémentation de workflows xaml purs avec certaines exigences
- 30. Comment traiter les fichiers texte droits irréguliers avec de nombreuses colonnes supprimées dans SSIS ou un autre outil?
Notez que "[6, 14, 24, 38] .each {| x | columns.delete_at (x)}" se terminerait très mal pour vous. "[6, 14, 24, 38] .reverse_each {| x | columns.delete_at (x)}" a de meilleures chances. Voir pourquoi? –