Explication du CSV et exemple d'implémentation dans chaque langage de programmation

Spécifications CSV

Le premier point important est que __ "CSV ne consiste pas seulement à lire un fichier et à le diviser ligne par ligne avec", "" __.

La RFC4180 est actuellement définie comme la spécification standard pour CSV.

http://www.kasai.fm/wiki/rfc4180jp http://www.ietf.org/rfc/rfc4180.txt

Cependant, il s'agit d'un suivi de celui publié en octobre 2005, et il est probable qu'il existe des différences par rapport à celles utilisées sur chaque site.

Les principales caractéristiques décrites dans cette spécification sont les suivantes.

・ Chaque enregistrement est séparé par un saut de ligne (CRLF) -Il peut y avoir ou non un saut de ligne à la fin de l'enregistrement à la fin du fichier. -La ligne d'en-tête peut exister ou non au début du fichier. -Chaque ligne et en-tête ont des champs séparés par des virgules. • Le nombre de champs doit être le même dans tout le fichier. -Le dernier champ ne doit pas se terminer par une virgule. -Chaque champ peut être ou non entre guillemets. -Les champs contenant des sauts de ligne doivent être placés entre guillemets. -Entrez les champs contenant des guillemets doubles entre guillemets doubles et ajoutez des guillemets avant les guillemets doubles dans le champ.

xxx,"test""test"

Exemple d'implémentation dans chaque langage de programmation

Un exemple de fonctionnement du CSV suivant dans chaque langage de programmation est présenté. Dans cet exemple, nous vérifierons comment le fichier CSV suivant peut être importé.

__test1.csv Exemple CSV commun __

test1.csv


Jack,12,guerrier,Explication 1
Brûler,17,Chevalier,Explication 2
Maam,15,Moine,Explication 3

__test2.csv Si la première ligne est un commentaire et que le champ contient des sauts de ligne, des guillemets doubles et des virgules __

test2.csv


#Nom,âge,classe,Dans l'explication(",)Mettre en
"Jack","12","guerrier",",Ou""Peut être entré"
"Brûler","17","Chevalier","Explication 2
Faites un saut de ligne"
"Maam","15","Moine","Explication 3"

__test3.csv Exemple où une ligne vide existe __

test3.csv


#Traitement des lignes blanches

"Jack","12","guerrier",",Ou""Peut être entré"
"Brûler","17","Chevalier","Explication 2

S'il y a un saut de ligne vide dans le guillemet double"
#Commentaires sur le chemin
"Maam","15","Moine","Explication 3"

__test4.csv Exemple où le nombre de colonnes dans chaque enregistrement est différent __

test4.csv


#Si le nombre de colonnes est différent

"Jack","12"
"Brûler"
"Maam","15","Moine","Explication 3"

Exemple d'implémentation en .NET (C #)

Exemple d'utilisation de TextFieldParser

Un exemple d'analyse utilisant TextField qui peut être utilisé en faisant référence à «Microsoft.VisualBasic» est illustré ci-dessous.

__CSV exemple de lecture __

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualBasic.FileIO;  //ajouter à

//C'est une spécification pour sauter les lignes vides
// http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.fileio.textfieldparser.readfields.aspx

namespace csvTest
{
    class Program
    {
        static void Main(string[] args)
        {
            dumpCsv("C:\\dev\\csv\\test1.csv");
            dumpCsv("C:\\dev\\csv\\test2.csv");
            dumpCsv("C:\\dev\\csv\\test3.csv");
            dumpCsv("C:\\dev\\csv\\test4.csv");

            Console.ReadLine();
        }

        static void dumpCsv(string file)
        {
            Console.WriteLine(file + "================================");
          
            TextFieldParser parser = new TextFieldParser(file,
                                                          System.Text.Encoding.GetEncoding("Shift_JIS"));
            parser.TextFieldType = FieldType.Delimited;
            parser.SetDelimiters(","); //Le délimiteur est une virgule
            parser.CommentTokens = new string[1] {"#"};
            int line = 0, col = 0;
            while (!parser.EndOfData)
            {
                ++line;
                col = 0;
                string[] row = parser.ReadFields(); //Lire une ligne
                Console.WriteLine("{0}", line);
                //L'élément de la ligne de tableau est la valeur de chaque champ dans la ligne de lecture
                foreach (string field in row)
                {
                    ++col;
                    Console.WriteLine("{0}:{1}", col, field);
                }
                Console.WriteLine("----------------------------");
            }
            parser.Close();
        }
    }
}

Résultat d'exécution


C:\dev\csv\test1.csv================================
1
1:Jack
2:12
3:guerrier
4:Explication 1
----------------------------
2
1:Brûler
2:17
3:Chevalier
4:Explication 2
----------------------------
3
1:Maam
2:15
3:Moine
4:Explication 3
----------------------------
C:\dev\csv\test2.csv================================
1
1:Jack
2:12
3:guerrier
4:,Ou"Peut être entré
----------------------------
2
1:Brûler
2:17
3:Chevalier
4:Explication 2
Faites un saut de ligne
----------------------------
3
1:Maam
2:15
3:Moine
4:Explication 3
----------------------------
C:\dev\csv\test3.csv================================
1
1:Jack
2:12
3:guerrier
4:,Ou"Peut être entré
----------------------------
2
1:Brûler
2:17
3:Chevalier
4:Explication 2
S'il y a un saut de ligne vide dans le guillemet double
----------------------------
3
1:Maam
2:15
3:Moine
4:Explication 3
----------------------------
C:\dev\csv\test4.csv================================
1
1:Jack
2:12
----------------------------
2
1:Brûler
----------------------------
3
1:Maam
2:15
3:Moine
4:Explication 3
----------------------------


À partir de ce résultat, on peut dire ce qui suit comme l'opération de TextFieldParser. -Pas besoin d'installer une bibliothèque spéciale. -Les lignes de commentaire peuvent être spécifiées en définissant CommentTokens. ・ Sautez les lignes vides. Cela ne fait pas exception, même lors des doubles citations. Ce comportement est voulu par la conception.  http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.fileio.textfieldparser.readfields.aspx -Il n'y a pas de fonction pour créer CSV.

Exemple d'utilisation de CsvHelper

Si vous rencontrez un problème avec la spécification de sauter des lignes vides dans TextParser, ou si vous devez créer un CSV, utilisez CsvHelper.

https://github.com/JoshClose/CsvHelper

Téléchargez-le à partir de ce qui précède et créez-le vous-même, ou exécutez la commande suivante dans Package Manager.

Install-Package CsvHelper

La vérification ici a été effectuée avec .NET 3.5, mais la bibliothèque prend en charge .NET 2.0 à 4.5.

__CSV exemple de lecture __

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using CsvHelper;

// .NET3.Validé par 5
namespace csvTest
{
    class Program
    {
        static void Main(string[] args)
        {
            dumpCsv("C:\\dev\\csv\\test1.csv");
            dumpCsv("C:\\dev\\csv\\test2.csv");
            dumpCsv("C:\\dev\\csv\\test3.csv");
            dumpCsv("C:\\dev\\csv\\test4.csv");
            Console.Read();
        }

        static void dumpCsv(string file)
        {
            Console.WriteLine(file + "================================");
            var parser = new CsvReader(new StreamReader(file,
                                                        System.Text.Encoding.GetEncoding(932)));
            parser.Configuration.Encoding = System.Text.Encoding.GetEncoding(932);
            parser.Configuration.AllowComments = true;
            parser.Configuration.Comment = '#';
            parser.Configuration.HasHeaderRecord = false;

            while (parser.Read())
            {
                for (var i = 0; i < parser.CurrentRecord.Length; ++i)
                {
                    Console.WriteLine("{0}:{1}", i, parser.CurrentRecord.ElementAt(i));
                }
                Console.WriteLine("----------------------------");
            }
            parser.Dispose();
        }
    }
}

Résultat d'exécution


C:\dev\csv\test1.csv================================
0:Jack
1:12
2:guerrier
3:Explication 1
----------------------------
0:Brûler
1:17
2:Chevalier
3:Explication 2
----------------------------
0:Maam
1:15
2:Moine
3:Explication 3
----------------------------
C:\dev\csv\test2.csv================================
0:Jack
1:12
2:guerrier
3:,Ou"Peut être entré
----------------------------
0:Brûler
1:17
2:Chevalier
3:Explication 2
Faites un saut de ligne
----------------------------
0:Maam
1:15
2:Moine
3:Explication 3
----------------------------
C:\dev\csv\test3.csv================================
0:Jack
1:12
2:guerrier
3:,Ou"Peut être entré
----------------------------
0:Brûler
1:17
2:Chevalier
3:Explication 2

S'il y a un saut de ligne vide dans le guillemet double
----------------------------
0:Maam
1:15
2:Moine
3:Explication 3
----------------------------
C:\dev\csv\test4.csv================================
0:Jack
1:12
----------------------------
0:Brûler
----------------------------
0:Maam
1:15
2:Moine
3:Explication 3
----------------------------



__CSV échantillon d'écriture __

            var csv = new CsvWriter(new StreamWriter("C:\\dev\\csv\\out.csv", false, System.Text.Encoding.GetEncoding(932)));
            csv.WriteField("Je suis Kagome");
            csv.WriteField(12);
            csv.WriteField(true);
            csv.WriteField("\",Symboles tels que");
            csv.NextRecord();

            csv.WriteField("2e ligne");
            csv.WriteField("Deux sauts de ligne\n\n mélanger");
            csv.NextRecord();

            csv.Dispose();

Fichier de sortie


Je suis Kagome,12,True,""",Symboles tels que"
2e ligne,"Deux sauts de ligne

Mélanger"

À partir de ce résultat, on peut dire ce qui suit comme le fonctionnement de CsvHelper. ・ Ne sautez pas même s'il y a une ligne vide. -Vous pouvez spécifier la présence ou l'absence de commentaires dans Configuration.AllowComments and Comments. -Vous pouvez spécifier s'il faut utiliser la première ligne comme en-tête dans Configuration.HasHeaderRecord. -Vous pouvez facilement créer un fichier CSV. -Bien que cela ne soit pas fait ici, vous pouvez également utiliser Mapping pour vous associer à un objet.

Exemple d'implémentation dans Excel VBA

Comment ouvrir CSV à l'aide d'Excel

Excel peut ouvrir CSV, alors implémentons-le en utilisant cette fonction.

Public Sub test()
    Call DumpCsv("C:\\dev\\csv\\test1.csv")
    Call DumpCsv("C:\\dev\\csv\\test2.csv")
    Call DumpCsv("C:\\dev\\csv\\test3.csv")
    Call DumpCsv("C:\\dev\\csv\\test4.csv")
End Sub

Private Sub DumpCsv(ByVal path As String)
    Debug.Print path & "=============================="
    Dim wkb As Workbook
    Dim wks As Worksheet
    Application.ScreenUpdating = False
    Set wkb = Application.Workbooks.Open(path)
    Application.Windows(wkb.Name).Visible = False
    Set wks = wkb.Sheets(1)
    
    Dim r As Long
    Dim c As Long
    Dim maxRow As Long
    Dim maxCol As Long
    maxRow = wks.Cells(1, 1).SpecialCells(xlLastCell).Row
    maxCol = wks.Cells(1, 1).SpecialCells(xlLastCell).Column
    For r = 1 To maxRow
        For c = 1 To maxCol
            Debug.Print c & ":" & wks.Cells(r, c).Value
        Next c
        Debug.Print "----------------------"
    Next r
    
    Call wkb.Close(False)
    Application.ScreenUpdating = True
End Sub

Résultat d'exécution


C:\\dev\\csv\\test1.csv==============================
1:Jack
2:12
3:guerrier
4:Explication 1
----------------------
1:Brûler
2:17
3:Chevalier
4:Explication 2
----------------------
1:Maam
2:15
3:Moine
4:Explication 3
----------------------
C:\\dev\\csv\\test2.csv==============================
1:#Nom
2:âge
3:classe
4:Dans l'explication("
5:)Mettre en
----------------------
1:Jack
2:12
3:guerrier
4:,Ou"Peut être entré
5:
----------------------
1:Brûler
2:17
3:Chevalier
4:Explication 2
Faites un saut de ligne
5:
----------------------
1:Maam
2:15
3:Moine
4:Explication 3
5:
----------------------
C:\\dev\\csv\\test3.csv==============================
1:#Traitement des lignes blanches
2:
3:
4:
----------------------
1:
2:
3:
4:
----------------------
1:Jack
2:12
3:guerrier
4:,Ou"Peut être entré
----------------------
1:Brûler
2:17
3:Chevalier
4:Explication 2

S'il y a un saut de ligne vide dans le guillemet double
----------------------
1:#Commentaires sur le chemin
2:
3:
4:
----------------------
1:Maam
2:15
3:Moine
4:Explication 3
----------------------
C:\\dev\\csv\\test4.csv==============================
1:#Si le nombre de colonnes est différent
2:
3:
4:
----------------------
1:
2:
3:
4:
----------------------
1:Jack
2:12
3:
4:
----------------------
1:Brûler
2:
3:
4:
----------------------
1:Maam
2:15
3:Moine
4:Explication 3
----------------------

À partir de là, lors de l'ouverture de CSV à l'aide d'Excel, ce qui suit peut être dit. -Les commentaires ne peuvent pas être contrôlés. -Depuis que CSV est ouvert dans la feuille sur Excel, l'opération de données peut être la même que Excel VBA normal. -Depuis qu'il est agrandi avec une feuille sur Excel, les performances seront inférieures à celles de l'accès aux données en mémoire.

Lors de l'utilisation d'ADO

Si vous faites référence à «Bibliothèque Microsoft ActiveX Data Objects x.x» dans les paramètres de référence, vous pouvez traiter CSV comme si vous travailliez avec une base de données.

Public Sub tstAdo()
    Call DumpCsvByADO("test1.csv")
    Call DumpCsvByADO("test2.csv")
    Call DumpCsvByADO("test3.csv")
    Call DumpCsvByADO("test4.csv")
    
End Sub
Private Sub DumpCsvByADO(ByVal path As String)
    Dim cnn As ADODB.Connection
    Set cnn = New ADODB.Connection
    cnn.Open ("Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                 "DBQ=C:\dev\csv\;" & _
                 "FirstRowHasNames=0;")
    Dim rs As ADODB.Recordset
    'FirstRowHasNames=Vous pouvez rendre l'en-tête inutile avec 0, mais cela ne fonctionne pas en raison d'un bogue.
    ' http://support.microsoft.com/kb/288343/ja
    'http://support.microsoft.com/kb/257819/JA
    Dim i As Long
    Set rs = cnn.Execute("SELECT * FROM " & path)
    Debug.Print path & "=============================="
    Do While Not rs.EOF
        For i = 0 To rs.Fields.Count - 1
            Debug.Print rs.Fields(i).Value
        Next i
        Debug.Print "-------------------------"
        rs.MoveNext
    Loop
    rs.Close
    cnn.Close
    
    Set cnn = Nothing
    Set rs = Nothing
End Sub

Résultat d'exécution


test1.csv==============================
Brûler
 17 
Chevalier
Explication 2
-------------------------
Maam
 15 
Moine
Explication 3
-------------------------
test2.csv==============================
Jack
12
guerrier
,Ou"Peut être entré
Null
-------------------------
Brûler
17
Chevalier
Explication 2
Faites un saut de ligne
Null
-------------------------
Maam
15
Moine
Explication 3
Null
-------------------------
test3.csv==============================
Null
Null
Null
Null
-------------------------
Jack
12
guerrier
,Ou"Peut être entré
-------------------------
Brûler
17
Chevalier
Explication 2

S'il y a un saut de ligne vide dans le guillemet double
-------------------------
#Commentaires sur le chemin
Null
Null
Null
-------------------------
Maam
15
Moine
Explication 3
-------------------------
test4.csv==============================
Null
Null
Null
Null
-------------------------
Jack
12
Null
Null
-------------------------
Brûler
Null
Null
Null
-------------------------
Maam
15
Moine
Explication 3
-------------------------

À partir de ce résultat, on peut dire ce qui suit lors de l'utilisation d'ADO. -Peut gérer les fichiers CSV comme une base de données. -Les champs qui n'existent pas seront Null. ・ Les commentaires ne fonctionnent pas. -La première ligne est toujours traitée comme un en-tête. Et cela ne peut être évité en raison d'un bug.  http://support.microsoft.com/kb/288343/ja  http://support.microsoft.com/kb/257819/JA

Exemple d'implémentation Python

module csv

Dans le cas de Python, il peut être supporté par le module csv inclus en standard. http://docs.python.jp/2/library/csv.html

__CSV lecture __

# -*- coding: utf-8 -*-
import csv

def dumpCsv(path):
    print ('%s==============' % path)
    reader = csv.reader(open(path,'rb'))
    for row in reader:
        print (', '.join(row))


dumpCsv('C:\\dev\\csv\\test1.csv')
dumpCsv('C:\\dev\\csv\\test2.csv')
dumpCsv('C:\\dev\\csv\\test3.csv')
dumpCsv('C:\\dev\\csv\\test4.csv')

Résultat d'exécution


C:\dev\csv\test1.csv==============
Jack, 12,guerrier,Explication 1
Brûler, 17,Chevalier,Explication 2
Maam, 15,Moine,Explication 3
C:\dev\csv\test2.csv==============
#Nom,âge,classe,Dans l'explication(", )Mettre en
Jack, 12,guerrier, ,Ou"Peut être entré
Brûler, 17,Chevalier,Explication 2
Faites un saut de ligne
Maam, 15,Moine,Explication 3
C:\dev\csv\test3.csv==============
#Traitement des lignes blanches

Jack, 12,guerrier, ,Ou"Peut être entré
Brûler, 17,Chevalier,Explication 2

S'il y a un saut de ligne vide dans le guillemet double
#Commentaires sur le chemin
Maam, 15,Moine,Explication 3
C:\dev\csv\test4.csv==============
#Si le nombre de colonnes est différent

Jack, 12
Brûler
Maam, 15,Moine,Explication 3

__csv écrire __

writer = csv.writer(open('C:\\dev\\csv\\out.csv', 'wb'),quoting=csv.QUOTE_ALL)
writer.writerow(['test', 'Ah ah\nAh ah', 'symbole",'])
writer.writerow(['test'])

Résultat de sortie


"test","Ah ah
Ah ah","symbole"","
"test"

À partir des résultats ci-dessus, ce qui suit peut être dit lors de l'utilisation du module csv. ・ Les commentaires ne peuvent pas être traités. -Peut gérer les virgules, les sauts de ligne et les guillemets doubles lorsqu'ils sont placés entre guillemets. ・ CSV peut être créé facilement.

Exemple d'implémentation de Node.js

Un exemple d'utilisation de node-csv.

Dans le cas de Node.js, CSV peut être lu et écrit à l'aide de node-csv. Si vous utilisez également un code de caractère tel que cp932, utilisez également le module iconv.

__ Comment installer __

Installez node-csv

npm install csv

installation d'iconv

npm install iconv

__Exemple de lecture CSV __

var csv = require('csv');
var fs = require('fs');
var Iconv = require('iconv').Iconv;
var conv = new Iconv('cp932','utf-8');
dumpCsv('test1.csv');
dumpCsv('test2.csv');
dumpCsv('test3.csv');
dumpCsv('test4.csv');

function dumpCsv(path) {
  fs.readFile(path, function(err, sjisBuf) {
    var buf = conv.convert(sjisBuf);
    console.log(path + '================');
    csv.parse(buf.toString(),{comment:'#'}, function(err, data) {
      console.log(err);
      console.log(data);
    });
  });
}

Résultat d'exécution


test1.csv================
null
[ [ 'Jack', '12', 'guerrier', 'Explication 1' ],
  [ 'Brûler', '17', 'Chevalier', 'Explication 2' ],
  [ 'Maam', '15', 'Moine', 'Explication 3' ] ]
test2.csv================
[Error: Invalid closing quote at line 1; found "le" instead of delimiter ","]
undefined
test3.csv================
null
[ [ 'Jack', '12', 'guerrier', ',Ou"Peut être entré' ],
  [ 'Brûler', '17', 'Chevalier', 'Explication 2\r\n\r\n S'il y a un saut de ligne vide entre guillemets' ],
  [ 'Maam', '15', 'Moine', 'Explication 3' ] ]
test4.csv================
null
[ [ 'Jack', '12' ], [ 'Brûler' ], [ 'Maam', '15', 'Moine', 'Explication 3' ] ]

Le résultat de la lecture de test2.csv est une erreur. csv.parse ne peut pas lire les données avec des guillemets doubles dans les commentaires comme suit.

#Nom,âge,classe,Dans l'explication(",)Mettre en

Pour résoudre ce problème, vous devez appliquer le correctif suivant à node_modules / csv / node_modules / csv-parse / lib / index.js.

--- node_modules/csv/node_modules/csv-parse/lib/index_bk.js	2014-06-20 17:36:56.000000000 +0900
+++ node_modules/csv/node_modules/csv-parse/lib/index.js	2014-07-22 22:06:12.826116745 +0900
@@ -253,7 +253,7 @@
         this.closingQuote = i;
         i++;
         continue;
-      } else if (!this.field) {
+      } else if (!this.field && !this.commenting) {
         this.quoting = true;
         i++;
         continue;

Le résultat lorsque cela est appliqué est le suivant.

Résultat d'exécution


test2.csv================
null
[ [ 'Jack', '12', 'guerrier', ',Ou"Peut être entré' ],
  [ 'Brûler', '17', 'Chevalier', 'Explication 2\r\n Faites un saut de ligne' ],
  [ 'Maam', '15', 'Moine', 'Explication 3' ] ]

__Exemple d'écriture CSV __

var csv = require('csv')
var data = [
  ['xx', 'Ah ah', 1],
  ['id', '"atagfa,asteata','#teat','aaa'],
  ['newline', 'tests\n\ntesat']
];
console.log(data);
csv.stringify(data, {quoted: true}, function(err, output) {
  console.log(err);
  console.log(output);
});

Chaîne de caractères créée


"xx","Ah ah","1"
"id","""atagfa,asteata","#teat","aaa"
"newline","tests

tesat"

À partir des résultats ci-dessus, ce qui suit peut être dit lorsque node-csv est utilisé.

-Vous pouvez lire et écrire CSV en utilisant node-csv. ・ Il est également possible de gérer les commentaires. -Cependant, comme il y a des bogues ou des spécifications autour des commentaires comme expliqué ci-dessus, créez et appliquez le correctif vous-même ou n'utilisez pas les commentaires.

Considérer la conception CSV

Ici, nous examinerons comment concevoir le format du fichier CSV.

Il est souhaitable de spécifier le fichier d'en-tête afin que vous puissiez comprendre la signification des champs simplement en regardant le fichier CSV. Pour le moment, il vaut mieux le traiter comme un commentaire. J'ai regardé quelques bibliothèques, mais par défaut j'ai souvent commenté "#".

Un autre avantage de l'utilisation de CSV est qu'il est facile de modifier les données dans Excel. C'est un grand attrait de pouvoir créer facilement des données tant que vous pouvez utiliser Excel, et vous devez être prudent lorsque vous utilisez un format de données qui détruit ses mérites.

Représentation hiérarchique des données

Ici, nous considérons une méthode d'expression des données de service, y compris les employés au format CSV, comme suit. 無題.png

Traiter comme un fichier séparé

Comment diviser en un fichier parent et un fichier enfant

