problem mit strings aus textdatei in feld kopieren... brauch dringend hilfe!



  • Ich dachte es gilt:

    strlen liefert die Anzahl der Zeichen des Strings s zurück. Das abschließende Nullzeichen wird dabei nicht mitgezählt.



  • Das ist auch kein Wiederspruch zu dem was c.rackwitz sagte. Achja, der Zugriff auf Arrays beginnt mit der 0.



  • richtig.

    char foo[] = "ABCD";
    printf("foo[%d] = %d", strlen(foo), foo[strlen(foo)]);
    


  • Ja stimmt dummer Fehler.

    Danke für die Hilfe.

    mfg



  • Gandalfus schrieb:

    Wenn du ein Copy&paste Lösung willst geh doch zu fit-for-study.de

    da hab ich nix gefunden.

    bin immer noch nicht weiter.



  • ich habe ma wieder ein problem hiermit. und zwar wenn ich bei der eingabe des file-namens return drücke, wird als standart "testtext" genommen und wenn ich e eintippe wird das programm sofort beendet. gebe ich einen dateinamen ein, wo die datei nicht existiert, wird eine fehlermeldung ausgegeben. das funktioniert auch alles. es gibt standartmäßig die datei testtext, aber wenn ich jetzt "testtext" eintippe, beendet das programm sich sofort. warum? (einige dinge hab ich ma kurzzeitig aus dem code gekommentart)

    #include <stdio.h>
    #include "P:\\Eigene Dateien\\SCHULE\\FH\\Programmieren\\prog1\\pa4\\textanalyse\\fileread.h"
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    
    void dateiname (int* ende, int* name, char* eingabe);
    /*void einlesen (char*(*feld)[26], char* datei);
    void analyse (char*(*feld)[26]);
    void ausgabe (void);*/
    
    int main (void) {
    
    	int   progende=0;
      char  filename[81];
      int   name=0;
    	char* zeigerfeld[26];
    
    	do {
      	name=0;
        while (name==0){
    		 	dateiname (&progende, &name, filename);
        }
      /*  if (progende==0) {
    	 		einlesen (&zeigerfeld, filename);
    			analyse (&zeigerfeld);
          ausgabe ();
        	getchar();
        } else /* leer *;  */
        printf("progende:%d name:%d dateiname:", progende, name);puts(filename);
        getchar();
        clrscr();
     	} while(progende==0);
    
      getchar();
    
    	return 0;
    }
    /******************************************************************************/
    void dateiname (int* ende, int* name, char* eingabe) {
      char test;
    	printf("Programm zur statistischen Analyse von Texten                  "
      	"Dominic Cruse\n\n");
    	printf("Eingabe Dateiname [e=Ende, Return=TESTTEXT] : ");
    	gets(eingabe);
    	if (eingabe[0]=='e' && eingabe[1]==0) {
      	*ende=1; *name=1;
        }
        else if ((strlen(eingabe))==0) {
        	strcpy(eingabe, "testtext");
          *name=1;
        }
        else if (getFileLine(eingabe, &test, 81)==NULL) {
        	printf("\nFehler: Datei nicht gefunden oder Datei leer\n\n[return]");
    
          printf("progende:%d name:%d dateiname:", *ende, *name);puts(eingabe);
        	getchar();
        	clrscr();
        }
    /*  *name=1; */
    }
    


  • else if (getFileLine(eingabe, &test, 81)==NULL)
    

    test ist nur ein char und kein char-array. Die getFileLine()-funktion schreibt also die gelesenen zeichen ab dem zweiten ins computer-nirwana. das kann schon mal einen sofortigen absturz zur folge haben 😃



  • char* GetFileLine( char* PtrFileName, char*PtrTextBuf, int TextBufSize );
    Die Funktion liefert bei jedem Aufruf eine Zeile der Textdatei. Als Rückgabewert wird ein
    Zeiger auf das erste Zeichen der Textzeile, bzw. bei Öffnungsfehler oder Dateiende die
    Konstante NULL geliefert.
    

    liefert einen zeiger.

    jetzt aber wieder ein anderes problem. ich bekomm das mit dem zählen einzelner zeichen nicht hin.

    #include <stdio.h>
    #include "P:\\Eigene Dateien\\SCHULE\\FH\\Programmieren\\prog1\\pa4\\textanalyse\\fileread.h"
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    
    void dateiname (int* ende, int* name, char* eingabe);
    void einlesen (char*(*feld)[26], char* datei);
    void analyse (char*(*feld)[26]);
    void ausgabe (void);
    
    int main (void) {
    
    	int   progende=0;
      char*  filename;
      int   name=0;
    	char* zeigerfeld[26];
    
    	do {
      	name=0;
        while (name==0){
    		 	dateiname (&progende, &name, filename);
        }
        if (progende==0) {
    	 		einlesen (&zeigerfeld, filename);
        printf("progende:%d name:%d dateiname:", progende, name);puts(filename);
    			analyse (&zeigerfeld);
          ausgabe ();
        	getchar();
        } else /* leer */;
    /*    getchar(); */
        clrscr();
        free (zeigerfeld);
     	} while(progende==0);
    
    	return 0;
    }
    /******************************************************************************/
    void dateiname (int* ende, int* name, char* eingabe) {
      char* test;
    	printf("Programm zur statistischen Analyse von Texten                  "
      	"Dominic Cruse\n\n");
    	printf("Eingabe Dateiname [e=Ende, Return=TESTTEXT] : ");
    	gets(eingabe);
    	if (eingabe[0]=='e' && eingabe[1]==0) {
      	*ende=1; *name=1;
      }
        else if ((strlen(eingabe))==0) {
          puts("leer");
        	strcpy(eingabe, "testtext");
          puts(eingabe);
          *name=1;
        }
         	else if (getFileLine(eingabe, test, 81)==NULL) {
        		printf("\nFehler: Datei nicht gefunden oder Datei leer\n\n[return]");
        		getchar();
        		clrscr();
        	}
       		 	else {*name=1; puts(eingabe);}
    }
    /******************************************************************************/
    void einlesen (char*(*feld)[26], char* datei) {
    	char textbuffer[81];
      char textende[81];
    	int  i=0, j=0, k=0;                                /*div. Schleifenvariablen*/
    	for (i; i<26; i++) (*feld)[i] = NULL;         /* Zeigerfeld mit NULL belegen*/
      do {
        getFileLine(datei, textbuffer, 81);
      	if (textbuffer[0]!=NULL/*j<10*/) {
    	 		(*feld)[j] = (char*) calloc (strlen(textbuffer)+1, sizeof (char));
    	 		strcpy ((*feld)[j], textbuffer);
        	printf("%d ", j); puts((*feld)[j]); j++;
         } else k=1;
     	} while (k==0);
    }
    /******************************************************************************/
    void analyse (char*(*feld)[26]) {
      char* feldzeiger;
    /* 	extern double buchstaben;
    	extern double woerter;*/
      extern double anzbuchst[29];
    	extern int zeile;
    /*	extern int saetze;
    	extern int zeichen;    */
      int i=0;
    	for (i; i<30; i++) anzbuchst[i]=0;
      zeile=0;
      do {
      	feldzeiger = (*feld)[zeile];
    		printf("\n(z.%d)", zeile); /*puts(feldzeiger);*/
        i=0;
      	do {
         /* if (*feldzeiger>=65 && *feldzeiger<=90)
            for (i; i<26; i++)
            	if (*feldzeiger==(i+65))
              	anzbuchst[i]++;*/
           /*	else if (*feldzeiger>=97 && *feldzeiger<=122)
              for (i; i<26; i++)
            		if (*feldzeiger==(i+97))
              	anzbuchst[i]++;*/
     /*	 printf("%d ", i++);*/
          feldzeiger++;
        } while (*feldzeiger!=10 && *feldzeiger!=0);
    		zeile++;
      } while ((*feld)[zeile]/*zeile<25*/);
    }
    /******************************************************************************/
    void ausgabe (void) {
    /* 	extern double buchstaben;
    	extern double woerter;*/
      extern double anzbuchst[29];
    	extern int zeile;
    /*	extern int saetze;
    	extern int zeichen;         */
    
      int i=0;
      puts("");
    	for (i; i<26; i++) printf("%c: %2.0lf - ", i+97, anzbuchst[i]);
    }
    /******************************************************************************/
    /*static double buchstaben;
    static double woerter; */
    static int zeile=0;
    /*static int saetze;
    static int zeichen;*/
    static double anzbuchst[29];
    

Anmelden zum Antworten