Matrix in Datei schreiben...



  • Hallo.

    ...die meisten kennen vieles wohl schon 😃 ...

    Ich möchte eine Matrix in eine Datei schreiben.
    Die Matrix ist nur mit Nullen besetzt. Ausnahmen stellen Einträge, die in einem Feld eines benutzerdefinierten Variablentyps gespeichert sind. Der Variablentyp wie folgt:

    typedef struct{
    	double Value;            //Wert der Variablen
    	unsigned long Index;    //Zeilenindex in der Matrixzeile
    }TMCoeff;
    

    Der Pointer auf das 2D Array für die "Nicht Null Einträge" ist fpA; Der erste Index gibt die Zeile der Matrix an. Der zweite den Eintrag den Eintrag ungleich Null (bei entsprechendem Index), wobei stets die maximale Anzahl von Einträgen in dem Feld fnConnections gespeichert ist. Das ganze wird in das Feld fpR geschrieben (Index fpA[fi][fj].Index-1 weil Index von 1 ab zählt, im Array jedoch von 0 ab). Dieses Feld beinhaltet alle Einträge, auch die Nullen, die ich für die vollkommene Matrix benötige...
    Jedes fi in der ersten Schleife überschreibt also die komplette Zeile #fi (die nur aus Nullen besteht) an den Stellen, die ungleich Null sind. Das ganze soll jeweils dem String line angehängt werden. Der String wiederum soll am Ende der Datei "C:/Test.dat" (Code Zeile 5, 8 und 19) abgehängt werden.

    int ExportMatrix(TMCoeff **fpA, double * fpB, unsigned long fnQuad, unsigned long * fnConnections, unsigned int Ind){
    unsigned long fi=0, fj=0, fk=0;
    double * fpR = (double *)calloc(fnQuad, sizeof(double));
    char * line, * lineNew;
    char * filename = "c:/Test.dat";
    
    printf("Generating file %c\n"MFileName);
    //FILE * MFile = fopen(MFileName, "w");
    
    for (fi=0; fi<fnQuad;fi++){
    	for (fj=0;fj<fnConnections[fi];fj++){
    		fpR[fpA[fi][fj].Index-1] = fpA[fi][fj].Value;
    	}
    	for (fj=0;fj<fnQuad;fj++){
    		sprintf(lineNew,"%2.2f; ", fpR[fj]);
    		printf("%s\n", lineNew);
    		//strcat(line, lineNew);
    		fpR[fj]=0.;
    	}
    	//strcat(line, "\n");
    	//fputs (line, MFile);
    	printf("%lu\n", fi);
    }
    
    printf("Closing file %c\n"MFileName);
    //fclose(MFile);
    
    return 0;
    }
    

    Der Code läuft, jedoch liefert mir der String aus Zeile (16) nur <NULL>.

    Bin für jeden Tip dankbar (sag schon mal Danke Dirk 🙂 ).

    CJens


  • Mod

    Da mögen noch mehr Fehler drin sein (die Codequalität ist ehrlich gesagt nicht so gut), aber unmittelbar fällt auf, dass lineNew auf nix zeigt.



  • Die Absolute Pfadangabe halte ich auch nicht für gelungen:

    "c:/Test.dat"

    Besser:
    "Test.dat"


Anmelden zum Antworten