Schupp

check

Aug 25th, 2021 (edited)
969
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.30 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <sys/stat.h>
  6. #include <sys/types.h>
  7. #include <regex.h>
  8. #define __USE_XOPEN
  9. #include <time.h>
  10.  
  11. #define felder 56
  12.  
  13. #ifdef _WIN32
  14. #define strtok_r strtok_s
  15. __inline char *
  16. stpcpy (char *a, const char *b)
  17. {
  18.   size_t n, m;
  19.  
  20.   n = strlen (a);
  21.   m = strlen (b);
  22.   a += n;
  23.   memcpy (a, b, m + 1);
  24.   return a + m;
  25. }
  26. #endif
  27.  
  28. size_t
  29. getFilesize (const char *filename)
  30. {
  31.   struct stat st;
  32.  
  33.   stat (filename, &st);
  34.   return st.st_size;
  35. }
  36.  
  37. void parsedata (char **buffer, char **outpbuff, char **Kammer,
  38.         char **Vorgang);
  39.  
  40. static char *jahr ;
  41. static char *monat ;
  42. static int skip =0;
  43. static int first = 0;
  44. static unsigned long intsize = 2048000;
  45. static unsigned int usedcols[58] =
  46.   { 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,
  47.   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,
  48.   0, 0, 0, 0, 0, 0, 0
  49. };
  50. static int count = 0;
  51. int
  52. main (int argc, char *argv[])
  53. {
  54. //int count = 0;
  55. while(argv[++count] != NULL)
  56. {}
  57.   int usedcolsinit[12] = { 1, 2, 9, 13, 14, 15, 20, 23, 24, 25, 26, 27 };
  58.   for (int i = 0; i < 11; i++)
  59.     usedcols[usedcolsinit[i] - 1] = 1;
  60.  
  61.   char *outbuff = malloc (intsize);
  62.   char *buffer = malloc (intsize);
  63.   char *filename = argv[1];
  64. if(count >2)  jahr =argv[2];
  65. if(count >3)  monat=argv[3];
  66.   unsigned long cnt = 0;
  67.   unsigned long seekoff = 0;
  68.   unsigned long tiles = 0;
  69.   unsigned long fsize = (int) getFilesize (argv[1]);
  70.   FILE *fp = fopen (argv[1], "rb");
  71.   FILE *fp2 = fopen ("courbesall.txt", "a");
  72.   char *filetmp= filename;
  73.   char *token = strtok (filetmp, "_");
  74.   char *Kammer = strtok (NULL, "_");
  75.   char *Vorgang = strtok (NULL, "_");
  76.   while(*Vorgang=='0') Vorgang++;
  77.  
  78. //  printf ("%s-%s-%s\n", token, Kammer, Vorgang);
  79.   unsigned long lastblock;
  80.   int nlpos;
  81.  
  82.  
  83.  
  84.   buffer[intsize - 1] = '\0';
  85.  
  86.   setvbuf (fp2, NULL, _IOFBF, intsize);
  87.  
  88.   while (fread (buffer, intsize - 1, 1, fp))
  89.     {
  90.       cnt++;
  91.       seekoff = ftell (fp);
  92.       nlpos = intsize - 1UL;
  93.       while (buffer[nlpos] != '\n')
  94.     {
  95.       nlpos--;
  96.       seekoff = seekoff - 1UL;
  97.     }
  98.       fseek (fp, seekoff, SEEK_SET);
  99.       buffer[nlpos - 1] = '\0';
  100.       buffer[intsize] = '\0';
  101.       parsedata (&buffer, &outbuff, &Kammer, &Vorgang);
  102.       tiles = ftell (fp);
  103.       fprintf (fp2, "%s", outbuff);
  104.     }
  105.  
  106.   lastblock = fsize - tiles;
  107.   buffer[lastblock - 1] = '\0';
  108.   fread (buffer, lastblock + 1, 1, fp);
  109.   parsedata (&buffer, &outbuff, &Kammer, &Vorgang);
  110.   fprintf (fp2, "%s", outbuff);
  111.   fprintf (fp2, "%c", '\n');
  112.   fflush (fp2);
  113.   fclose (fp);
  114.   fclose (fp2);
  115. }
  116.  
  117. static int firstnl = 1;
  118. void
  119. checkdate (char **tmps)
  120. {
  121.   struct tm tm;
  122.   char *tmp;
  123.   tmp = tmps[0];
  124.   if (firstnl != 1)
  125.     tmp++;
  126.   firstnl = 0;
  127.   memset (&tm, 0, sizeof (tm));
  128.   char *check = malloc (80);
  129.   check[0] = '\0';
  130.  
  131.   if (tmp[0] == '\n')
  132.     {
  133.       tmp++;
  134.     }
  135.   if (tmp[0] == '\n')
  136.     check = strptime (tmp, "\n%d/%m/%Y %H:%M:%S", &tm);
  137.   else
  138.     check = strptime (tmp, "%d/%m/%Y %H:%M:%S", &tm);
  139.  
  140.   if (check == NULL || *check != '\0')
  141.     {
  142.       if (tmp[0] == '\n')
  143.     check = strptime (tmp, "\n%Y/%m/%d %H:%M:%S", &tm);
  144.       else
  145.     check = strptime (tmp, "%Y/%m/%d %H:%M:%S", &tm);
  146.  
  147.       if (check == NULL || *check != '\0')
  148.     {
  149.     }
  150.       else if (tmp[0] == '\n')
  151.     strftime (tmp, 21, "\n%d-%m-%Y %H:%M:%S", &tm);
  152.       else
  153.     strftime (tmp, 21, "%d-%m-%Y %H:%M:%S", &tm);
  154.     }
  155.   else if (tmp[0] == '\n')
  156.     strftime (tmp, 21, "\n%d-%m-%Y %H:%M:%S", &tm);
  157.   else
  158.     strftime (tmp, 21, "%d-%m-%Y %H:%M:%S", &tm);
  159.  
  160.  if (tmp[0] == '\n')
  161.     check = strptime (tmp, "\n%d-%m-%Y %H:%M:%S", &tm);
  162.   else
  163.     check = strptime (tmp, "%d-%m-%Y %H:%M:%S", &tm);
  164.  
  165.   if (check == NULL || *check != '\0')
  166.     {}else{
  167.  
  168. if(count>2){
  169. //strftime (&temp, 21, "%Y", &tm);
  170. char *temp;
  171. int tempyear=tm.tm_year+1900;
  172. //printf("%d %s \n",tempyear, temp);
  173. sprintf (temp, "%d",tempyear);
  174. //printf("%d %s \n",tempyear, temp);
  175. if(strcmp (temp,jahr) != 0)
  176. skip=0; else skip=1;
  177. }
  178. if(count>3){
  179. //strftime (&temp, 21, "%Y", &tm);
  180. char *temps;
  181. int tempmon=tm.tm_mon;
  182. //printf("%d %s \n",tempmon, temps);
  183. sprintf (temps, "%d",tempmon+1);
  184. //printf("%s %s \n",monat, temps);
  185. if(strcmp (temps,monat) != 0)
  186. skip=0; else skip=1;
  187. }
  188. }
  189.  
  190. }
  191.  
  192.  
  193. void
  194. parsedata (char **buffer, char **outpbuff, char **Kammer, char **Vorgang)
  195. {
  196.   int ignore = 3;
  197.   char *backup = NULL;
  198.   int n = 0;
  199.   size_t seps = 0;
  200.   char *last = NULL;
  201.   char *lastconcat = NULL;
  202.   char *p;
  203.   int x;
  204.   int first = 1;
  205.  
  206.   *outpbuff[0] = 0;
  207.   lastconcat = *outpbuff;
  208.   int firstnl = 1;
  209.   for (p = strtok_r (*buffer, ",", &backup); p != NULL;
  210.        p = strtok_r (NULL, ",", &backup))
  211.     {
  212.      
  213. if(n==0&&p[0]!='\n'&&first!=1){
  214. printf("NL Error:%s\n",p);
  215. }    
  216.     if (n == felder)
  217.     {
  218.       n = 0;
  219.     }
  220.       if (n == 0)
  221.     {
  222.          checkdate (&p);
  223.       if (first != 1 &&skip==1)
  224.         {lastconcat = stpcpy (lastconcat, ",");
  225.          lastconcat = stpcpy (lastconcat, *Kammer);
  226.          lastconcat = stpcpy (lastconcat, ",");
  227.          lastconcat = stpcpy (lastconcat, *Vorgang);
  228.         }
  229.       //checkdate (&p);
  230.     }
  231.       if (usedcols[n] != 0 &&skip==1)
  232.     {
  233.       if (first != 1)
  234.       lastconcat = stpcpy (lastconcat, ",");
  235.       first = 0;
  236.       lastconcat = stpcpy (lastconcat, p);
  237.     }
  238.       n++;
  239.      
  240.     }
  241. }
  242.  
  243.  
Add Comment
Please, Sign In to add comment