Lire ou écrire un fichier CSV
Création d'un fichier CSV
var File f
write_file f "foo.csv" "csv options"
csv_column "identificateur" "libellé"
...
csv_row
csv_cell "identificateur" "valeur"
...
La valeur d'une cellule peut être non seulement une chaîne de caractère, mais aussi un nombre décimal, une date, etc.
Encodage avancé
Les options suivantes permettent de configurer les détails du formatage du fichier CSV. Comment encoder ces options au niveau de l'instruction 'write_file' est précisé dans la documentation concernant l'écriture d'un fichier texte.
|
Syntaxe
|
Effet
|
Exemple
|
|
no_header
|
Ne pas ajouter une première ligne avec le nom des colonnes.
|
no_header
|
|
extra_header "du texte"
|
Ajouter du texte en tête de fichier.
|
extra_header "Relevé de comptes[cr][lf]Du 1/1/2018[cr][lf]Au 31/1/2018"
|
|
charset "code_de_charset"
|
Spécifie l'encoding des caractères à utiliser dans le fichier produit.
|
charset "iso8859-1"
|
|
ascii
|
Exclue tous les caractères qui ne sont pas ASCII (c'est à dire approximativement tous les caractères accentués).
|
ascii
|
|
exclude "caractères_exclu" replace_with "caractère de remplacement"
|
Specifie les caractères interdits, qui seront remplacé par la chaine fournie via le paramètre 'replace_with'.
|
exclude "[0][cr][lf][dq]" replace_with "?"
|
|
decimal "point décimal"
|
Quel caractère utiliser pour le point décimal. La valeur par défaut est le point.
|
decimal ","
|
|
date "encodage_des_dates"
|
A quel format coder les dates. La valeur par défaut est yyyy-mm-dd.
|
date "dd/mm/yyyy"
|
|
datetime "encodage_des_dates_et_heures"
|
La valeur par défaut est yyyy-mm-dd HH:MM:SS.
|
datetime "dd/mm/yyyy HH:MM"
|
|
multiline "une séquence"
|
Spécifie le caractère à utiliser pour indiquer le retour à la ligne dans les champs multilignes. La valeur par défaut est un simple espace, car beaucoup de lecteurs de fichiers CSV ne supportent pas les champs multilignes.
|
multiline "[cr][lf]"
|
|
quote "un caractère"
|
Spécifie avec quel caractère quoter les champs qui le nécessitent. La valeur par défaut est le double quote.
|
quote "'"
|
|
never_quote
|
Ne jamais rajouter des quotes autour des champs.
|
never_quote
|
|
always_quote
|
Toujours rajouter des quotes autour des champs.
|
always_quote
|
|
separator "séparateur de champs"
|
Spécifie quel séparateur utiliser entre les différents champs d'une même ligne. Le séparateur par défaut est la virgule.
|
separator ";"
|
|
cr
|
Les retours à la ligne sont le caractère 'carriage return'. C'est l'encodage standard sur Mac.
|
cr
|
|
lf
|
Les retours à la ligne sont le caractère 'line feed'. C'est l'encodage standard sur Unix.
|
lf
|
|
cr+lf
|
Les retours à la ligne sont la séquence 'cariage return' suivi de 'line feed'. C'est l'encodage standard sur Windows et ce qui sera produit par défaut par Storga.
|
cr+lf
|
|
bom
|
Ajouter les trois caractères standards en tête du fichier pour indiquer qu'il est codé en UTF-8.
|
bom
|
Tranfert SQL -> fichier CSV
Fabriquer un fichier CSV à partir d'une requête SQL :
var file f
write_file f "foo.csv" "csv options" from sql_query requête_sql
Voici maitenant la version avec récupération du message d'erreur de la requête SQL :
var file fwrite_file f "foo.csv" "csv options" from sql_query requête_sql error (var Str err)
Transfert Dataware -> fichier CSV
var file f
var Dataware dw
...
write_file f "foo.csv" "csv options" from dataware dw
On peut obtenir exactement la même chose en utilisant la fonction 'export_as_file'.
Lecture d'un fichier CSV
var File f
...
read_file f "csv"
each_csv_column c
...
csv_column "identificateur" "libellé"
each_csv_row
var Str v := csv_cell "identificateur"
var Float f := csv_cell "montant" Float
'each_csv_column' permet d'obtenir le libellé des différentes colonnes, tel que fourni dans la première ligne du fichier CSV.
L'instruction optionnelle 'csv_column' permet d'associer un identificateur à l'un des libellés. Si elle n'est pas utilisé, c'est le libellé de la colonne qui sert d'identificateur de la colonne.
Les types supportés au niveau de l'instruction 'csv_cell' sont Str (le type par défaut), Int, Float, Date et DateTime
Les options disponibles pour la lecture d'un fichier CSV sont
|
Syntaxe
|
Effet
|
Exemple
|
|
starter "texte à trouver"
|
Les premières lignes du fichier doivent être ignorées, jusqu'à celle contentant le texte indiqué.
|
starter "Prénom"
|
|
header "noms des colones"
|
Le fichier ne contient pas de première ligne indiquant les noms des colones.
|
header "Prénom,Nom"
|
|
charset "code_de_charset"
|
Spécifie l'encoding des caractères utilisés dans le fichier.
|
charset "iso8859-1"
|
|
separator "séparateur de champs"
|
Spécifie le séparateur utilisé entre les différents champs d'une même ligne. Le séparateur par défaut est la virgule.
|
separator ";"
|
|
padding
|
Certaines cellules contiennent des espaces de padding à retirer.
|
padding
|
Le type de retour à la ligne est détecté automatiquement.
Dans le fichier, les valeurs des cellules peuvent être entourées de double quotes ou pas.
Les champs multilignes sont supportés.
Le type de chaque cellule n'est pas reconnu automatiquement. Toutes les valeurs des cellules sont retournée sous forme de texte et doivent être converties manuellement si nécessaire.
Transfert fichier CSV -> table SQL
Importer le fichier CSV dans une table SQL :
read_file f "csv options" to sql_table nom_de_la_table_sql
Dans la version suivante, pour chaque ligne importer, on place la valeur 12 dans la colonne 'foo' de la table SQL.
On récupère aussi le message d'erreur de la requête SQL :
read_file f "csv options" to sql_table nom_de_la_table_sql sql_comlun "foo" 12 error (var Str err)
Transfert fichier CSV -> Dataware (extension juillet 2024)
Importer le fichier CSV dans une table SQL :
var File f
var Dataware dw
...
read_file f "csv options" to dataware dw
On peut indiquer que certaines colonnes du fichier CSV contiennent des valeurs numériques, en prédéfinissant ces colonnes via l'instruction 'dw_category' :
dataware dw
dw_category "Column title in CSV" type Float
read_file csv_file "csv" to dataware dw