Schupp

test3.c

Sep 16th, 2021
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 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 char *jahr ;
  40. static char *monat ;
  41. static int skip = 0 ;
  42. static int first = 0;
  43. static unsigned long intsize = 20480000;
  44. static unsigned int usedcols[58] =
  45. { 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,
  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
  48. };
  49. static int count = 0;
  50. int
  51. main (int argc, char *argv[])
  52. {
  53. //int count = 0;
  54. while(argv[++count] != NULL)
  55. {}
  56. int usedcolsinit[12] = { 1, 2, 9, 13, 14, 15, 20, 23, 24, 25, 26, 27 };
  57. for (int i = 0; i < 11; i++)
  58. usedcols[usedcolsinit[i] - 1] = 1;
  59.  
  60. char *outbuff = malloc (intsize);
  61. char *buffer = malloc (intsize);
  62. char *filename = argv[1];
  63. if(count >2) jahr =argv[2];
  64. if(count >3) monat=argv[3];
  65. unsigned long cnt = 0;
  66. unsigned long seekoff = 0;
  67. unsigned long tiles = 0;
  68. unsigned long fsize = (int) getFilesize (argv[1]);
  69. FILE *fp = fopen (argv[1], "rb");
  70. FILE *fp2 = fopen ("courbesall.txt", "a");
  71. char *filetmp= filename;
  72. char *token = strtok (filetmp, "_");
  73. char *Kammer = strtok (NULL, "_");
  74. char *Vorgang = strtok (NULL, "_");
  75. while(*Vorgang=='0') Vorgang++;
  76.  
  77. // printf ("%s-%s-%s\n", token, Kammer, Vorgang);
  78. unsigned long lastblock;
  79. int nlpos;
  80.  
  81.  
  82.  
  83. buffer[intsize - 1] = '\0';
  84.  
  85. setvbuf (fp2, NULL, _IOFBF, intsize);
  86.  
  87. while (fread (buffer, intsize - 1, 1, fp))
  88. {
  89. cnt++;
  90. seekoff = ftell (fp);
  91. nlpos = intsize - 1UL;
  92. while (buffer[nlpos] != '\n')
  93. {
  94. nlpos--;
  95. seekoff = seekoff - 1UL;
  96. }
  97. fseek (fp, seekoff, SEEK_SET);
  98. buffer[nlpos - 1] = '\0';
  99. buffer[intsize] = '\0';
  100. parsedata (&buffer, &outbuff, &Kammer, &Vorgang);
  101. tiles = ftell (fp);
  102. fprintf (fp2, "%s", outbuff);
  103. }
  104.  
  105. lastblock = fsize - tiles;
  106. buffer[lastblock - 1] = '\0';
  107. fread (buffer, lastblock + 1, 1, fp);
  108. parsedata (&buffer, &outbuff, &Kammer, &Vorgang);
  109. fprintf (fp2, "%s", outbuff);
  110. fprintf (fp2, "%c", '\n');
  111. fflush (fp2);
  112. fclose (fp);
  113. fclose (fp2);
  114. }
  115.  
  116. static int firstnl = 1;
  117. void
  118. checkdate (char **tmps)
  119. {
  120. //printf("First:%s",*tmps);
  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. //printf("firstafter:%s",tmp);
  165. if (check == NULL || *check != '\0')
  166. {printf("NL ErrorCheckdate\n");
  167. //printf("%s %s",tmp,check);
  168. }else{
  169. //printf("firstafter:%s",tmp);
  170. if(count>2){
  171. char tempsss[20];
  172. int tempyear=tm.tm_year+1900;
  173. sprintf (tempsss, "%d",tempyear);
  174. if(strcmp (tempsss,jahr) != 0)
  175. {skip=0;
  176. //printf("",tempsss,jahr);
  177. }
  178. else skip=1;
  179. }
  180. //printf("aftermonth:%s",tmp);
  181. if(count>3){
  182. char tempss[20];
  183. int tempmon=tm.tm_mon;
  184. sprintf (tempss, "%d",tempmon+1);
  185. //printf("aftersprintf:%s",tmp);
  186. if(strcmp (tempss,monat) != 0)
  187. skip=0; else skip=1;
  188. }
  189. }
  190. //printf("secondafter:%s",tmp);
  191. }
  192.  
  193.  
  194. void
  195. parsedata (char **buffer, char **outpbuff, char **Kammer, char **Vorgang)
  196. {
  197. int ignore = 3;
  198. char *backup = NULL;
  199. int n = 0;
  200. size_t seps = 0;
  201. char *last = NULL;
  202. char *lastconcat = NULL;
  203. char *p;
  204. int x;
  205. int first = 1;
  206. *outpbuff[0] = 0;
  207. lastconcat = *outpbuff;
  208. int firstnl = 1;
  209. lastconcat = stpcpy (lastconcat, "start");
  210. p = strtok_r (*buffer, ",", &backup);
  211. p = *buffer;
  212. //if(*buffer[0]!='\n')
  213. while ( p != NULL )
  214. if(p[0]!="\n") {
  215. //printf("%d-%s|",n, p);
  216. //if(n==0&&p[0]!='\n'&&first!=1){
  217. //printf("NL Error:%s\n",p);
  218.  
  219. if (n == felder)
  220. {
  221. n = 0;
  222. }
  223.  
  224. if (n == 0)
  225. {
  226. checkdate (&p);
  227.  
  228. if (first != 1 &&skip==1)
  229. {
  230.  
  231. //printf("NULLZEILE",p);
  232. // lastconcat = stpcpy (lastconcat, "|");
  233. lastconcat = stpcpy (lastconcat, ",");
  234. lastconcat = stpcpy (lastconcat, *Kammer);
  235. lastconcat = stpcpy (lastconcat, ",");
  236. lastconcat = stpcpy (lastconcat, *Vorgang);
  237. // lastconcat = stpcpy (lastconcat, "|");
  238. }
  239. //checkdate (&p);
  240. }
  241. if ((usedcols[n] != 0) && skip==1)
  242. {
  243. if (first != 1)
  244. {
  245. lastconcat = stpcpy (lastconcat, ",");
  246. }
  247. first = 0;
  248. lastconcat = stpcpy (lastconcat, p);
  249. }
  250.  
  251. n++;
  252. p = strtok_r (NULL, ",", &backup);
  253. }
  254. lastconcat = stpcpy (lastconcat, ",");
  255. lastconcat = stpcpy (lastconcat, *Kammer);
  256. lastconcat = stpcpy (lastconcat, ",");
  257. lastconcat = stpcpy (lastconcat, *Vorgang);
  258. lastconcat = stpcpy (lastconcat, "Ende");
  259. }
  260.  
  261.  
Advertisement
Add Comment
Please, Sign In to add comment