Le plus simple consiste à traiter les données du service et les données des employés comme des CSV distincts.

département.csv


#Nom du département,adresse de rue,numéro de téléphone
Ventes,Tokyo,12345
développement de,Osaka,34566
la gestion,Pays de rêve,44444

Employé.csv


#Nom de l'employé,Département d'affiliation,Date d'embauche,Email
Ailes du ciel,Ventes,1999/1/2,[email protected]
Taro Misaki,Ventes,1999/1/3,[email protected]
Joseph Joe Star,développement de,2000/1/1,[email protected]
Sorajo Shotaro,développement de,2000/1/3,[email protected]
Shimakosaku,la gestion,2003/1/1,[email protected]

L'inconvénient est que la relation parent-enfant des données est difficile à comprendre car les fichiers ne sont pas complètement séparés et liés.

Prévoyez de préparer plusieurs fichiers pour les enfants

Une autre façon de réfléchir à la façon de le gérer en tant que fichier séparé consiste à diviser le fichier de l'employé en départements et à les lier au département .csv.

Ventes.csv


#Nom du département,adresse de rue,numéro de téléphone,Dossier d'employé
Ventes,Tokyo,12345,Ventes社員.csv
développement de,Osaka,34566,développement de社員.csv
la gestion,Pays de rêve,44444,la gestion社員.csv

Employé de vente.csv


Ailes du ciel,1999/1/2,[email protected]
Taro Misaki,1999/1/3,[email protected]

Employé de développement.csv


Joseph Joe Star,2000/1/1,[email protected]
Sorajo Shotaro,2000/1/3,[email protected]

Employé de direction.csv


Shimakosaku,2003/1/1,[email protected]

Ce mérite est que le CSV du département du parent est lié au CSV de l'employé afin que la relation parent-enfant soit facile à comprendre, et comme il n'est pas nécessaire de décrire le nom du parent comme le nom du département dans chaque enregistrement, le nombre de fichiers augmente mais la capacité totale Peut être réduit.

Traiter comme un seul fichier

Prenons le cas où les départements et les employés doivent être traités dans le même dossier.

Tout d'abord, examinez s'il est vraiment nécessaire de l'exprimer dans un fichier CSV. Si XML est correct, il existe un moyen de l'adopter, et si vous pouvez diviser le fichier en plusieurs parties, divisez-le.

Cependant, la modification de XML n'est pas aussi simple que CSV et il est un fait qu'il existe une demande pour combiner des fichiers en un seul, comme lors du téléchargement de fichiers sur un serveur. Ici, nous examinons comment combiner des données hiérarchiques en un seul fichier.

Dans ce cas, la spécification standard «le nombre de champs doit être le même dans tout le fichier» ne peut pas être satisfaite.

Classer les données dans la première colonne

Spécifiez s'il s'agit de "service" ou "employé" avec le premier champ comme catégorie de données.

Employé du département.csv


département,Ventes,Tokyo,12345
département,développement de,Osaka,34566
département,la gestion,Pays de rêve,44444
Employé,Ailes du ciel,Ventes,1999/1/2,[email protected]
Employé,Taro Misaki,Ventes,1999/1/3,[email protected]
Employé,Joseph Joe Star,développement de,2000/1/1,[email protected]
Employé,Sorajo Shotaro,développement de,2000/1/3,[email protected]
Employé,Shimakosaku,la gestion,2003/1/1,[email protected]

Lorsque la quantité de données augmente réellement, on pense que les départements et les employés seront confus et difficiles à comprendre.

Inclure toutes les informations sur l'enfant dans un seul champ

Stockez tous les employés dans une ligne de rayon. Préparez autant de champs qu'il y a d'employés sur le terrain après les informations du département. Incluez toutes les informations sur les employés dans un seul champ.

Employé du département.csv


Ventes,Tokyo,12345,"Ailes du ciel,1999/1/2,[email protected]","Taro Misaki,1999/1/3,[email protected]"
développement de,Osaka,34566,"Joseph Joe Star,2000/1/1,[email protected]","Sorajo Shotaro,2000/1/3,[email protected]"
la gestion,Pays de rêve,44444,"Shimakosaku,2003/1/1,[email protected]"

