ok. Et il y aurait pas un moyen de récupérer mon tableau de mesures dans un fichier excel par exemple ?
Version imprimable
ok. Et il y aurait pas un moyen de récupérer mon tableau de mesures dans un fichier excel par exemple ?
Fabriquer un fichier Excel "pur" est bien trop compliqué.
Le plus simple est de créer avec les données un fichier texte CSV qui est facilement importable par Excel. Ce n'est pas compliqué à faire.
c'est a dire ? comment je fais ? car déja j'ai mis du temps à comprendre ce que j'ai fais donc la ^^
Au lieu (ou en plus) d'afficher sur la console les résultats avec printf, tu les ranges dans un fichier avec fprintf. Chaque donnée est séparée de la précédente par un séparateur. Excel te laisse un choix assez large du séparateur (un blanc ou un ; ou etc)
Donc
- ouvrir un fichier en écriture (fopen) et tester si l'ouverture a été correcte
- écrire les données (fprintf)
- fermer le fichier (fclose)
ok et t'aurais pas un exemple de programme ?
En prenant comme trame la fonction afficheData (mais tu peux l'adapter à ton code) :
Le dernier paramètre est le nom du fichier qu'on veut créer.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void enregistrerData(Data * data, int step , char* fichier) { int count ; int points = data->size/16;; FILE * f = fopen(fichier,"w"); if(f!= NULL) { for (count=0;count < points;count += step) fprintf(f,"%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f\n", data->freq[count]/1E9, data->s11[count].mag,data->s11[count].phase, data->s12[count].mag,data->s12[count].phase, data->s21[count].mag,data->s21[count].phase, data->s22[count].mag,data->s22[count].phase); fclose(f); } else printf("Erreur d'ouverture du fichier %s\n",fichier); }
heu je prefere l'adapté a mon programme vu que je suis plus habitué. Mais dans ce programme tu l'ai met ou les fprint, fclose ....
Code:
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
45
46
47
48
49
50
51
52
53
54 meas_data(vna) int vna; { static int points, count; static char i[]="TRS WFS HLD", j[]="FMB LSB OFV CH1 OFD CH2 OFD CH3 RDA OFD CH4 RDA OFD"; static double freq[41]; static struct header { char preamble[2]; short size; } headr; static struct data { double mag; double phase; } s11[41],s12[41],s21[41],s22[41]; char* fichier; printf("Mesure en cours..."); ibwrt(vna,i,sizeof(i)); ibwrt(vna,j,sizeof(j)); ibrd(vna,&headr,4); ibrd(vna,&freq[0],headr.size); ibrd(vna,&headr,4); ibrd(vna,&s11[0],headr.size); ibrd(vna,&headr,4); ibrd(vna,&s12[0],headr.size); ibrd(vna,&headr,4); ibrd(vna,&s21[0],headr.size); ibrd(vna,&headr,4); ibrd(vna,&s22[0],headr.size); points=(headr.size/16); { printf("\n\n\n\n"); printf(" S11 S12 S21 S22\n"); printf(" FREQUENCY MAG PHASE MAG PHASE MAG PHASE MAG PHASE\n"); printf(" (GHZ) (dB) (Deg) (dB) (Deg) (dB) (Deg) (dB) (Deg)\n"); for (count=0;count < points;count=count + 5) printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); }
Il faut essayer de comprendre un peu si tu veux progresser.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 fopen...... points=(headr.size/16); printf("\n\n\n\n"); printf(" S11 S12 S21 S22\n"); printf(" FREQUENCY MAG PHASE MAG PHASE MAG PHASE MAG PHASE\n"); printf(" (GHZ) (dB) (Deg) (dB) (Deg) (dB) (Deg) (dB) (Deg)\n"); for (count=0;count < points;count=count + 5) { printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); fprintf....... } fclose.....
Je sé mais j'ai tjs eu du mal avec le langage c. Et je fini mon stage jeudi en +
J'ai essayé ça :
Ya une erreurCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 char* fichier; FILE * f = fopen(fichier,"w"); printf("\n\n\n\n"); printf(" S11 S12 S21 S22\n"); printf(" FREQUENCY MAG PHASE MAG PHASE MAG PHASE MAG PHASE\n"); printf(" (GHZ) (dB) (Deg) (dB) (Deg) (dB) (Deg) (dB) (Deg)\n"); for (count=0;count < points;count=count + 5) { printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); fprintf(f,"%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f;%7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); } fclose(f); }
Il faut spécifier le nom du fichierCode:
1
2 char* fichier; FILE * f = fopen(fichier,"w");
Code:char const * fichier = "MonFichier.txt" ;
Voila ce que j'obtiens dans le fichier qui a été créé :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 char const * fichier = "recuperation.txt" ; FILE * f = fopen(fichier,"w"); printf("\n\n\n\n"); printf(" S11 S12 S21 S22\n"); printf(" FREQUENCY MAG PHASE MAG PHASE MAG PHASE MAG PHASE\n"); printf(" (GHZ) (dB) (Deg) (dB) (Deg) (dB) (Deg) (dB) (Deg)\n"); for (count=0;count < points;count=count + 5) printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); fprintf(f,"%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); fclose(f); }
0.00 5.03 -91.62 -2.84 -145.54 1.94 40.21 0.00 0.00
Alors que la console m'affiche :
1.00 -4.07 69.40 -3.22 151.17 2.57 -126.38 1.18 -158.76
1.50 7.17 65.02 19.95 66.31 8.04 -137.82 22.17 -14.76
2.00 0.09 -56.32 9.53 -177.58 -27.26 123.42 -2.18 75.04
2.50 -7.26 127.34 -1.40 -44.19 -5.81 38.60 -4.64 32.01
3.00 -4.89 68.67 -0.19 -159.38 -0.36 -79.78 3.57 -107.06
3.50 -30.92 111.70 -1.58 -47.49 -6.07 -127.17 4.48 140.05
4.00 -6.04 63.77 -6.95 -88.70 -0.07 -109.76 1.37 -154.77
4.50 -4.43 89.92 -3.77 34.39 -4.24 22.72 -0.40 -40.39
5.00 7.12 -20.67 4.79 -95.75 -1.50 -126.38 -6.28 -158.76
Dans le code que je t'avais proposé, figuraient ces accolades !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 for (count=0;count < points;count=count + 5) { printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); fprintf(f,"%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", freq[count]/1E9,s11[count].mag,s11[count].phase, s12[count].mag,s12[count].phase, s21[count].mag,s21[count].phase, s22[count].mag,s22[count].phase); } fclose(f); }
Ok désolé j'ai pas fait attention. Oui effectivement ca marche mieux comme ca. Merci
Et encore une question, Quand je refais une mesure cela remplace les données par les autres, mais je suppose que ca supprime les autres donc ?
Si tu ne changes pas le nom du fichier, les nouvelles données écrasent les précédentes.Citation:
Quand je refais une mesure cela remplace les données par les autres, mais je suppose que ca supprime les autres donc ?
Comme tu es pressé, le plus rapide est de renommer le nom du fichier de données après une mesure (et avant la suivante) pour conserver les données.
Ouai mais cela ne m'arrange pas vu qu'avant de récupérer les mesures j'ai d'autres fonctions a effectuer donc cela me ferais refaire toute les fonctions d'avant.
ok mais bon c'est pas le top quand meme. Ya pas un truc pour qu'a chaque fois que je fais une mesure, le nom du fichier change ? par exemple si j'appel le premier fichier 1, le deuxieme pourrai s'appelé 2 par incrementation. Cela est-il possible ?
Bien sur que ce n'est pas le top et que ce que tu demandes est possible à faire et n'est d'ailleurs pas difficile.
Mais je croyais que tu étais pressé et pas trop enclin à développer du code.
Ouai mais ca y est mon rapport est rendu mais je suis en stage jusqu'a vendredi encore donc pour m'occuper, je peux essayer de faire ca.