Advertisement
Guest User

Untitled

a guest
Mar 29th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.77 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<libpq-fe.h>
  3. #include<stdlib.h>
  4. #include<unistd.h>
  5. #include<stdbool.h>
  6. #include<string.h>
  7. #include<string.h>
  8.  
  9. void stworz_polaczenie_info(int argc,char *name,char *wynik)
  10. {
  11. char createdb[100] = {"\0"};
  12. char user[100] = {"\0"};
  13. char *haslo;
  14. sprintf(wynik,"createdb %s 2>/dev/null",name);
  15. system(wynik);
  16. printf("Logowanie\n");
  17. printf("Uzytkownik: \n");
  18. scanf("%s",user);
  19. haslo = getpass("Haslo: ");
  20. sprintf(wynik,"host=localhost port=5432 dbname=%s user=%s password=%s",name,user,haslo);
  21. }
  22.  
  23. bool pokaz(PGconn *polaczenie)
  24. {
  25. if(PQstatus(polaczenie) == CONNECTION_OK)
  26. {
  27. printf("Polaczono.\n");
  28. printf("Nazwa bazy danych: %s\n",PQdb(polaczenie));
  29. printf("Uzytkownik: %s\n", PQuser(polaczenie));
  30. printf("Haslo: ");
  31. int haslo_dl = strlen(PQpass(polaczenie));
  32. while(haslo_dl--){ printf("*"); }
  33. printf("\n");
  34. return true;
  35. }
  36. else
  37. {
  38. printf("Nie polaczono.\n%s\n",PQerrorMessage(polaczenie));
  39. return false;
  40. }
  41. }
  42.  
  43. void utworz_tabele_nazwa(char *zrodlo,char *wynik)
  44. {
  45. strncat(wynik,zrodlo,strlen(zrodlo));
  46. }
  47.  
  48. void drop(char *tabela_nazwa,char *wynik)
  49. {
  50. sprintf(wynik,"DROP TABLE %s;",tabela_nazwa);
  51. }
  52.  
  53. char *pole(char *linie, int nr)
  54. {
  55. char *podzial;
  56. for(podzial = strtok(linie,";");podzial && *podzial;podzial = strtok(NULL,";\n"))
  57. {
  58. if(!--nr) return podzial;
  59. }
  60. return NULL;
  61. }
  62.  
  63. int zlicz_kolumny(FILE *file)
  64. {
  65. char linie[1000] = {"\0"};
  66. fseek(file,0,0);
  67. fgets(linie,1000,file);
  68. char *pom = strdup(linie);
  69. int i,licznik = 1;
  70. for(i=0; i<strlen(pom);i++)
  71. {
  72. if(pom[i] == ';') licznik++;
  73. }
  74. free(pom);
  75. return licznik;
  76. }
  77.  
  78. void utworz_tabele(FILE *file,char *tabela_nazwa,char *wynik)
  79. {
  80. char linia[1000] = {"\0"};
  81. char kolumna[1000] = {"\0"};
  82. fgets(linia,1000,file);
  83. char *pom = strdup(linia);
  84. int i = 1, licznik = zlicz_kolumny(file);
  85. while(licznik--)
  86. {
  87. pom = strdup(linia);
  88. strcat(kolumna,"\t");
  89. strcat(kolumna,pole(pom,i));
  90. strcat(kolumna," VARCHAR(20),\n");
  91. i++;
  92. }
  93. sprintf(wynik,"CREATE TABLE %s (\n\tid SERIAL,\n",tabela_nazwa);
  94. strncat(wynik,kolumna,strlen(kolumna)-2);
  95. strcat(wynik,"\n);");
  96. free(pom);
  97. }
  98.  
  99. void wybierz_tabele(char *tabela_nazwa,char *wynik)
  100. {
  101. sprintf(wynik,"SELECT * FROM %s;",tabela_nazwa);
  102. }
  103.  
  104. void drukuj_T(PGresult * wynik)
  105. {
  106. int i,j;
  107. int rzedy = PQntuples(wynik);
  108. int pola = PQnfields(wynik);
  109. printf("Zwrocone rzedy: %d\n",rzedy);
  110. printf("Zwrocone pola: %d\n",pola);
  111. for(i=0;i<rzedy;i++)
  112. {
  113. for(j=0;j<pola;j++)
  114. {
  115. printf("%16s = %24s\n",PQfname(wynik,j),PQgetvalue(wynik,i,j));
  116. }
  117. printf("\n");
  118. }
  119. }
  120.  
  121. void SQL(PGconn *polaczenie,char *komenda)
  122. {
  123. PGresult *wynik;
  124. printf("> %s\n",komenda);
  125. wynik = PQexec(polaczenie,komenda);
  126. printf("Status: %s\n",PQresStatus(PQresultStatus(wynik)));
  127. printf("Zmienione: %s\n",PQcmdTuples(wynik));
  128. printf("Komunikat: %s\n",PQresultErrorMessage(wynik));
  129. switch(PQresultStatus(wynik))
  130. {
  131. case PGRES_TUPLES_OK:
  132. drukuj_T(wynik);
  133. break;
  134. }
  135. PQclear(wynik);
  136. }
  137.  
  138. void utworz_naglowki(FILE *file, char *wynik)
  139. {
  140. char linie[1000] = {"\0"};
  141. char naglowki[1000] = "(";
  142. fseek(file,0,0);
  143. fgets(linie,1000,file);
  144. char *pom = strdup(linie);
  145. int i = 1,licznik = zlicz_kolumny(file);
  146. while(licznik--)
  147. {
  148. pom = strdup(linie);
  149. strcat(naglowki,pole(pom,i));
  150. strcat(naglowki,", ");
  151. i++;
  152. }
  153. strncat(wynik,naglowki,strlen(naglowki)-2);
  154. strcat(wynik,")");
  155. free(pom);
  156. }
  157.  
  158. void alter_tab(char *tabela_nazwa,char *kolumna_nazwa,int rozmiar,char *wynik)
  159. {
  160. sprintf(wynik,"ALTER TABLE %s ALTER COLUMN %s TYPE VARCHAR(%d);", tabela_nazwa,kolumna_nazwa,rozmiar);
  161. }
  162.  
  163. void wstaw_tab(PGconn *polaczenie,FILE *file,char *tabela_nazwa)
  164. {
  165. char linie[1000] = {"\0"};
  166. char naglowki[300] = {"\0"};
  167. utworz_naglowki(file,naglowki);
  168. int i=1,j=0,licznik=zlicz_kolumny(file);
  169. fseek(file,0,0);
  170. char nagl[300] = {"\0"};
  171. fgets(nagl,300,file);
  172. int maxdl[licznik+1];
  173. for(i=1;i<=(licznik+1);i++)
  174. {
  175. maxdl[i] = 20;
  176. }
  177. while(fgets(linie,1000,file))
  178. {
  179. char wstaw[1000] = "INSERT INTO ";
  180. strcat(wstaw,tabela_nazwa);
  181. strcat(wstaw,naglowki);
  182. strcat(wstaw," VALUES\n(");
  183. char *pom;
  184. i=1;
  185. j=licznik;
  186. while(j--)
  187. {
  188. pom = strdup(linie);
  189. strcat(wstaw,"'");
  190. strcat(wstaw,pole(pom,i));
  191. pom = strdup(linie);
  192. if(strlen(pole(pom,i)) > maxdl[i])
  193. {
  194. pom = strdup(linie);
  195. maxdl[i] = strlen(pole(pom,i));
  196. char alter_tabela[300];
  197. pom = strdup(nagl);
  198. alter_tab(tabela_nazwa,(char*)pole(pom,i), maxdl[i],alter_tabela);
  199. SQL(polaczenie,alter_tabela);
  200. }
  201. strcat(wstaw,"'");
  202. if(j !=0) strcat(wstaw,",");
  203. i++;
  204. }
  205. strcat(wstaw,");");
  206. SQL(polaczenie,wstaw);
  207. }
  208. }
  209.  
  210. void HTML(FILE *plik)
  211. {
  212. fprintf(plik,"<html>\n <head>\n <link rel=\"stylesheet\" href = styl.css>\n </head>\n");
  213. fprintf(plik,"<body>\n");
  214. }
  215.  
  216. void closeHTML(FILE *plik)
  217. {
  218. fprintf(plik,"</body>\n");
  219. fprintf(plik,"</html>\n");
  220. }
  221.  
  222. void PQdrukuj(FILE *wyjscie,char *tabela)
  223. {
  224. char komenda[300];
  225. char komenda2[300];
  226. char komenda3[300];
  227. sprintf(komenda,"echo '<html>\n<head>\n<link rel=\"stylesheet\" href = styl.css\n</head>\n<body>\n' >> %s",tabela);
  228. system(komenda);
  229. sprintf(komenda2,"psql -d %s -c \"select * from %s order by id;\" >> %s",tabela,tabela,tabela);
  230. system(komenda2);
  231. sprintf(komenda3,"echo '</body>\n</html>\n' >> %s",tabela);
  232. system(komenda3);
  233. }
  234.  
  235. int main(int argc,char *argv[1])
  236. {
  237. FILE *file = fopen(argv[1],"r");
  238. argv[1][strlen(argv[1])-4] = 0;
  239. char polaczenie_info[300] ={"\0"};
  240. stworz_polaczenie_info(argc,argv[1],polaczenie_info);
  241. PGconn * polaczenie = PQconnectdb(polaczenie_info);
  242. if(!pokaz(polaczenie)) return 1;
  243. char tabela_nazwa[100] = {"\0"};
  244. char drop_tabela[300] = {"\0"};
  245. char create_tabela[500] = {"\0"};
  246. char select_tabela[300] = {"\0"};
  247. printf("===========================\n");
  248. printf("Czy chcesz utworzyc strone HTML?\n");
  249. printf("===========================\n");
  250. printf("Wpisz 'y' jesli tak.\n");
  251. char wybor;
  252. scanf(" %c",&wybor);
  253. if(wybor != 'y') {
  254. utworz_tabele_nazwa(argv[1],tabela_nazwa);
  255. drop(tabela_nazwa,drop_tabela);
  256. utworz_tabele(file,argv[1],create_tabela);
  257. wybierz_tabele(tabela_nazwa,select_tabela);
  258. SQL(polaczenie,drop_tabela);
  259. SQL(polaczenie,create_tabela);
  260. wstaw_tab(polaczenie,file,tabela_nazwa);
  261. SQL(polaczenie,select_tabela);
  262. PQfinish(polaczenie);
  263. }
  264. else {
  265. utworz_tabele_nazwa(argv[1],tabela_nazwa);
  266. drop(tabela_nazwa,drop_tabela);
  267. utworz_tabele(file,argv[1],create_tabela);
  268. wybierz_tabele(tabela_nazwa,select_tabela);
  269. SQL(polaczenie,drop_tabela);
  270. SQL(polaczenie,create_tabela);
  271. wstaw_tab(polaczenie,file,tabela_nazwa);
  272. SQL(polaczenie,select_tabela);
  273. FILE *strona = fopen(argv[1],"w");
  274. PQdrukuj(strona,argv[1]);
  275. printf("Utworzono strone!\n");
  276. PQfinish(polaczenie);
  277. }
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement