Schupp icon

test3.c

Schupp | PRO | 09/16/21 02:39:07 PM UTC | 0 ⭐ | 307 👁️ | Never ⏰ | []
text |

5.6 KB

|

None

|

0 👍

/

0 👎

 #include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/stat.h>#include <sys/types.h>#include <regex.h>#define __USE_XOPEN#include <time.h> #define felder 56 #ifdef _WIN32#define strtok_r strtok_s__inline char *stpcpy (char *a, const char *b){  size_t n, m;   n = strlen (a);  m = strlen (b);  a += n;  memcpy (a, b, m + 1);  return a + m;}#endif size_tgetFilesize (const char *filename){  struct stat st;   stat (filename, &st);  return st.st_size;} void parsedata (char **buffer, char **outpbuff, char **Kammer,		char **Vorgang);static char *jahr ;static char *monat ;static int skip = 0 ;static int first = 0;static unsigned long intsize = 20480000;static unsigned int usedcols[58] =  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0};static int count = 0;intmain (int argc, char *argv[]){//int count = 0; while(argv[++count] != NULL){}  int usedcolsinit[12] = { 1, 2, 9, 13, 14, 15, 20, 23, 24, 25, 26, 27 };  for (int i = 0; i < 11; i++)    usedcols[usedcolsinit[i] - 1] = 1;   char *outbuff = malloc (intsize);  char *buffer = malloc (intsize);  char *filename = argv[1];if(count >2)  jahr =argv[2];if(count >3)  monat=argv[3];  unsigned long cnt = 0;  unsigned long seekoff = 0;  unsigned long tiles = 0;  unsigned long fsize = (int) getFilesize (argv[1]);  FILE *fp = fopen (argv[1], "rb");  FILE *fp2 = fopen ("courbesall.txt", "a");  char *filetmp= filename;  char *token = strtok (filetmp, "_");  char *Kammer = strtok (NULL, "_");  char *Vorgang = strtok (NULL, "_");  while(*Vorgang=='0') Vorgang++; //  printf ("%s-%s-%s\n", token, Kammer, Vorgang);  unsigned long lastblock;  int nlpos;     buffer[intsize - 1] = '\0';   setvbuf (fp2, NULL, _IOFBF, intsize);   while (fread (buffer, intsize - 1, 1, fp))    {      cnt++;      seekoff = ftell (fp);      nlpos = intsize - 1UL;      while (buffer[nlpos] != '\n')	{	  nlpos--;	  seekoff = seekoff - 1UL;	}      fseek (fp, seekoff, SEEK_SET);      buffer[nlpos - 1] = '\0';      buffer[intsize] = '\0';      parsedata (&buffer, &outbuff, &Kammer, &Vorgang);      tiles = ftell (fp);      fprintf (fp2, "%s", outbuff);    }   lastblock = fsize - tiles;  buffer[lastblock - 1] = '\0';  fread (buffer, lastblock + 1, 1, fp);  parsedata (&buffer, &outbuff, &Kammer, &Vorgang);  fprintf (fp2, "%s", outbuff);  fprintf (fp2, "%c", '\n');  fflush (fp2);  fclose (fp);  fclose (fp2);} static int firstnl = 1;voidcheckdate (char **tmps){//printf("First:%s",*tmps);  struct tm tm;  char *tmp;  tmp = tmps[0];  if (firstnl != 1)    tmp++;  firstnl = 0;  memset (&tm, 0, sizeof (tm));  char *check = malloc (80);  check[0] = '\0';   if (tmp[0] == '\n')    {      tmp++;    }  if (tmp[0] == '\n')    check = strptime (tmp, "\n%d/%m/%Y %H:%M:%S", &tm);  else    check = strptime (tmp, "%d/%m/%Y %H:%M:%S", &tm);   if (check == NULL || *check != '\0')    {      if (tmp[0] == '\n')	check = strptime (tmp, "\n%Y/%m/%d %H:%M:%S", &tm);      else	check = strptime (tmp, "%Y/%m/%d %H:%M:%S", &tm);       if (check == NULL || *check != '\0')	{	}      else if (tmp[0] == '\n')	strftime (tmp, 21, "\n%d-%m-%Y %H:%M:%S", &tm);      else	strftime (tmp, 21, "%d-%m-%Y %H:%M:%S", &tm);    }  else if (tmp[0] == '\n')    strftime (tmp, 21, "\n%d-%m-%Y %H:%M:%S", &tm);  else    strftime (tmp, 21, "%d-%m-%Y %H:%M:%S", &tm);  if (tmp[0] == '\n')    check = strptime (tmp, "\n%d-%m-%Y %H:%M:%S", &tm);  else    check = strptime (tmp, "%d-%m-%Y %H:%M:%S", &tm);//printf("firstafter:%s",tmp);  if (check == NULL || *check != '\0')    {printf("NL ErrorCheckdate\n");//printf("%s %s",tmp,check);}else{//printf("firstafter:%s",tmp);if(count>2){char tempsss[20];int tempyear=tm.tm_year+1900;sprintf (tempsss, "%d",tempyear);if(strcmp (tempsss,jahr) != 0){skip=0;//printf("",tempsss,jahr);} else skip=1;}//printf("aftermonth:%s",tmp);if(count>3){char tempss[20];int tempmon=tm.tm_mon;sprintf (tempss, "%d",tempmon+1);//printf("aftersprintf:%s",tmp);if(strcmp (tempss,monat) != 0)skip=0; else skip=1;}}//printf("secondafter:%s",tmp);}  voidparsedata (char **buffer, char **outpbuff, char **Kammer, char **Vorgang){  int ignore = 3;  char *backup = NULL;  int n = 0;  size_t seps = 0;  char *last = NULL;  char *lastconcat = NULL;  char *p;  int x;  int first = 1;  *outpbuff[0] = 0;  lastconcat = *outpbuff;  int firstnl = 1; lastconcat = stpcpy (lastconcat, "start"); p = strtok_r (*buffer, ",", &backup); p = *buffer;//if(*buffer[0]!='\n')while ( p != NULL )   if(p[0]!="\n") {//printf("%d-%s|",n, p);     //if(n==0&&p[0]!='\n'&&first!=1){//printf("NL Error:%s\n",p);     if (n == felder)	{	  n = 0;	}       if (n == 0)	{    checkdate (&p);   if (first != 1 &&skip==1)	    { //printf("NULLZEILE",p);// lastconcat = stpcpy (lastconcat, "|");	     lastconcat = stpcpy (lastconcat, ",");	     lastconcat = stpcpy (lastconcat, *Kammer);	     lastconcat = stpcpy (lastconcat, ",");	     lastconcat = stpcpy (lastconcat, *Vorgang);// lastconcat = stpcpy (lastconcat, "|");	    }	  //checkdate (&p);	}      if ((usedcols[n] != 0) && skip==1)	{	if (first != 1)	{	  lastconcat = stpcpy (lastconcat, ",");	}	first = 0;	  lastconcat = stpcpy (lastconcat, p);	}       n++;     p = strtok_r (NULL, ",", &backup);    }	lastconcat = stpcpy (lastconcat, ",");	     lastconcat = stpcpy (lastconcat, *Kammer);	     lastconcat = stpcpy (lastconcat, ",");	     lastconcat = stpcpy (lastconcat, *Vorgang); lastconcat = stpcpy (lastconcat, "Ende");}  

Comments