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.
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
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")
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
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.
% 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