Cette méthode rend la saisie difficile pour l'utilisateur lors de la modification des données dans Excel. Par exemple, les adresses de service peuvent être facilement créées en copiant et collant des cellules, mais les adresses e-mail des utilisateurs ne peuvent pas être copiées et collées par cellules.

Séparez les données enfants avec des caractères spéciaux

Stockez tous les employés dans une ligne de rayon À ce moment-là, le caractère de début et le caractère de fin sont définis afin que les données d'employé puissent être distinguées. Par exemple, si le champ contient les caractères «\ $ Sky Wings», on suppose que les données de l'employé: Sky Wings sont stockées jusqu'à ce que «\ $» apparaisse.

Employé du département.csv


Ventes,Tokyo,12345,$Ailes du ciel,1999/1/2,[email protected],$,$Taro Misaki,Ventes,1999/1/3,[email protected],$
développement de,Osaka,34566,$Joseph Joe Star,2000/1/1,[email protected],$,$Sorajo Shotaro,développement de,2000/1/3,[email protected],$
la gestion,Pays de rêve,44444,$Shimakosaku,2003/1/1,[email protected],$

La modification avec Excel est plus facile car la copie de cellule est activée. Cependant, il est nécessaire de déterminer des règles telles que la détermination des caractères spéciaux, et il est nécessaire de faire correspondre la connaissance avec le créateur de données.

Résumé des données hiérarchiques

Étant donné que chacun présente des avantages et des inconvénients, il est nécessaire de déterminer ce qu'il faut prioriser, notamment en supprimant CSV et en utilisant XML.

Recommended Posts

Explication du CSV et exemple d'implémentation dans chaque langage de programmation
Explication de la distance d'édition et de l'implémentation en Python
Explication et mise en œuvre de SocialFoceModel
Explication et mise en œuvre de PRML Chapitre 4
Explication et implémentation de l'algorithme ESIM
Explication et mise en œuvre du perceptron simple
Explication et implémentation de l'algorithme Decomposable Attention
Traitement pleine largeur et demi-largeur des données CSV en Python
Le Japon peut être des galapagos en termes de langage de programmation
Types de prétraitement dans le traitement du langage naturel et leur puissance
Implémentation du tri rapide en Python
Coordination de chaque processus dans MPI et mise en mémoire tampon de la sortie standard
Explication mathématique de la recherche de dichotomie et de trisection et méthode de mise en œuvre sans bogues
Liste des solveurs et modélisateurs de conception linéaire (LP) disponibles en Python
Réfléchissez sérieusement au langage à utiliser dans l'enseignement de la programmation et l'enseignement de la programmation.
Introduction et mise en œuvre de la fonction d'activation
Algorithme de tri et implémentation en Python
Implémentation du jeu de vie en Python
Démarrez avec SQLite dans un langage de programmation
Lignes directrices pour se réincarner dans le monde du développement de programmation Linux (langage C / C ++)
Nombre maximum de paramètres de fonction pouvant être définis dans chaque langue
Implémentation du filtre à particules par Python et application au modèle d'espace d'états
Implémenter un modèle avec état et comportement (3) - Exemple d'implémentation par décorateur
Le langage de programmation le plus recherché en 2020
Réponses et impressions de 100 chocs de traitement linguistique - Partie 1
Exemple d'utilisation de variables de classe et de méthodes de classe
C'est une implémentation de ConnectionPool dans redis.py
Quel type de langage de programmation est Python?
Captures d'écran de la pêche sur le Web avec du sélénium et Chrome.
Séparation de la conception et des données dans matplotlib
Résumé des modules et des classes dans Python-TensorFlow2-
Exemple pratique d'architecture hexagonale en Python
Statut de chaque système de traitement Python en 2020
Projet Euler # 1 "Multiple de 3 et 5" en Python
Différences de comportement de chaque langage LL lorsque l'index de la liste est ignoré
Python: Apprentissage en profondeur dans le traitement du langage naturel: Implémentation d'un système de sélection de phrases de réponses