candice_38 | Bonjour,
mon fichier .DAT est de la forme:
-0.83063E-02 0.19874E-01 0.20252E-01
-0.83063E-02 0.19874E-01 0.20252E-01
-0.83063E-02 0.19874E-01 0.20252E-01
...... sur 144 lignes.
J'ai écrit cette routine en C pour pouvoir transformer le fichier.DAT en format hdf5.
Code :
- #include <string.h>
- #include "hdf5.h"
- #include "hdf5_hl.h"
- #define RANK 2
- #include <stdlib.h>
- #include <stdio.h>
- /* #include <conio.h> */
- #include <string.h>
- #define MAX 100
- double *extract(char *TEST)
- /* double *extract(char TEST[]) */
- {
- char tampon[MAX] = {0};
- int i, n = 0, j, h;
- FILE *fichier = NULL;
- float *tableau;
- printf("Le fichier a ouvrir est : %s\n", "TEST.DAT" );
- fichier = fopen("TEST.DAT", "r" );
- if (fichier != NULL)
- {
- printf("L'ouverture du fichier %s a reussie !\n", "TEST.DAT" );
- while (fgets(tampon, MAX, fichier) != NULL)
- n++;
- printf("Le fichier contient %d valeurs.\n", n);
- tableau = malloc(n * sizeof(float));
- if (tableau == NULL)
- {
- printf("Erreur allocation !" );
- exit(0);
- }
- else
- {
- printf("Allocation reussie !\n" );
- }
- rewind(fichier);
- for (h=0; h<MAX; h++)
- tableau[h] = 0.0;
- for (i=0; i<n; i++)
- {
- fgets(tampon, MAX, fichier);
- printf("tampon : %s\n", tampon);
- tableau[i] = atof(tampon);
- /* Taille de chaque chaine de caractere */
- /* /\* printf("%lu", strlen(tampon)); *\/ */
- /* --------- CREATION HDF5 ----------- */
- hid_t file_id;
- hsize_t dims[RANK]={n,1};
- herr_t status;
- /* create a HDF5 file */
- file_id = H5Fcreate ("ex_lite2.h5",H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- /* /\* create and write an integer type dataset named "dset" *\/ */
- status = H5LTmake_dataset(file_id,"/dset",RANK,dims,H5T_NATIVE_FLOAT,tableau);
-
- /* close file */
- status = H5Fclose (file_id);
- /* --------- FIN CREATION HDF5 ----------- */
- }
-
- /* for (j=0; j<n; j++) */
- /* printf("%f\n", tableau[j]); */
- }
- else
- printf("L'ouverture du fichier %s a echouee !\n", "TEST.DAT" );
- return 0;
- }
- int main(void)
- {
- int i;
- char nf[255] = "TEST.DAT";
- double *nbre;
- nbre = extract(nf);
- /* for (i=0; i<MAX; i++) */
- /* printf("--> %f\n", nbre[i]); */
- return 0;
- }
|
Mais quand je lis mon fichier.h5, ça me donne que la première colonne. Je crois que la fonction atof est limitée en nombre de caractere.
Comment je peux faire pour retranscrire les 3 colonnes en 3 floats.
Merci beaucoup
Candice
|