super schwere Frage !



  • Du bist n bisschen faul, oder?

    Speichere zB in diesem Format

    name = value

    Dann liest du die ganze Datei in zB eine hashmap ein, und machst immer ein
    int value=hashmapGetValue("name");

    um die Werte auszulesen.

    Alternativ kann man natuerlich mit XML einen schoenen overkill produzieren 🙂

    ne, mal im ernst: was ist dir unklar.

    dass ein

    $str="name";
    $name="value";
    echo $$str;
    //gib "value" aus
    

    nicht geht, sollte wohl klar sein, oder?



  • Ich habe 3 Bücher und eine wichtige internetseite gelesen, wo fast alles über c steht und ich habe keine grosse hilfe gefunden.

    WIESO BIN ICH DA FAUL ???!!! ?? 😡

    Ich bin hier im Forum um Hilfe zu finden. Und nicht um stundenlang mir die Zeit tot zuschlagen.

    Mein Problem ist ganz einfach. ( Immernoch ) Ich suche es einfache Lösung, werte in eine extern Datei zuschreiben und auch darauf zuzugreifen.
    Ich wollte nicht erst die Datei einlesen und dann noch diese Auswerten.
    Ich dachte, es gibt da eine Möglichkeit, die ich nicht kenne.



  • Chris233 schrieb:

    WIESO BIN ICH DA FAUL ???!!! ?? 😡

    Ich bin hier im Forum um Hilfe zu finden. Und nicht um stundenlang mir die Zeit tot zuschlagen.

    QED.



  • ( Immernoch ) Ich suche es einfache Lösung, werte in eine extern Datei zuschreiben und auch darauf zuzugreifen.
    Ich wollte nicht erst die Datei einlesen und dann noch diese Auswerten.
    Ich dachte, es gibt da eine Möglichkeit, die ich nicht kenne.

    Wenn du Werte in einer Datei abspeicherst, dann musst du später einmal auch die Datei lesen; sonst hat das gar keinen Sinn.

    Bitte versuche dein Problem etwas genauer zu definieren. Willst du so etwas wie eine .ini Datei erzeugen?

    Danke



  • Ich weiß auch nicht woran du jetzt scheiterst. Wenn du wirklich so viel über C gelesen hast sollte das kein Problem für dich sein.

    Du musst doch einfach nur mit den Befehlen aus dem Link eine Datei erstellen(fopen), die Option die du in einer Variable gespeichert hast in die Datei schreiben(fprintf oder etwas ähnliches), diese beim nächsten Programmstart wieder öffnen(fopen), den Wert auslesen und zurück in die Variable speichern(fscanf oder etwas ähnliches). (Und natürlich fclose nicht vergessen) Eine andere Möglichkeit sehe ich nicht.(Ist ja auch keine andere Möglichkeit nötig)

    Und für einen Newbie(mich): Was heißt QED? RTFM hätte ich ja noch verstanden. 😉



  • Jarvis schrieb:

    Und für einen Newbie(mich): Was heißt QED? RTFM hätte ich ja noch verstanden.

    QED = quod errat demonstrandum (schlagt mich nicht, wenn ich es falsch geschrieben habe ... lang ists her 😉 ) zu deutsch: was zu zeigen/beweisen war; wird meist am Ende eines math. Beweises geschrieben.

    übrigens war es RTFF wobei das F wohl auch kein Problem darstellen sollte 🙂

    Gruß XZ59



  • Chris233 schrieb:

    Ich habe 3 Bücher und eine wichtige internetseite gelesen, wo fast alles über c steht und ich habe keine grosse hilfe gefunden.

    Und keins der Bücher behandelt das speichern und lesen von Dateien?
    Kein Buch erwähnt fopen, fclose, fputc, fputs, fprintf, fgets, fgetc, fscanf, strchr, strtok, strcmp?

    Ein Tip:
    Verbrenn die Bücher ganz schnell, vielleicht können sie durch ihren Brennwert noch zu wenigstens etwas zu gebrauchen sein....



  • XZ59 schrieb:

    übrigens war es RTFF wobei das F wohl auch kein Problem darstellen sollte 🙂

    Danke für die Erklärung.(QED)

    Und ich habe schon bewusst RTFM geschrieben. Wird wahrscheinlich öfter in Linux-Foren gebraucht.
    (M steht dabei für manual(oder evtl. auch für die man-Pages))



  • Chris233 schrieb:

    WIESO BIN ICH DA FAUL ???!!! ?? 😡

    Es ist nicht schlimm, faul zu sein. Es ist schlimm, zu glauben, die anderen wären das nicht.



  • Leute, Leute, Leute.

    Versuchen wir es mal anders.
    Ich weiss, wie ich etwas in eine Datei schreibe und auch lese, aber das was ich wissen will, weiss ich nicht.
    Vielleicht versteht ihr mich nach dem kleinen Programm.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #define MAX 20
    #define input 20
    #define Pi 3.14159265359
    #define GRAD 5
    #define HOEHE 0.001
    #define BREITE 0.001
    #define NWINC 5
    #define NHINC 5
    #define LAY_EINS 0.02
    #define LAY_ZWEI 0.04
    #define LAY_DREI 0.06
    
    int main(int wieviel , char *argumente[] )
    {
     char *arg1=argumente[1];
     char *arg2=argumente[2];
     double a=0,b=0;
    
    /* jetzt kommen genug Funktionen, struckturen und ausweissungen */
    
    /* und auch berechnungen mit den definierten werten. */
    /* wenn der anwender aber die werte aendern will mit den er rechnet und das bei naechsten start noch die gleichen sein sollen, was nun */
    /* ach so und natuerlich soll ich ganz einfach damit rechnen wie z.b.*/
    
    a=a+GRAD;
    b= sqrt(GRAD+BREITE)*pow(GRAD,7);
    return 0;
    
    }
    

    Jetzt klar, was ich will ?



  • ein kleines bsp. wie es aussehen koennte:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define RETURN 10
    
    int main (void){
    	int iZahl,
    		iZaehler = 0 ;
    	char szChar[6] ;
    	FILE * hFile ;
    	if ((hFile = fopen ("c:\\test.dat", "rw")) == NULL){
    		printf ("fehler beim oeffnen der Datei") ;
    		return 1 ;
    	}
    	do{
    		szChar[iZaehler] = getc (hFile) ;
    		++iZaehler ;
    		if ((szChar[iZaehler - 1] == RETURN) || (feof (hFile))){
    			szChar[iZaehler - 1] = '\0' ;
    			iZahl = atoi (szChar) ; // in iZahl steht jetzt die Zahl
    			iZaehler = 0 ;
    		}
    	}
    	while (!feof (hFile)) ;
    	fclose (hFile) ;
    	return 0 ;
    }
    

    die test.dat muss dann so aussehen:

    12312
    23
    8282
    233
    99999

    immer mit enter die datensaetze von einander trennen. Wie man die Zahlen in die Datei reinschreibt musste auch kein problem sein, oder?
    Das ganze ist nur ein bsp. wie du es loesen koenntest. Viele wege fuehren nach Rom.



  • kleines beispiel leider sind noch paar fehler

    #include <stdio.h>

    int main(int argc, char **argv)
    {
    int grad;
    double breite;
    char qw;
    FILE *sfile;

    if ((sfile = fopen("save.txt", "r")) == NULL) { grad = 5; breite = 0.001; }
    else { fscanf(sfile, "%i %lf", &grad, &breite); }
    close(sfile);

    printf("werte >>%i %.3lf<< aendern? [j|n]: ", grad, breite);
    scanf("%c", &qw);
    if (toupper(qw) == 'J')
    {
    printf("1: "); scanf("%i", &grad);
    printf("2: "); scanf("%lf", &breite);
    }

    sfile = fopen("save.txt", "w");
    printf("werte >>%i %0.3lf<< gespeichert!\n", grad, breite);
    fprintf(sfile, "%i %0.3lf", grad, breite);
    close(sfile);

    return 0;
    }



  • @Chris233
    Ich versteh einfach dein Problem nicht. Du fragst, wie du Werte in einer Datei speichern kannst und diese auslesen kannst. Auf die Antwort sagst du, dass du weisst, wie du Werte in einer Datei speichern kannst und auslesen kannst um darauf dann wieder die gleiche Frage zu stellen.

    a) du bist ein Troll?
    b) du siehst den Wald vor lauter Bäumen nicht. Im Endeffekt sind die Optionen, von denen du sprichst nur Werte (ausser wenn du define nimmst, deswegen musst du dafür Variablen nehmen). Du schreibst diese einfach in eine Datei (zum Beispiel demo.config) und beim nächsten start liest du die Datei wieder aus bzw. initalisierst die Optionen mit den Default Werten, wenn die Datei nicht existiert.
    (btw. kein Grund rumzumeckern :))



  • Jarvis schrieb:

    XZ59 schrieb:

    übrigens war es RTFF wobei das F wohl auch kein Problem darstellen sollte 🙂

    Danke für die Erklärung.(QED)

    Und ich habe schon bewusst RTFM geschrieben. Wird wahrscheinlich öfter in Linux-Foren gebraucht.
    (M steht dabei für manual(oder evtl. auch für die man-Pages))

    das QED für quod erat demonstrandum steht ist mir bekannt. aber wöfür zum Teufel steht das RTFF???

    Danke



  • hat ungefähr die Bedeutung von RTFM (== "Read the fine|fucking manual") nur, dass das F am Ende für FAQ steht (also "Read the fine|fucking FAQ")

    bei so Fragen ist Google und die Jargon File recht nützlich 🙂



  • Chris233 schrieb:

    ...
    /* wenn der anwender aber die werte aendern will mit den er rechnet und das bei naechsten start noch die gleichen sein sollen, was nun */
    ...
    

    Jetzt klar, was ich will ?

    Natürlich nicht. Du hast z.B. mit keinem Wort erwähnt welche Werte beim nächsten Start gleich sein sollen. ( a und b? oder arg1 arg2 ? )
    Die defines kann man jedenfalls nicht ändern.
    Genau wie in all deinen vorherigen Postings hast du nur die Hälfte deines Problems erklärt.

    Ich versuche mal die Informationen, die über all deine vorherigen Postings verstreut sind zusammen zu puzzeln.

    Du willst irgendwelche Werte in einer Datei speichern und beim nächsten Programmstart sollen diese Werte irgendwelchen Variablen zugewiesen werden ohne die Datei zu öffnen. Das geht aber nicht. Wenn du Werte aus einer Datei in eine Variable speichern willst musst du die Datei öffnen und auslesen. Da gibt es keinen Trick um das zu umgehen.



  • du willst, dass die alten parameter noch vor dem start des programmes zur verfügung stehen, dh, der alte funktionsaufruf irgendwo geholt werden kann?



  • du musst die werte beim strart des prog aus der datei hollen und beim beenden des prog die geaenderte (oder auch nicht) wieder reinschreiben. ich habe zwei funktionen gecodet die genau das tun:

    #include <stdio.h>
    #include <stdlib.h>
    
    int DateiSchreiben	(int*, char*) ;
    int DateiLesen		(int*, char*) ;
    
    #define RETURN			10
    #define MAX_INT			10
    #define CHAR_LAENGE		6
    #define FILE_LESEN		"r"
    #define FILE_SCHREIBEN	"w"
    
    int main (void){
    	char	szFileName[] = "c:\\test.dat" ;
        int	 iZahlen[MAX_INT] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
    			iFor ;
        if (DateiSchreiben (iZahlen, szFileName)){
    		return 2 ;
    	}
    	if (DateiLesen (iZahlen, szFileName)){
    		return 1 ;
    	}
    	for (iFor = 0 ; iFor < MAX_INT ; iFor++){
    		printf ("%d\n", iZahlen[iFor]) ;
    	}
        return 0 ;
    }
    
    int DateiLesen (int *iRuckgabe, char *szFile){
    	int     iRuckgabeZaehler = 0,
    			iZaehler = 0 ;
        char	szChar[CHAR_LAENGE] ;
        FILE	*hFile ;
        if ((hFile = fopen (szFile, FILE_LESEN)) == NULL){
            printf ("Fehler beim oeffnen der Datei:\n") ;
    		printf ("%s\n", szFile) ;
            return 1 ;
        }
        do{
            szChar[iZaehler] = getc (hFile) ;
            ++iZaehler ;
            if ((szChar[iZaehler - 1] == RETURN) || (feof (hFile))){
                szChar[iZaehler - 1] = '\0' ;
                iRuckgabe[iRuckgabeZaehler++] = atoi (szChar) ;
                iZaehler = 0 ;
            }
        }
        while (!feof (hFile)) ;
        fclose (hFile) ;
    	return 0 ;
    }
    
    int DateiSchreiben (int *iOrginal, char *szFile){
    	int     iZaehler ;
        FILE	*hFile ;
        if ((hFile = fopen (szFile, FILE_SCHREIBEN)) == NULL){
            printf ("Fehler beim oeffnen der Datei:\n") ;
    		printf ("%s\n", szFile) ;
            return 1 ;
        }
    	for (iZaehler = 0 ; iZaehler < MAX_INT ; iZaehler++){
    		fprintf (hFile, "%d", iOrginal[iZaehler]) ;
    		if (iZaehler < (MAX_INT - 1)){
    			fprintf (hFile, "\n") ;
    		}
    	}
        fclose (hFile) ;
    	return 0 ;
    }
    


  • 😃

    Ich bin erstaunt wieviel Antworten ich doch bekomme.
    Also, ich habe mich entschieden.
    Ich habe mich mal noch an jemanden anderen gewendet und der hat mir noch ein paar Tips gegen.

    Ich werde die werte in eine Datei schreibe, sie bei oeffnen einlesen und aendern, wenn der benutzer andere Werte eingegeben hat.

    @kingruedi : bin kein Troll und die Baeume sind da, wo sie hingehoeren !!!
    und z.Z. arbeite ich an einem Programm, was Dateien oeffnet einliesst du wieder schliesst. Natuerlich weiss ich, wie man das macht. Ich wollte etwas anderes wissen. Dir sagt doch sicher die EXTERN-anweissung was. Ich wollte genauso auf die Werte in der Externen Datei zugreiffen.
    jetzt verstanden? Aber das geht scheinbar nicht.

    An den Rest, vielen Dank fuer die vielen Lustigen Antworten. 🙂 😉



  • Chris233 schrieb:

    Dir sagt doch sicher die EXTERN-anweissung was. Ich wollte genauso auf die Werte in der Externen Datei zugreiffen.
    jetzt verstanden?

    Selbstmodifizierender Code? Mutig.


Anmelden zum Antworten