Werte aus einer Datei lesen



  • Hi,

    ich habe eine Datei in der folgendes steht

    ...
    f 8424/6849/8702
    ...

    ich habe es bisher so versucht:

    struct Triangle { 
    
    	int v1; 
    	int v2; 
    	int v3; 
    
    };
    
    t= new Triangle[triangleCount];  //Hier habe ich triangleCount bestimmt
    triangleCount=0;
    
    char line[100];
    char filename[100]="data/test.obj"; 
    FILE *fp; 
    fopen_s(&fp,filename,"r");
    while (!feof(fp))
    			{ 
    
    		     fgets(line,99,fp);
                    if ( strncmp("f ",line,2) == 0) 
    				{				
    
    						char b;
    						sscanf_s(line+1, "%d %c %d %c %d",
    							&t[triangleCount].v1,
    							&b,
    							&t[triangleCount].v2,
    							&b,
    							&t[triangleCount].v3); 
    						triangleCount++;
    
    				}   
    			}
    

    Das Problem scheint irgendwie zu sein, dass zwischen den Zahlen und dem "/" kein Leerzeichen ist.
    Wie bekomme ich es eingelesen?



  • sscanf_s(line+1, "%d/%d/%d",
                  &t[triangleCount].v1,
                  &t[triangleCount].v2,
                  &t[triangleCount].v3);
    

    schon so versucht?



  • Danke für die Idee.

    Ich werds am nächsten Wochenende (wenn ich wieder Zeit für mein Hobby habe) ausprobieren.



  • Ich habe jetzt beide Versionen getestet:

    Datei

    ...
    f 8424/6849/8702
    ...

    Der Code jeweils davor ist wie im Post oben. Ich habe nur die sscanf Funktion verändert.

    int test1,test2,test3;
    
    char a;
    char b;
                            sscanf_s(line+1, "%d %c %d %c %d",
                                &test1,
                                &a,
                                &test2,
                                &b,
                                &test3); 
    
    cout << test1 << " "<<a<<" " << test2 <<" "<<b<< " "<< test3;
    

    ergibt:

    8424 / 0 @ 47

    Also die erste Zahl und das erste Trennzeichen wird richtig gelesen. Der Rest ist irgendwie nicht nachvollziebar.

    int test1,test2,test3;
    
                            sscanf_s(line+1, "%d %d %d",
                                &test1,
                                &test2,
                                &test3); 
    
    cout << test1 << " " << test2 <<" "<< test3;
    

    ergibt:

    8424 0 0

    Also die erste Zahl wird richtig gelesen. Der Rest ist 0, wird also nicht richtig gelesen

    Hat noch Jemand eine Idee wie es gehen könnte?



  • Ich habs jetzt, falls es noch Jemanden interessiert:

    sscanf_s(line+1, "%d / %d  / %d", 
    				&test1,
    
    				&test2,
    
    				&test3);
    


  • MisterX schrieb:

    Ich habs jetzt, falls es noch Jemanden interessiert:

    sscanf_s(line+1, "%d / %d  / %d", 
    				&test1,
    				
    				&test2,
    				
    				&test3);
    

    U-Boot schrieb:

    sscanf_s(line+1, "%d/%d/%d",
                  &t[triangleCount].v1,
                  &t[triangleCount].v2,
                  &t[triangleCount].v3);
    

    schon so versucht?

    merkst was? 🙂


Anmelden zum Antworten