Conversion du fichier TSV en fichier CSV (avec BOM) en Ruby

introduction

Il s'agit d'une méthode de conversion d'un fichier délimité par des tabulations (fichier TSV) dans Ruby en un fichier CSV avec BOM.

table des matières

  1. Code d'achèvement
    1. Création d'un fichier CSV avec BOM
  2. Lecture de données dans un fichier TSV
    1. Lire et écrire ligne par ligne en CSV
  3. Exécutez le programme

0. Code d'achèvement

tsv_to_csv.rb



require 'csv'

#Créez un fichier CSV et ajoutez bom.
File.write("meibo.csv", "\uFEFF")

# 'meibo2.txt'Lisez les informations ci-dessus ligne par ligne, transformez-les en un tableau avec split et placez-les ligne par ligne dans le fichier CSV.
CSV.open("meibo.csv", "a", force_quotes: true ) do |meibocsv|
  File.foreach('meibo.txt') do |student|
    meibocsv << student.chomp.split("\t", -1)
  end
end

1. 1. Création d'un fichier CSV avec BOM

BOM (Byte order mark) est quelques octets de données qui peuvent être atteints au début du texte encodé au format d'encodage Unicode. Excel tente d'ouvrir un fichier CSV avec Shift-JIS par défaut, donc UTF-8 provoquera des caractères déformés. Pour contourner ce problème, vous pouvez éviter les caractères déformés en faisant reconnaître à Excel qu'il est écrit en UTF-8 en ajoutant une nomenclature lors de la sortie en UTF-8. La nomenclature est jointe comme suit.

File.write("meibo.csv", "\uFEFF")

2. Lecture de données dans un fichier TSV

Le fichier TSV à lire est le suivant.

meibo.txt


john	m	18
paul	m	20
alice	f	15
dabid	m	17
jasmin	f	17

J'ai lu meibo.txt dans lequel les données de format délimité par des tabulations sont écrites, mais je voudrais prendre la méthode d'écriture d'une ligne lors de la lecture d'une ligne. Après avoir converti une ligne de données délimitées par des tabulations en un tableau avec fractionnement, écrivez-le dans le fichier CSV tel quel.

File.foreach('meibo.txt') do |student|
(Fichier CSV)<< student.chomp.split("\t", -1)
end

3. 3. Lire et écrire ligne par ligne en CSV

Si vous insérez le code ci-dessus dans CSV.open, vous pouvez lire et écrire une ligne. Fondamentalement, lors du passage d'un fichier délimité par des tabulations à un fichier CSV, il est traité ligne par ligne. Cela permet d'éviter que la mémoire ne soit dépassée même si les données sont énormes, par exemple 10 millions de lignes.

CSV.open("meibo.csv", "a", force_quotes: true ) do |meibo_csv|
  File.foreach('meibo.txt') do |student|
    meibo_csv << student.chomp.split("\t", -1)
  end
end

À propos, -1 est passé au deuxième argument (limite) de split. La valeur de ce deuxième argument est 0 par défaut, ce qui supprime la chaîne de caractères vide à la fin du tableau. Cela ne fonctionne pas lorsque le TSV a un champ vide. Vous pouvez le résoudre en passant -1.

4. Exécutez le programme

% ruby tsv_to_csv.rb 

Un fichier CSV avec des données écrites est généré.

meibo.csv


"john","m","18"
"paul","m","20"
"alice","f","15"
"dabid","m","17"
"jasmin","f","17"

Correctement converti en fichier CSV séparé par des virgules.

Recommended Posts

Conversion du fichier TSV en fichier CSV (avec BOM) en Ruby
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Conversion de JSON en TSV et TSV en JSON avec Ruby
Placez les fichiers CSV contenant "'" et "" "dans Ruby 2.3 dans MySQL
Importation CSV avec BOM
Convertissez de gros fichiers XLSX en CSV avec Apache POI
Comment itérer indéfiniment en Ruby
Comment installer Bootstrap dans Ruby
Gérer les fichiers CSV téléchargés sur GCS
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
Une histoire sur la conversion des codes de caractères de UTF-8 en Shift-jis en Ruby
Comment insérer un traitement avec n'importe quel nombre d'éléments dans le traitement itératif dans Ruby
Comment partager des fichiers avec Docker Toolbox
Analyse CSV avec des caractères de saut de champ
Java-Comment comparer des fichiers image en binaire
Convertir des fichiers SVG en fichiers PNG en Java
Ruby: CSV :: Comment utiliser la note de tableau
Un script qui crée yaml à partir de CSV pour mettre les données initiales dans Rails with Fixtures
[Ruby] Clé de base pour être fort dans la refactorisation
[Ruby] Comment convertir un fichier CSV en Yaml (Yml)
[Rails] Différentes manières d'écrire dans des fichiers de départ
Essayez d'intégrer Ruby et Java avec Dapr
Comment mettre à jour un fichier prédéfini dans un conteneur Docker
Essayez d'obtenir la clé API de redmine avec ruby
AtCoder ABC127 D hash à résoudre avec Ruby 2.7.1
Comment sortir un fichier de ressources avec spring-boot
Scraping Yahoo News avec [Ruby + Nokogiri] → Enregistrer CSV
Comment créer la blockchain la plus simple de Ruby
Graver des fichiers sur CD / DVD avec Ubuntu 18.04 LTS
Comment implémenter la pagination dans GraphQL (pour ruby)
Je veux obtenir la valeur en Ruby
Je souhaite renvoyer un objet au format CSV avec en-tête et filtre multilignes en Java
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby