1. #1
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    janvier 2005
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : janvier 2005
    Messages : 549
    Points : 112
    Points
    112

    Par défaut Traitement de fichier CSV

    Bonjour,

    J'ai une nouvelle question. Je suis novice en gestion de fichier. J'aimerais sauvegarder mes datas dans un fichier CSV. Mais avant avoir la bonne stratégie.

    J'ai trouvé la fonction pour "enregistrer sous" mon fichier.

    Par contre, j'ai mis en pseudo code ce que j'avais l'intention de faire. C'est la partie commenté. Est-ce la bonne façon de faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    switch (event)
    {
    	case EVENT_COMMIT:
     
    	/* ** VARIABLES ** */
    	char nameLed[256];			// Nom de la led
    	char colorLed[256];			// La couleur de la led
    	float I_directLed;			// L'intensité direct que peut supporter la led
    	float U_directLed; 			// La tension direct que peut supporter la led
    	char commentLed[256];		// Le commentaire sur la led
    	char chaineSaveLed[1000];	// Chaine concaténé
    	char filePath[600];			// Path du fichier .csv
     
    	/* ** ACCES AUX CHAMPS DE SAISIE ** */ 
    	GetCtrlVal(panel, TABPANEL_1_ST_Name, nameLed);				// Panel > Tab Champ
    	GetCtrlVal(panel, TABPANEL_1_ST_Color, colorLed);			// Panel > Tab Champ
    	GetCtrlVal(panel, TABPANEL_1_I_Direct_Led, &I_directLed);	// Panel > Tab Champ
    	GetCtrlVal(panel, TABPANEL_1_U_Led_Direct, &U_directLed);	// Panel > Tab Champ
    	GetCtrlVal(panel, TABPANEL_1_TXT_Comment, commentLed);		// Panel > Tab Champ
     
    	//Concaténation et conversion de type
    	snprintf(chaineSaveLed, 4000, "%s;%s;%f;%f;%s\n",nameLed, colorLed, I_directLed, U_directLed, commentLed);   
     
    	// Afficher la chaine à sauvegarder
    	printf ("%s\n", chaineSaveLed);
     
    	// Choisir le fichier à créer
    	FileSelectPopupEx ("c:\\Users\\PORTABLE\\Documents\\Test", "*.csv", ".csv", "Leds", VAL_SAVE_BUTTON, 0, 1, filePath);
     
    	//Si le fichier existe déjà
    		//Aller à la dernière ligne
    		//Ajouter une nouvelle ligne
    	//Sinon
    		//Créer le fichier et y placer la ligne créé
     
    	//Fermer le fichier
    	//Nettoyer la mémoire
     
    	printf ("%s\n", filePath);
     
    	break;
    }
    return 0;
    Merci

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    juin 2007
    Messages
    3 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 3 962
    Points : 6 921
    Points
    6 921

    Par défaut

    Tu peux directement ouvrir un fichier avec création s'il n'existe pas et "append" pour aller directement en fin de fichier : tout ça en une seule ligne.
    Pense à tester le retour de la fonction d'écriture pour vérifier si tous les octets ont été écrit : ça permet de gérer l'erreur sur disque plein par exemple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    janvier 2005
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : janvier 2005
    Messages : 549
    Points : 112
    Points
    112

    Par défaut

    En une ligne ? Voilà qui m'interpelle.

    Du coup, quelle fonction permet cela ? Ou la piste qui m'orienterais vers cette fonction ?

    Merci

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    juin 2007
    Messages
    3 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 3 962
    Points : 6 921
    Points
    6 921

    Par défaut

    c'est la fonction "open" et son équivalent avec buffer "fopen".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int descripteur = open( "/mon/chemin/de/fichier.txt", O_WRONLY | O_CREAT | O_APPEND, 0666 );
    if( descripteur < 0 ) { ... fichier pas ouvert, traiter le probleme ... }
    if( write( descripteur, pointeur_vers_data, taille_data ) != taille_data ) { ... probleme survenu lors de l'ecriture ... }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    janvier 2005
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : janvier 2005
    Messages : 549
    Points : 112
    Points
    112

    Par défaut

    Bonsoir,

    Bonne nouvelle année comme il est coutume d'écrire en ce début 2018 !

    J'ai fait quelques essais avec fopen. C'est bien sympa mais si ça marche quand le répertoire est présent, cela ne fonctionne pas quand le répertoire n'est pas créé.

    Je pense m'orienter vers MKDIR (comme je le faisait sous PHP) ; est-ce le bon composant à utiliser pour gérer les répertoires ?

    Merci

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    juin 2007
    Messages
    3 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 3 962
    Points : 6 921
    Points
    6 921

    Par défaut

    Ah oui, bien sûr, le répertoire doit déjà exister.
    Donc il faut ajouter 2 étapes supplémentaires :
    1. extraire le nom du répertoire depuis le nom du fichier avec "dirname"
    2. vérifier l'existence du répertoire avec la fonction "stat" (éventuellement IS_DIR si l'objet existe, pour s'assurer que c'est un répertoire)
    3. si le répertoire n'existe pas, alors le créer avec "mkdir( chemin, mode ) (avec include <sys/stat.h>)"


    Oui, 3 étapes car en programmation, il a toujours des surprises...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. Traitement de fichiers CSV avec Access
    Par seb68 dans le forum VBA Access
    Réponses: 12
    Dernier message: 09/11/2008, 13h50
  2. [CSV] Traitement d'un très gros fichier XML ou CSV
    Par Paulux1 dans le forum Fichiers
    Réponses: 3
    Dernier message: 25/03/2008, 17h05
  3. [CSV] Traitement d'un gros fichier CSV
    Par Adrinou dans le forum Fichiers
    Réponses: 6
    Dernier message: 09/10/2007, 13h40
  4. Réponses: 7
    Dernier message: 06/02/2007, 14h27
  5. [CSV] Traitement fichiers txt/csv avec php
    Par cirtey dans le forum Fichiers
    Réponses: 4
    Dernier message: 26/01/2007, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo