Bonjour,
Utilisation Builder c++
Le principe est simple, ouvrir le fichier sim10.f06, récupérer toutes les lignes avec un '%' en premier caractère, puis écrire les lignes dans un nouveau fichier texte qui sera ensuite ouvert par la fonction voir2, pour être inscrit dans le tableur. Cette fonction sauver est mise dans un timer (avec pour temps de rafraîchissement le plus faible possible, suivant le temps de calcul de l'ordinateur) car le fichier doit être lus en temps réel.
Le but y insérer un système de "thread" pour ne pas bloquer l'analyse du fichier durant le temps du calcul.
PS: un fichier d'environ 8.000.000 de lignes peut être généré en 3 minutes seulement. Donc il faudrait le temps le plus rapide possible.
extrait du fichier sim10.f06 :
*** USER INFORMATION MESSAGE 4158 (DFMSA)
---- STATISTICS FOR SPARSE DECOMPOSITION OF DATA BLOCK SCRATCH FOLLOW
NUMBER OF NEGATIVE TERMS ON FACTOR DIAGONAL = 10
MAXIMUM RATIO OF MATRIX DIAGONAL TO FACTOR DIAGONAL = 2.4E+15 AT ROW NUMBER 13
%2.00000E-01 2 1 1.00E+00 1.56E-01 1.00E+00 1.000 0 1 0 5.97E-05 3.983E-02 1.28E-04 8.621E-03 306358 3 1.00 0 0 1 2
*** USER INFORMATION MESSAGE 4158 (DFMSA)
---- STATISTICS FOR SPARSE DECOMPOSITION OF DATA BLOCK SCRATCH FOLLOW
NUMBER OF NEGATIVE TERMS ON FACTOR DIAGONAL = 10
MAXIMUM RATIO OF MATRIX DIAGONAL TO FACTOR DIAGONAL = 2.4E+15 AT ROW NUMBER 13
%2.00000E-01 2 2 4.02E-01 1.57E-01 1.33E-01 0.801 0 1 0 5.32E-05 3.610E-02 1.09E-04 8.633E-03 306346 3 1.00 0 0 2 3
*** USER INFORMATION MESSAGE 4158 (DFMSA)
---- STATISTICS FOR SPARSE DECOMPOSITION OF DATA BLOCK SCRATCH FOLLOW
Donc voici la fonction sauver de mon Unit 4 (endroit on le tableur est inséré) qui permet d'ouvrir le gros fichier:
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
45
46
47
48
49
50
51
52
53 long int taille3, open; String ouvrir3; // Le nom du fichier récupéré grâce a l'OpenDialog void sauver() { int sauve; long int l; unsigned long int i=0 ; AnsiString chaine=""; char buffer; //ShowMessage("save done"); open=FileOpen(ouvrir3,fmOpenRead | fmShareDenyNone); FileSeek(open,0,2); taille3=GetFileSize((HANDLE)open,NULL); FileSeek(open,0,0); sauve=FileOpen("fichiercopie.f06",fmOpenWrite | fmShareDenyNone); while (i<=taille3) { FileRead(open,&buffer,sizeof(char)); if(buffer=='%') { chaine=chaine+buffer; while(buffer!='\n') { FileRead(open,&buffer,sizeof(char)); chaine=chaine+buffer; i++; } l=chaine.Length(); FileWrite(sauve,chaine.c_str(),l); chaine=""; } else { if(sauve==-1) { sauve=FileCreate("fichiercopie.txt"); } i++; } } FileClose(sauve); FileClose(open); voir2(); }
Merci de votre aide et a votre temps consacré pour répondre.
Partager