Parser



  • Seh gerade value ist jetzt ein pointer

    int parse(char *string, char *name, double *value, char *unit) {    
        if (3 == sscanf(string, "%[^:]:%lf [%[^]]", name, &value, unit)) {
    

    dann mach's so

    int parse(char *string, char *name, double *value, char *unit) {    
        if (3 == sscanf(string, "%[^:]:%lf [%[^]]", name, value, unit)) {
    

    Kurt



  • Es geht!

    Lag am VS6!

    Aber irgend etwas klappt mit dem Datenfeld noch nicht, welches ich aufgespannt habe.

    double **dataBag = (double**) malloc(sizeof(double *) * ydim);
    for (i = 0; i < ydim; ++i) {
       dataBag[i] = (double*) malloc(sizeof(*dataBag) * xdim);
    }
    
    i=0;
    do {
        printf("> Scanne %d. Datei: %s\n", i+1, pLIST[i].filename);
    
        fPtr = fopen(pLIST[i].filename, "r");
        if (fPtr != NULL) {
    	// Spaltenindex zurücksetzen
    	j=0;
    	while (!feof(fPtr)) {
    	        // Textzeile auslesen
    		fgets(string, max, fPtr);
    		RetVal = parse(string, name, &value, unit);
    		if (RetVal == 1) {
    			// Daten ins Feld speichern
    			dataBag[i][j] = value;
    			j = j + 1;
    		}
    	}
    	fclose(fPtr);
        } else {
    		/// !!! Umlaute suchen
    		printf("> Die Datei: %s konnte nicht ge%cffnet werden. Weiter...\n", pLIST[i].filename, 123);
        } 
        i=i+1;
    } while (i < nums);
    

    Solange ich nur eine Datei einlese (aus meiner Liste pLIST) funktioniert das Programm - SUPER!!! Genau wie es soll.
    Sobald ich aber mehrere Dateien nacheinander Scanne - also in mehreren Zeilen von dataBag einen Wert ablegen will - stehen in der Matrix dataBag schwachsinnige Werte.



  • fehler liegt da

    for (i = 0; i < ydim; ++i) {
       dataBag[i] = (double*) malloc(sizeof(*dataBag) * xdim);
    }
    

    *dataBag ist ein pointer auf double ( bei mir 4 byte gross )
    sollte aber double sein ( bei mir 8 bytes gross ).
    Mach's so

    for (i = 0; i < ydim; ++i) {
       dataBag[i] = (double*) malloc(sizeof(double) * xdim);
    }
    

    Kurt



  • Leider nicht?!

    Es kommt immer noch zum Ausnahmefehler.



  • wüde es mal so probieren Vielleicht sind mehr Werte in einer Datei als du annimmst

    while (!feof(fPtr) && j < xdim ) {
    

    BTW du solltest IMMER auf Überlauf überprüfen.

    Kurt


Anmelden zum Antworten