> Tech > Valeurs séparées par des virgules (CSV)

Valeurs séparées par des virgules (CSV)

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

La plupart des applications base de données et tableur peuvent exporter leurs données en format CSV (comma-separated value). Certains langages de programmation, comme Visual Basic (VB), peuvent lire et écrire des fichiers directement en format CSV. CSV est un format simple destiné à l’échange de données et il est présent

Valeurs séparées par des virgules (CSV)

dans des millions d’applications de par le monde.

Un fichier CSV est un fichier texte dans lequel chaque ligne de texte est segmentée en champs. Chaque champ est de longueur variable et séparé des autres par des virgules. Comme les champs contiennent souvent eux-mêmes des virgules, des guillemets sont généralement placés de part et d’autre d’un champ caractère. Tout ce qui se trouve entre ces guillemets est un champ. La figure 1 montre un exemple d’enregistrement provenant d’un fichier CSV.

Chaque année, à la période de Noël, ma société envoie nos catalogues de boîtes de cadeaux. Nous envoyons notre liste de mailing à un imprimeur qui la traite au travers de la base de données National Change of Address (NCOA) de l’U.S. Postal Service. Il imprime ensuite les adresses sur les catalogues et les envoie par courrier.

Après cette opération, l’imprimeur m’envoie un fichier CSV contenant les mises à jour apportées à la liste de mailing. Il arrive que la liste soit envoyée sur un CD-ROM ou sur une disquette. D’autres fois, il l’envoie par courrier électronique ou m’invite à la télécharger sur son serveur FTP.

J’utilise ensuite ce fichier pour mettre à jour notre base de données iSeries. A cet effet, j’ai créé un programme de service, CSVR4, qui lit un fichier CSV. La figure 2 montre ce programme de service. Les prototypes des sous-procédures dans ce programme de service sont placés dans un membre séparé afin que je puisse facilement les copier (/COPY) dans des programmes RPG quand je voudrai les utiliser. Le membre /COPY n’est pas imprimé dans cet article parce que vous pouvez glaner les prototypes à partir des interfaces de procédure. Toutefois, vous pouvez télécharger la totalité du code source pour tout ce qui se trouve dans cet article sur www.itpro.fr Club abonnés.

La routine CSV_open() fait deux choses. Elle utilise l’API fopen() pour ouvrir le fichier texte (A en figure 2) et elle crée une structure de données. Celle-ci contient toute l’information concernant ce fichier particulier, et elle est transmise à chaque sous-procédure dans le programme de service. Dans le membre /COPY, j’ai créé un modèle pour cette structure de données et j’utilise toujours le mot-clé LIKEDS pour y faire référence. De cette façon, je peux maintenir l’information concernant ce fichier d’une routine à l’autre et je peux déclarer des structures de données séparées pour chaque fichier CSV que je veux lire. Grâce à cette méthode, ce programme de service peut parfaitement avoir de nombreux fichiers CSV ouverts à la fois.

Chaque enregistrement dans un fichier CSV est une ligne provenant d’un fichier texte. La routine CSV_loadrec() charge la ligne suivante du disque dans la structure de données (B en figure 2) et élimine les caractères retour chariot et saut de ligne à droite de l’enregistrement (C en figure 2).

La sous-procédure CSV_getfld() examine l’enregistrement qui est maintenant stocké dans la variable peCSV.buf (D en figure 2), à la recherche de virgules et de guillemets. Elle copie les données de champs provenant de l’enregistrement dans un paramètre appelé peFldData afin que l’appelant puisse utiliser les données. La routine CSV_close() (E en figure 2) est appelée pour fermer le fichier stream quand vous aurez fini d’y lire des enregistrements.

La figure 3 montre un programme qui lit ce fichier CSV et s’en sert pour mettre à jour ma liste de mailing, qui est un fichier physique. La sous-procédure LoadFields() lit chaque champ de l’enregistrement CSV et le met dans une structure de données (A en figure 3). (Vous avez sûrement remarqué que je suis un inconditionnel des structures de données !) La sous-procédure ProcessRec() utilise cette structure de données pour mettre à jour ma liste de mailing (B en figure 3). La ligne principale du programme pilote tout le processus : elle ouvre le fichier CSV, elle boucle au travers des enregistrements, et appelle les sous-procédures. A noter que cet exemple de programme lit le fichier NCOA à partir de mon répertoire home sur l’iSeries. Si je voulais que le programme lise à partir d’un CD-ROM, je changerais le nom de chemin de telle sorte qu’il commence par /QOPT au lieu de /home.

Téléchargez cette ressource

Préparer l’entreprise aux technologies interconnectées

Préparer l’entreprise aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010