Scusa se ti disturbo ancora, il fatto è che ho provato come mi hai detto ma, no so cosa ho sbagliato.
Questo è il file che devo caricare (si chiama "prova_2911.msh"):
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
85
1 0 0 0
2 20 0 0
3 20 10 0
4 0 10 0
5 0 0 50
6 20 0 50
7 20 10 50
8 0 10 50
9 2.222222222217813 0 0
10 4.444444444435626 0 0
11 6.666666666655381 0 0
12 8.888888888875783 0 0
13 11.11111111109865 0 0
14 13.33333333332399 0 0
15 15.55555555554933 0 0
16 17.77777777777466 0 0
17 2.222222222217813 10 0
18 4.444444444435626 10 0
19 6.666666666655381 10 0
20 8.888888888875783 10 0
21 11.11111111109865 10 0
22 13.33333333332399 10 0
23 15.55555555554933 10 0
24 17.77777777777466 10 0
25 20 2.49999999999504 0
26 20 4.999999999992992 0
27 20 7.499999999996496 0
28 0 2.49999999999504 0
29 0 4.999999999992992 0
30 0 7.499999999996496 0
31 2.222222222217813 0 50
32 4.444444444435626 0 50
33 6.666666666655381 0 50
34 8.888888888875783 0 50
35 11.11111111109865 0 50
36 13.33333333332399 0 50
37 15.55555555554933 0 50
38 17.77777777777466 0 50
39 2.222222222217813 10 50
40 4.444444444435626 10 50
41 6.666666666655381 10 50
42 8.888888888875783 10 50
43 11.11111111109865 10 50
44 13.33333333332399 10 50
45 15.55555555554933 10 50
46 17.77777777777466 10 50
47 20 2.49999999999504 50
48 20 4.999999999992992 50
49 20 7.499999999996496 50
50 0 2.49999999999504 50
51 0 4.999999999992992 50
52 0 7.499999999996496 50
53 6.415330412211316 5.083990854468552 50
54 9.28965027579981 4.999999999999653 50
55 18.367962092404 6.704510634608296 50
56 18.42538687960528 3.162216347513227 50
57 10.40726997682115 7.525468265537243 50
58 10.40726997682115 2.474531734462227 50
59 8.011130126925576 7.490079365079231 50
60 8.011130126925576 2.509920634920502 50
61 5.578584795378252 7.802528659611433 50
62 5.297344001156676 2.502468849180438 50
63 16.30244405591631 7.570877662384996 50
64 16.67417711629165 2.028883619712256 50
65 16.94008552599461 4.848489257635336 50
66 2.681916388066742 7.757730123125677 50
67 3.220145838344503 1.452829988830355 50
68 12.62459247385861 8.16565934622105 50
69 12.62459247385861 1.834340653778076 50
70 3.985586187279859 5.578523711428599 50
71 2.586382545997175 3.505996834198472 50
72 10.91714028398172 5.023069507830039 50
73 14.65676705911295 3.289329778018314 50
74 13.77928420322827 6.596713740597342 50
75 12.00859284037172 6.195157793895953 50
76 12.81173654542403 4.419524488745384 50
77 14.2702565273127 8.351683430157786 50
78 14.47477812711738 1.652149954821391 50
79 14.83974187617958 5.315624236082956 50
80 4.747493612087752 4.267948403542537 50
81 18.489636785219 8.355077659397958 50
82 18.57546835473432 1.538219993444104 50
83 1.599757075252597 1.44080889154311 50
84 1.226034652571139 8.814432530780543 50
85 1.850777024268755 5.868450133748448 50
$EndNodes
E, questo è il listato che ho fatto e, che mi dovrebbe caricare di ogni riga gli elementi della seconda,terza e quarta colonna (le tre coordinate x, y e z).Da umero 85 dopo "$Nodes" so qiante righe devo mettere nella matrice:
///////////////////////////////////// main /////////////////////////////////////
#include <iostream.h>
#include <stdio.h> //libreria che permette di usare fopen
#include <stdlib.h> //libreria che permette di usare exit e atoi
#include <ctype.h> //libreria che permette di usare isalpha
#include <string.h> //libreria che permette di usare strcmp
#include <math.h>
#include <fstream.h>
//dichiarazione delle subroutine
void loadGmsh (float xyz[],float kon_el_node[],float lab_el[],float Line[]);
//dichiarazione delle variabili globali
int riemp_el_name,q,riemp_el_pot,riemp_piece_name,el_countstart,Nelements,Nnodes;
char x[256];
int el_name[1000];
int el_pot[100];
int piece_name[1000];
float *Line;
float *xyz;
int *Triangle;
float *kon_el_node;
float *lab_el;
int main()
{
loadGmsh (xyz,kon_el_node,lab_el,Line);
cout<<"\n\n";
system("PAUSE");
return 0;
}
/////////////////////////////////// loadGmsh ///////////////////////////////////
void loadGmsh (float xyz[],float kon_el_node[],float lab_el[],float Line[])
{
int flagnodes, flagelements, I, indx, j, k,pr,pc,p, temp1;
char *tline1,*temp2;
char tline[256*sizeof(char)];
//FILE *fid;
int x[1000],y[1000],z[1000];
char *xyzt;
//Carica la mesh (apre un file di testo per operazioni di sola lettura)
//fid = fopen("prova_2911.msh","r");//fopen restituisce un puntatore di tipo FILE e, restituisce NULL se fallisce la lettura
//if (fid==NULL) {printf ("Impossibile aprire il file di origine!");cout<<"\n";exit(0);}
flagnodes=0;
flagelements=0;
int i=0;
while(i<1000 && !in.eof())
{
//fgets legge una stringa (riga per riga) da uno stream;ad ogni chiamata, fgets punta alla riga successiva
//tline1=fgets(tline,256*sizeof(char),fid);
ifstream in("file_2911.msh",ios::in);
if(!in){printf("Impossibile aprire il file!");return 1;}
in>>tline;
if (strcmp(tline,"$Nodes")==0) //strcmp confronta le due stringhe e restituisce 0 (false) se sono uguali
{
ifstream in("file_2911.msh",ios::in);
if(!in){printf("Impossibile aprire il file!");return 1;}
in>>tline;
Nnodes=atoi(tline); //"atoi" converte un array char in un int
flagnodes=1;
xyzt=(char*) malloc(Nnodes*4*sizeof(char));//calloc(Nnodes*4*sizeof(float));//equivalente della funzione "zeros"
xyz=(float*) malloc(Nnodes*3*sizeof(float));
}//end if
if (strcmp(tline,"$EndNodes")==0)
{
flagnodes=0;
}//end if
if (flagnodes==1)
{
for (indx=0;indx<Nnodes;indx++)
{//tline1=fgets(tline,256*sizeof(char),fid);
//if(tline1==NULL) break;
//strcpy(xyzt,tline);
//printf("Ho copiato la stringa: %s", xyzt);
ifstream in("file_2911.msh",ios::in);
//if(!in){cout<<"Impossibile aprire il file!";return 0;}
in >> x >> y >> z;
printf("Ho copiato nella matrice: %d %d %d", x[i],y[i],z[i]);
}//end for
} //end "if flagnodes"
i++;
}//end while
}//end subroutine "loadGmsh"
Grazie.
Edit skynet: inseriti code tags.