Arusekk

FTG2 research system

Aug 31st, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.40 KB | None | 0 0
  1. #if 0
  2. // Arek jest sprawa
  3. // w FTG chcę zrobić folder research a w nim pliki txt
  4. // oznaczone ID researchu, a w nich jakiś opis, wymagania, koszt i robocizna
  5. // jak zrobić żeby wczytało wszystkie po kolei do odpowiednich tablic? napiszesz mi taką funkcję?
  6. // i zrób jakoś tak żebym mógł to ogarnąć i dodać coś jak będzie trzeba
  7.  
  8. DOKUMENTACJA:
  9. funkcje bool zwracają czy wystąpił błąd
  10. stuktura pliku "<costam>_rsch.txt": {
  11.  
  12. <id>
  13. Nazwa badania (moze byc ze spacjami, ale nie moze byc pusty)
  14. Jakis opis badania (tak samo)
  15.  
  16. <koszt> <robocizna>
  17.  
  18. 3<liczba wymagan>
  19. id_wymagania
  20. id_wymagania
  21. id_wymagania
  22.  
  23.  
  24. }
  25.  
  26. #endif
  27.  
  28. #include <bits/stdc++.h>
  29. #include <dirent.h>
  30. #include <sys/types.h>
  31.  
  32. //BEGIN: makra
  33.  
  34. const char RSCHDIR[] = "./";
  35. const char FILEEXT[] = "_rsch.txt";
  36. const int BUFRSIZ = 200;
  37.  
  38. #define clen(x) (sizeof(x)/sizeof(*x)-1)
  39.  
  40. //END: makra
  41.  
  42. struct rsch;
  43. std::vector<rsch> badania;
  44. // badania.size()
  45. // badania[i].nazwa
  46.  
  47. struct rsch {
  48.   int id = -1;
  49.   int koszt;
  50.   int robocizna;
  51.   std::string nazwa;
  52.   std::string opis;
  53.   std::vector<int> wymagania;
  54.   bool odkryte;
  55.   bool dostepne() {
  56. //     if (odkryte) return true;
  57.     for (unsigned int i=0; i<wymagania.size(); i++)
  58.       if (!badania[wymagania[i]].odkryte)
  59.     return false;
  60.     return true;
  61.   }
  62. };
  63.  
  64. bool regipsearch_process(const char* plik) {
  65.   unsigned int id, i, l = strlen(plik);
  66.   if (l<clen(FILEEXT)) return false;
  67.   if (strcmp(plik+l-clen(FILEEXT), FILEEXT)) return false;
  68.   FILE* fp = fopen(plik, "r");
  69.   if (fp == NULL) return true;
  70.  
  71.   if (fscanf(fp, "%u", &id) < 1) {
  72.     printf("Syntax error in %s", plik);
  73.     return true;
  74.   }
  75.  
  76.   if (badania.size() <= id)
  77.     badania.resize(id+1);
  78.   badania[id].id = id;
  79.  
  80.   char buf[BUFRSIZ];
  81.   do {
  82.     fgets(buf, BUFRSIZ, fp);
  83.     for (i=0; buf[i]>=' '; i++);
  84.     buf[i]='\0';
  85.   }
  86.   while (! *buf);
  87.   badania[id].nazwa = buf;
  88.  
  89.   do {
  90.     fgets(buf, BUFRSIZ, fp);
  91.     for (i=0; buf[i]>=' '; i++);
  92.     buf[i]='\0';
  93.   }
  94.   while (! *buf);
  95.   badania[id].opis = buf;
  96.  
  97.   if (fscanf(fp, "%d%d%u", &badania[id].koszt, &badania[id].robocizna, &l) < 3) {
  98.     printf("Syntax error in %s", plik);
  99.     return true;
  100.   }
  101.  
  102.   while (l--) {
  103.     fscanf(fp, "%u", &i);
  104.     badania[id].wymagania.push_back(i);
  105.   }
  106.  
  107.   fclose(fp);
  108.   return false;
  109. }
  110.  
  111. bool regipsearch_init() { // GOTOWE
  112.   DIR *dp;
  113.   struct dirent *ep;
  114.   dp = opendir (RSCHDIR);
  115.  
  116.   if (dp == NULL) return true;
  117.  
  118.   while ((ep = readdir (dp))) {
  119.     if (regipsearch_process(ep->d_name))
  120.       return true;
  121.   }
  122.  
  123.   closedir (dp);
  124.   return false;
  125. }
  126.  
  127. bool regipsearch_dump() {
  128.   printf("%lu\n", badania.size());
  129.   for (unsigned int i=0; i<badania.size(); i++) {
  130.     if (badania[i].id != (int)i) continue;
  131.     printf("\nid: %d\n", badania[i].id);
  132.     printf("nazwa: %s\n", badania[i].nazwa.c_str());
  133.     printf("koszt: %d\n", badania[i].koszt);
  134.     printf("robocizna: %d\n", badania[i].robocizna);
  135.     printf("opis: %s\n", badania[i].opis.c_str());
  136.     printf("odkryte: %c\n", '-' - 2*badania[i].odkryte);
  137.     printf("dostepne: %c\n", '-' - 2*badania[i].dostepne());
  138.     printf("wymagane: [%lu]", badania[i].wymagania.size());
  139.     for (unsigned int j=0; j<badania[i].wymagania.size(); j++)
  140.       printf(" %d", badania[i].wymagania[j]);
  141.     printf("\n");
  142.   }
  143.   return false;
  144. }
  145.  
  146. main(){
  147.   if (regipsearch_init())
  148.     return 1;
  149.   if (regipsearch_dump())
  150.     return 2;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment