Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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_t
- getFilesize (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 = 2048000;
- 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;
- int
- main (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;
- void
- checkdate (char **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);
- if (check == NULL || *check != '\0')
- {}else{
- if(count>2){
- //strftime (&temp, 21, "%Y", &tm);
- char *temp;
- int tempyear=tm.tm_year+1900;
- //printf("%d %s \n",tempyear, temp);
- sprintf (temp, "%d",tempyear);
- //printf("%d %s \n",tempyear, temp);
- if(strcmp (temp,jahr) != 0)
- skip=0; else skip=1;
- }
- if(count>3){
- //strftime (&temp, 21, "%Y", &tm);
- char *temps;
- int tempmon=tm.tm_mon;
- //printf("%d %s \n",tempmon, temps);
- sprintf (temps, "%d",tempmon+1);
- //printf("%s %s \n",monat, temps);
- if(strcmp (temps,monat) != 0)
- skip=0; else skip=1;
- }
- }
- }
- void
- parsedata (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;
- for (p = strtok_r (*buffer, ",", &backup); p != NULL;
- p = strtok_r (NULL, ",", &backup))
- {
- 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)
- {lastconcat = stpcpy (lastconcat, ",");
- lastconcat = stpcpy (lastconcat, *Kammer);
- lastconcat = stpcpy (lastconcat, ",");
- lastconcat = stpcpy (lastconcat, *Vorgang);
- }
- //checkdate (&p);
- }
- if (usedcols[n] != 0 &&skip==1)
- {
- if (first != 1)
- lastconcat = stpcpy (lastconcat, ",");
- first = 0;
- lastconcat = stpcpy (lastconcat, p);
- }
- n++;
- }
- }
Add Comment
Please, Sign In to add comment