J'ai une application où je permet aux utilisateurs d'importer des données CSV.
Tout fonctionne jusqu'à ce que les utilisateurs commençaient à importer des données avec des lignes vierges dans le fichier CSV. J'utilise ce qui suit pour saisir les lignes hors du fichier CSV: p> Je pensais que si j'étais ajouté la possibilité de skip_blanks que cela ne le ferait que mais il n'a pas . Des idées sur la façon dont je peux ignorer les rangées vierges. p> merci! p> p>
5 Réponses :
Ceci devrait fonctionner
CSV.open(import_file, skip_blanks: true, headers: true).reject { |row| row.to_hash.values.all?(&:nil?) }
CSV.readlines(import_file, skip_blanks: true, headers: true).reject { |row| row.to_hash.values.all?(&:nil?) }
C'est une bonne réponse, mais existe-t-il de toute façon de faire la même chose, mais utilisez plutôt des readlines. (Je préférerais m'en tenir à cela parce que l'importateur de CSV dépend du format que les readlines fournissent les données de).
@Grahamjackson a mis à jour la réponse pour utiliser les readlines comme vous l'avez demandé, si cela fonctionne pouvez-vous uplifier et accepter la réponse?
Merci pour l'aide. Cela ne résout pas mon problème, mais je l'apprécie et je l'opposerai, car cela pourrait aider quelqu'un d'autre. Je dois supprimer les valeurs null mais je retourne toujours un objet CSV. Cette solution retournera un tableau.
@Grahamjackson laissez-moi modifier plus, vous avez donc vos objets CSV
Merci. La nouvelle solution que vous avez fournie fournit une collection d'objets CSV mais ne finit pas en supprimant les lignes avec des valeurs nulles.
@Grahamjackson bien avec mon test CSV Cela le supprimez, j'ai besoin d'attraper un peu de sommeil, j'espère avoir aidé :-)
OK, j'ai donc compris comment obtenir les résultats en tant que tableau d'objets CSV grâce à votre solution. Quelque chose comme ça: 'CSV.Readlines (Import_File, Skip_Blanks: True, en-tête: True) .Reject {| rangée | rangée.to_hash.values.all? (&: nil?)} '
Le bloc .reject peut-il être utilisé et renvoyer également un objet de tableau CSV :: Je joue avec cela et je retourne toujours un tableau.
Ceci renvoie un objet CSV :: Table. p>
Csv.parse (importateur_file, en-tête: true, skip_blanks: true) .Delete_if {| rangée | rangée.to_hash.values.all? (&: vide?)}
code> p>
le vierge? code> était une belle solution pour moi, puis fonctionne pour "", "et Nil Row Data
Si vous souhaitez également filtrer les colonnes qui incluent uniquement les blanchissures utilisent:
row.all? { |column| column.nil? || column.strip.empty? }
Voici comment j'ai géré Supprimer les lignes vierges de CSV:
table = CSV.parse(csv_text, headers: true)
table.delete_if { |row| row.to_hash.values.all?(&:blank?) }
La solution dépend si vous lisez le CSV avec ou sans en-têtes, et si vous souhaitez continuer à travailler avec un objet sans en-tête, vous obtenez des lignes qui ressemblent à quelque chose comme: p> avec des en-têtes: P> CSV :: Tableau code> ou si vous êtes satisfait d'un tableau de CSV :: rangée code> table.delete_if { |row| row.to_hash.values.all?(&:nil?) }
Êtes-vous sûr que les utilisateurs fournissent des lignes vides, les fichiers CSV pourraient être très drôles parfois
Veuillez essayer ce formulaire:
CSV.New ((Open Import_File), En-têtes: True, Skip_blanks: True) .Readlines Code>@majioa je viens d'essayer cela mais a toujours des lignes vides. J'ai bouclé à travers le résultat et j'ai encore quatre rangées vides qui apparaissent comme ça, ",", "
Vous devriez éviter d'utiliser des objets de Ruby Io, sauf que vous êtes certain de le fermer, il est donc préférable que vous utilisiez plutôt .Open, les délégués à lire quels appels sont ouverts et appelle une nouvelle source de vue ici GITUB.COM/RUBY/RUBY/BLOB/...
@Grahamjackson Ces lignes ne sont pas vides "," est quatre valeurs séparées par des virgules
@Grahamjackson vient de poster un code de travail ci-dessous