AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Lecture fichier CSV (bis)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
NVRB
Très bonne participation
avatar

Messages : 140
Localisation : Vexin Français
Projet Actuel :

MessageSujet: Lecture fichier CSV (bis)   Sam 3 Aoû 2013 - 16: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

_________________
Projet actuel :
Revenir en haut Aller en bas
 
Lecture fichier CSV (bis)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Lecture fichier OGG
» A vos claviers les experts pour savoir comment changer une extension de fichier ha11
» Impression d'un arbre géant (9mx1,50m) - problème de lecture du fichier PDF
» Demande aide lecture acte mariage 1742 Cormeilles Eure
» Transfert de fichier lourd via Megaupload

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: