Advertisement
Guest User

Untitled

a guest
Jun 20th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <libpq-fe.h>
  5. #include <termios.h>
  6.  
  7. #define MAX 1000
  8.  
  9. struct kolumny {
  10. char column[100];
  11. };
  12.  
  13. void dropTable(char file[], PGconn *connection);
  14. void createTable(char file[], char linia[], struct kolumny tab[], PGconn *connection);
  15. void alterTable(char file[],char linia[], struct kolumny tab[], int ilosc, int wartosci[], PGconn *connection);
  16. void insertInto(char file[], char linia[], struct kolumny tab[],int ilosc, int wartosci[], PGconn *connection);
  17. int dlugosc(char linia[]);
  18. void nazwa(char file[]);
  19. int iloscKolumn(char linia[]);
  20.  
  21. int main(int argc, char *argv[]) {
  22.  
  23. char user[32];
  24. printf("Podaj login: ");
  25. scanf("%s",user);
  26. char *password;
  27. password = getpass("Podaj hasło: ");
  28. char login[200] = "host=localhost port=5432 dbname=lkarczewski user=";
  29. strcat(login,user);
  30. strcat(login," password=");
  31. strcat(login,password);
  32.  
  33. if (argc == 2) {
  34.  
  35. PGconn *connection = PQconnectdb(login);
  36. printf("Nawiązywanie połączenia...\n");
  37.  
  38. if (PQstatus(connection) == CONNECTION_OK) {
  39. printf("Połączono\n");
  40. FILE *file = fopen(argv[1], "r");
  41.  
  42. if (file) {
  43.  
  44. nazwa(argv[1]);
  45. char linia[MAX];
  46. fgets(linia, MAX, file);
  47. dropTable(argv[1], connection);
  48.  
  49. int ilosc = iloscKolumn(linia);
  50. struct kolumny tab[ilosc];
  51. int wartosci[ilosc];
  52.  
  53. int i;
  54. for(i=0; i<ilosc; i++)
  55. wartosci[i] = 20;
  56.  
  57. printf("Tworzę tabelę...\n");
  58. createTable(argv[1], linia, tab, connection);
  59.  
  60. printf("Dodaję rekordy...\n");
  61. int nr_linii = 1;
  62. while (fgets(linia, MAX, file)) {
  63. insertInto(argv[1],linia,tab,ilosc,wartosci,connection);
  64. nr_linii++;
  65. }
  66. fclose(file);
  67. }
  68. else printf("Podany plik nie istnieje\n");
  69. PQfinish(connection);
  70. }
  71. else printf("Błąd połączenia\n");
  72. }
  73. else if (argc > 2) {
  74.  
  75. PGconn *connection = PQconnectdb(login);
  76.  
  77. if (PQstatus(connection) == CONNECTION_OK) {
  78. char strona[30] = "";
  79. strcat(strona,argv[argc-1]);
  80.  
  81. FILE *html = fopen(strona,"w");
  82. if(html) {
  83.  
  84. fprintf(html,"<!DOCTYPE html>\n<head>\n\n\t<title>Projekt1</title>\n\t<meta charset=\"UTF-8\"/>\n\t<style>\n\t\ttable{margin:10px auto;font-family:Trebuchet MS;}\n\t\tth {\n\t\t\tbackground-color: rgb(230, 40, 40);\n\t\t\tcolor: white;\n\t\t\tfont-weight: normal;\n\t\t\tpadding: 20px 30px;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\ttd {\n\t\t\tbackground-color: rgb(232, 238, 238);\n\t\t\tcolor: rgb(111, 111, 111);\n\t\t\tpadding: 20px 30px;\n\t\t}\n\t</style>\n</head>\n<body>");
  85. int i;
  86.  
  87. for (i = 2; i < argc; i++) {
  88. char *select = malloc((strlen(argv[i]) + 20) * sizeof (char));
  89. sprintf(select, "SELECT * FROM %s;", argv[i]);
  90. PGresult *result = PQexec(connection, select);
  91. if (PQresultStatus(result) == PGRES_TUPLES_OK) {
  92.  
  93. int l = 1;
  94. int n = 0, m = 0;
  95. int nrows = PQntuples(result);
  96. int nfields = PQnfields(result);
  97.  
  98. fprintf(html,"\n\t<table>");
  99. fprintf(html,"\n\t\t<tr>");
  100.  
  101. for (n = 0; n < nfields; n++)
  102. fprintf(html,"\n\t\t\t<th>%s</th>", PQfname(result, n));
  103.  
  104. fprintf(html,"\n\t\t</tr>");
  105.  
  106. for (m = 0; m < nrows; m++) {
  107. fprintf(html,"\n\t\t<tr>");
  108. for (n = 0; n < nfields; n++)
  109. fprintf(html,"\n\t\t\t<td>%s</td>", PQgetvalue(result, m, n));
  110. fprintf(html,"\n\t\t</tr>");
  111. }
  112. fprintf(html,"\n\t</table>");
  113. }
  114. PQclear(result);
  115. }
  116.  
  117. fprintf(html,"</body>\n</html>");
  118. PQfinish(connection);
  119. fclose(html);
  120.  
  121. }
  122. else
  123. printf("Błąd połączenia\n");
  124. }
  125. else
  126. printf("Niewystarczająca ilość argumentów\n");
  127. }
  128. return 0;
  129. }
  130.  
  131.  
  132. void dropTable(char file[], PGconn *connection) {
  133.  
  134. char *drop = malloc((strlen(file) + 20) * sizeof (char));
  135. strcpy(drop, "DROP TABLE IF EXISTS ");
  136. strcat(drop, file);
  137. strcat(drop, ";");
  138. PQexec(connection, drop);
  139. free(drop);
  140. }
  141.  
  142.  
  143. void createTable(char file[], char linia[], struct kolumny tab[], PGconn *connection){
  144.  
  145. int i;
  146. int k=1;
  147. int p = iloscKolumn(linia);
  148. int dl = dlugosc(linia);
  149. char *create = malloc((dl * p + strlen(file) + 50) * sizeof (char));
  150.  
  151. strcpy(create, "CREATE TABLE ");
  152. strcat(create, file);
  153. strcat(create, "(");
  154. strcat(create, linia);
  155. strcpy(tab[0].column,linia);
  156. strcat(create, " VARCHAR(20) UNIQUE");
  157.  
  158. for (i = strlen(linia) + 1; i < dl; i += strlen(linia + i) + 1,k++) {
  159. strcpy(tab[k].column,linia+i);
  160. strcat(create, ",");
  161. strcat(create, linia + i);
  162. strcat(create, " VARCHAR(20) DEFAULT NULL");
  163. }
  164.  
  165. strcat(create, ");");
  166. PQexec(connection, create);
  167. printf("Utworzono tabelę\n");
  168. free(create);
  169. }
  170.  
  171.  
  172. void alterTable(char file[],char linia[], struct kolumny tab[], int ilosc, int wartosci[], PGconn *connection) {
  173.  
  174. char *alter = malloc((strlen(file) + 100) * sizeof (char));
  175. char d[100];
  176.  
  177. if(strlen(linia) > wartosci[ilosc]) {
  178. strcat(alter, "ALTER TABLE ");
  179. strcat(alter, file);
  180. strcat(alter, " ALTER COLUMN ");
  181. strcat(alter, tab[ilosc].column);
  182. strcat(alter, " TYPE VARCHAR(");
  183. sprintf(d,"%zu",strlen(linia)+1);
  184. strcat(alter, d);
  185. strcat(alter, ");");
  186. wartosci[ilosc] = strlen(linia)+1;
  187. PQexec(connection,alter);
  188. }
  189.  
  190. free(alter);
  191. }
  192.  
  193.  
  194. void insertInto(char file[], char linia[], struct kolumny tab[],int ilosc, int wartosci[], PGconn *connection) {
  195.  
  196. int i,k=1;
  197. int p = iloscKolumn(linia);
  198. int dl = dlugosc(linia);
  199.  
  200. char *insert = malloc((dl+10 * p + strlen(file) + 50) * sizeof (char));
  201.  
  202. strcpy(insert, "INSERT INTO ");
  203. alterTable(file,linia,tab,ilosc,wartosci,connection);
  204. strcat(insert, file);
  205. strcat(insert, " VALUES(");
  206. strcat(insert, "'");
  207. strcat(insert, linia);
  208. strcat(insert, "'");
  209.  
  210. for (i = strlen(linia) + 1; (i < dl); i += strlen(linia + i) + 1,k++) {
  211.  
  212. alterTable(file,linia+i,tab,k,wartosci,connection);
  213. strcat(insert, ",");
  214. strcat(insert, "'");
  215. strcat(insert, linia + i);
  216. strcat(insert, "'");
  217.  
  218. }
  219. strcat(insert, ");");
  220.  
  221. PQexec(connection, insert);
  222. printf("Dodano rekord\n");
  223. free(insert);
  224. }
  225.  
  226.  
  227. int dlugosc(char linia[]) {
  228.  
  229. int i;
  230.  
  231. for (i = 0; linia[i]; i++) {
  232. if (linia[i] == ';' || linia[i] == '\n')
  233. linia[i] = 0;
  234. }
  235. return i;
  236. }
  237.  
  238. void nazwa(char file[]) {
  239.  
  240. file[strlen(file) - 4] = 0;
  241. }
  242.  
  243. int iloscKolumn(char linia[]) {
  244.  
  245. int i;
  246. int kolumna = 1;
  247.  
  248. for (i = 0; linia[i]; i++) {
  249. if (linia[i] == ';')
  250. kolumna++;
  251. }
  252. return kolumna;
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement