Invité Invité
| Sujet: Lecture fichier CSV (bis) Sam 3 Aoû 2013 - 18:40 | |
| Bonjour à tous, J'avais déjà publié un script pour lire un fichier CSV (voir le sujet ici). Informations: CSV (Wikipédia). - Citation :
- Ce script est utile dans le cas de lecture ponctuelle d'une information dans un tableau CSV.
Mais si vous voulez exploiter le fichier CSV de manière plus importante, l'utilisation de cette fonction n'est pas efficace en manière d'optimisation. De plus, cette fonction ne permet que la lecture, et non l'écriture. Les deux fonctions que je décris ici vous permettent de charger un tableau CSV dans une structure de données de type grille et vous permet aussi de sauvegarder une structure de données de type grille dans un fichier CSV. Descriptions des fonctions:CSV_charger(fichier,separateur,zone_texte);fichier: chemin du fichier CSV à charger. separateur: caractère séparateur entre chaque colonne. Si vous ne saisissez rien, le caractère par défaut sera utilisé (le point-virgule). zone_texte: caractère qui défini une zone de texte. Si vous ne saisissez rien, le caractère par défaut sera utilisé (le "). La fonction retourne l'id de la structure de données de type Grille. Pour exploiter ces données, utilisez les fonctions ds_grid_.CSV_sauvegarder(fichier,id_grid,separateur,zone_texte);fichier: emplacement où sera sauvegarder le fichier structuré au format CSV (si le fichier existe déjà, il sera écrasé). id_grid: id de la structure de données de type grille à sauvegarder. separateur: caractère séparateur entre chaque colonne. Si vous ne saisissez rien, le caractère par défaut sera utilisé (le point-virgule). zone_texte: caractère qui défini une zone de texte. Si vous ne saisissez rien, le caractère par défaut sera utilisé (le "). CSV_lecture(fichier,ligne,colonne);fichier: Chemin du fichier CSV à lire. ligne: numéro de la ligne à lire (1 est la première ligne). colonne: numéro de la colonne à lire (1 est la première colonne). Plus d'informations sur cette fonction ici.Par défaut, le caractère séparateur est ; et le caractère qui défini un champs texte est ". CSV_charger: - Code:
-
/* script créé par NVR
CSV_charger(fichier,caractere_separateur,symbole_texte)
DESCRIPTION: Permet de charger un fichier CSV en mémoire.
ARGUMENT: argument0: fichier [CHAINE]: chemin du fichier CSV à charger. argument1: caractere_separateur [CHAINE]: caractère separateur de chaque colonne. Ne rien saisir pour utiliser le caractère par défaut (le point-virgule). argument2: caractere_texte [CHAINE]: caractère pour definir du texte. Ne rien siaisir pour utiliser le caractère par défaut ("). RESULTAT: [REEL]>=0: ID du tableau CSV. [REEL]<0: Erreur */
var csv_f,csv_idfichier,csv_i,csv_j,csv_ligne,csv_sep,csv_txt,csv_sd,csv_car,csv_ztx,csv_str,csv_strbis,csv_jmax; csv_f=string(argument0);
//definition des caracteres csv_sep=";"; //caractere separateur csv_txt='"'; //caractere de definition du texte
csv_jmax=0; //largeur maximal if is_string(argument1) { csv_sep=argument1; } if is_string(argument2) { csv_txt=argument2; }
//test d'existence du fichier if !file_exists(csv_f) { return -1; }
//ouverture du fichier csv_idfichier=file_text_open_read(csv_f); if csv_idfichier==-1 { return -1; }
//creation de la grillr csv_sd=ds_grid_create(0,0);
//parcours des lignes for (csv_i=0;!file_text_eof(csv_idfichier);csv_i+=1) { //lecture ligne csv_ligne=file_text_read_string(csv_idfichier); csv_ztx=0; //zone de texte csv_str=""; //texte cellule csv_j=0; //numero colonne //lecture caparcas do { csv_car=string_char_at(csv_ligne,1); //lecture du caractère if csv_car==csv_txt { csv_ztx=1-csv_ztx; } //entrer/sortie zone de texte if ((csv_car==csv_sep)&&!(csv_ztx)) || (csv_car=="")//ajout à la grille { if (ds_grid_height(csv_sd)<(csv_i+1))||(ds_grid_width(csv_sd)<(csv_j+1)) { csv_jmax=(csv_j*(csv_jmax<csv_j))+(csv_jmax*(csv_jmax>=csv_j)); //definition jmax ds_grid_resize(csv_sd,csv_jmax+1,csv_i+1); } //redimensionnement grille csv_strbis=string_replace_all(csv_str,csv_txt+csv_txt,chr(29)); //reperage des " doubles csv_str=string_replace_all(csv_strbis,csv_txt,""); //suppression des " seuls csv_strbis=string_replace_all(csv_str,chr(29),csv_txt); //rehabilitation des " ds_grid_add(csv_sd,csv_j,csv_i,csv_strbis); //ajout dans structure /*show_message("X: "+string(csv_j)+" - Y: "+string(csv_i)+"#"+string(csv_strbis));*/ csv_j+=1;//incrementation colonne csv_str=""; //init str } else { csv_str+=csv_car; } //complementation de la str csv_strbis=string_delete(csv_ligne,1,1); csv_ligne=csv_strbis;//suppression du premier caractere } until (csv_car=="") file_text_readln(csv_idfichier); } //fin du fichier atteint
file_text_close(csv_idfichier); //fermeture du fichier return csv_sd; //retourne l'id de la sd CSV_sauvegarder - Code:
-
/* script créé par NVR
CSV_sauvegarder(fichier,id_grid,separateur,identifier_texte)
DESCRIPTION: Sauvegarde un structure de données de type Grille dans un fichier CSV. ARGUMENT: argument0: fichier [CHAINE]: emplacement du fichier CSV à sauvegarder. argument1: id_grid [REEL]: ID de la structure de données argument2: separateur [CHAINE]: caractère separateur de chaque colonne. Ne rien saisir pour utiliser le caractère par défaut (le point-virgule). argument3: identifier_texte [CHAINE]: caractère pour definir du texte. Ne rien saisir pour utiliser le caractère par défaut (le point-virgule).
RESULTAT: [BOOL]: etat de réussite de l'opération (true/false) */
var csv_f,csv_idf,csv_sd,csv_sep,csv_txt,csv_x,csv_y,csv_w,csv_h,csv_str,csv_strbis,csv_ligne;
csv_f=string(argument0); //chemin fichier csv_sd=argument1; //id de la grid csv_sep=";"; csv_txt='"'; //sep-txt if is_string(argument2) { csv_sep=argument2; } //caractere definir if is_string(argument3) { csv_txt=argument3; } //caractere definir
csv_x=0; csv_y=0; //ini zero csv_ligne=""; csv_w=ds_grid_width(csv_sd); csv_h=ds_grid_height(csv_sd); //dimension
csv_idf=file_text_open_write(csv_f); //ouverture fichier if csv_idf==-1 { return false; } //test reussite ouverture fichier
for (csv_y=0;csv_y<csv_h;csv_y+=1) //parcours vertical { csv_ligne=""; for(csv_x=0;csv_x<csv_w;csv_x+=1) { csv_str=ds_grid_get(csv_sd,csv_x,csv_y); //lecture cellule csv_strbis=string_replace_all(csv_str,csv_txt,csv_txt+csv_txt); //doublage " if string_count(csv_txt,csv_str)||string_count(csv_sep,csv_str) { csv_strbis=csv_txt+csv_strbis+csv_txt; } //cellule texte csv_ligne+=csv_strbis; //ajout ligne if (csv_x+1)<csv_w { csv_ligne+=csv_sep; } //ajout caractere separateur } file_text_write_string(csv_idf,csv_ligne); //ecriture ligne file_text_writeln(csv_idf); //ecritude \n }
file_text_close(csv_idf); //fermeture fichier return true; //fin
|
|