Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #if 0
- // Arek jest sprawa
- // w FTG chcę zrobić folder research a w nim pliki txt
- // oznaczone ID researchu, a w nich jakiś opis, wymagania, koszt i robocizna
- // jak zrobić żeby wczytało wszystkie po kolei do odpowiednich tablic? napiszesz mi taką funkcję?
- // i zrób jakoś tak żebym mógł to ogarnąć i dodać coś jak będzie trzeba
- DOKUMENTACJA:
- funkcje bool zwracają czy wystąpił błąd
- stuktura pliku "<costam>_rsch.txt": {
- <id>
- Nazwa badania (moze byc ze spacjami, ale nie moze byc pusty)
- Jakis opis badania (tak samo)
- <koszt> <robocizna>
- 3<liczba wymagan>
- id_wymagania
- id_wymagania
- id_wymagania
- }
- #endif
- #include <bits/stdc++.h>
- #include <dirent.h>
- #include <sys/types.h>
- //BEGIN: makra
- const char RSCHDIR[] = "./";
- const char FILEEXT[] = "_rsch.txt";
- const int BUFRSIZ = 200;
- #define clen(x) (sizeof(x)/sizeof(*x)-1)
- //END: makra
- struct rsch;
- std::vector<rsch> badania;
- // badania.size()
- // badania[i].nazwa
- struct rsch {
- int id = -1;
- int koszt;
- int robocizna;
- std::string nazwa;
- std::string opis;
- std::vector<int> wymagania;
- bool odkryte;
- bool dostepne() {
- // if (odkryte) return true;
- for (unsigned int i=0; i<wymagania.size(); i++)
- if (!badania[wymagania[i]].odkryte)
- return false;
- return true;
- }
- };
- bool regipsearch_process(const char* plik) {
- unsigned int id, i, l = strlen(plik);
- if (l<clen(FILEEXT)) return false;
- if (strcmp(plik+l-clen(FILEEXT), FILEEXT)) return false;
- FILE* fp = fopen(plik, "r");
- if (fp == NULL) return true;
- if (fscanf(fp, "%u", &id) < 1) {
- printf("Syntax error in %s", plik);
- return true;
- }
- if (badania.size() <= id)
- badania.resize(id+1);
- badania[id].id = id;
- char buf[BUFRSIZ];
- do {
- fgets(buf, BUFRSIZ, fp);
- for (i=0; buf[i]>=' '; i++);
- buf[i]='\0';
- }
- while (! *buf);
- badania[id].nazwa = buf;
- do {
- fgets(buf, BUFRSIZ, fp);
- for (i=0; buf[i]>=' '; i++);
- buf[i]='\0';
- }
- while (! *buf);
- badania[id].opis = buf;
- if (fscanf(fp, "%d%d%u", &badania[id].koszt, &badania[id].robocizna, &l) < 3) {
- printf("Syntax error in %s", plik);
- return true;
- }
- while (l--) {
- fscanf(fp, "%u", &i);
- badania[id].wymagania.push_back(i);
- }
- fclose(fp);
- return false;
- }
- bool regipsearch_init() { // GOTOWE
- DIR *dp;
- struct dirent *ep;
- dp = opendir (RSCHDIR);
- if (dp == NULL) return true;
- while ((ep = readdir (dp))) {
- if (regipsearch_process(ep->d_name))
- return true;
- }
- closedir (dp);
- return false;
- }
- bool regipsearch_dump() {
- printf("%lu\n", badania.size());
- for (unsigned int i=0; i<badania.size(); i++) {
- if (badania[i].id != (int)i) continue;
- printf("\nid: %d\n", badania[i].id);
- printf("nazwa: %s\n", badania[i].nazwa.c_str());
- printf("koszt: %d\n", badania[i].koszt);
- printf("robocizna: %d\n", badania[i].robocizna);
- printf("opis: %s\n", badania[i].opis.c_str());
- printf("odkryte: %c\n", '-' - 2*badania[i].odkryte);
- printf("dostepne: %c\n", '-' - 2*badania[i].dostepne());
- printf("wymagane: [%lu]", badania[i].wymagania.size());
- for (unsigned int j=0; j<badania[i].wymagania.size(); j++)
- printf(" %d", badania[i].wymagania[j]);
- printf("\n");
- }
- return false;
- }
- main(){
- if (regipsearch_init())
- return 1;
- if (regipsearch_dump())
- return 2;
- }
Advertisement
Add Comment
Please, Sign In to add comment