Schupp

Untitled

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