M
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];