Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <libpq-fe.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <stdio.h>
  6.  
  7. int wymiary[3];
  8. void doSQL(PGconn *conn, char *command){
  9. PGresult *result;
  10.  
  11. printf("%s\n", command);
  12.  
  13. result = PQexec(conn, command);
  14. printf("status is : %s\n", PQresStatus(PQresultStatus(result)));
  15. printf("#rows affected: %s\n", PQcmdTuples(result));
  16. printf("result message: %s\n", PQresultErrorMessage(result));
  17.  
  18. switch(PQresultStatus(result)) {
  19. case PGRES_TUPLES_OK:
  20. {
  21. int n = 0, r = 0;
  22. int nrows = PQntuples(result);
  23. int nfields = PQnfields(result);
  24. printf("number of rows returned = %d\n", nrows);
  25. printf("number of fields returned = %d\n", nfields);
  26. for(r = 0; r < nrows; r++) {
  27. for(n = 0; n < nfields; n++)
  28. printf(" %s = %s", PQfname(result, n),PQgetvalue(result,r,n));
  29. printf("\n");
  30. }
  31. }
  32. }
  33. PQclear(result);
  34. }
  35. int baza(char plik[], char plik2[], char login[], char dbname[], char info[] ){
  36. printf("gowno\n");
  37. PGconn *con = PQconnectdb(info); //laczenie z baza
  38. printf("gowno2\n");
  39. if(PQstatus(con) == CONNECTION_OK)
  40. {
  41. //
  42. printf("Logowanie pomyslne\n");
  43. printf("Baza danych: %s\n",dbname);
  44. printf("Login: %s\n\n",login);
  45. // if(licz(plik2)==0) return 0;
  46. FILE * dane = fopen(plik2, "r");
  47. if (dane == NULL){
  48. printf("Blad odczytu pliku! Prosze utworzyc plik o nazwie %s.\n",plik2);
  49. return 0;
  50. }
  51. else
  52. {
  53. printf("Otwarto plik %s\n",plik2);
  54. char polecenie[1000];
  55. int i, j=0, k=0;
  56. char temp, newline='\n',srednik=';';
  57. char tab[wymiary[0]][wymiary[1]][wymiary[2]];
  58. int dlugosc[wymiary[1]];
  59. for(i=0;i<wymiary[1];i++) dlugosc[i]=20;
  60. i=0;
  61. //czytanie zawartosci pliku
  62. while(fscanf(dane,"%c",&temp)==1)
  63. {
  64. if (temp==srednik)
  65. {
  66. if(tab[k][i][j-1]!=0 && k!=0 && i!=0)
  67. tab[k][i][j]=(char)39;
  68. if(20<(j-1)) //ew przekorczenie VARCHAR(20)
  69. {
  70. j--;
  71. if(dlugosc[i]<j)
  72. dlugosc[i]=j;
  73. }
  74. j=0;
  75. if(tab[k][i][j]==0)
  76. strcpy(tab[k][i],"NULL");
  77. i++;
  78. }
  79. else if (temp==newline)
  80. {
  81. if(tab[k][i][j-1]!=0 && k!=0 && i!=0)
  82. tab[k][i][j]=(char)39;
  83. if(20<(j-1)) //ew przekorczenie VARCHAR(20)
  84. {
  85. j--;
  86. if(dlugosc[i]<j)
  87. dlugosc[i]=j;
  88. }
  89. j=0;
  90. if(tab[k][i][j]==0)
  91. strcpy(tab[k][i],"NULL");
  92. i=0;
  93. k++;
  94. }
  95. else
  96. {
  97. if(j==0 && k!=0 && i!=0)
  98. {
  99. tab[k][i][j]=(char)39;
  100. j++;
  101. }
  102. tab[k][i][j]=temp;
  103. j++;
  104. }
  105. }
  106.  
  107. int max=k;
  108. k=0;
  109. sprintf(polecenie, "DROP TABLE %s",plik);
  110. doSQL(con,polecenie);
  111. sprintf(polecenie,"CREATE TABLE %s(%s INTEGER PRIMARY KEY UNIQUE)",plik,tab[k][0]);
  112. doSQL(con,polecenie);
  113. //,tab[k][1],tab[k][2],tab[k][3],tab[k][4],tab[k][5]);
  114. for(i=1;i<wymiary[1];i++){
  115. sprintf(polecenie, "ALTER TABLE %s add COLUMN %s TYPE VARCHAR(20)",plik,tab[0][i]);
  116. doSQL(con,polecenie);
  117. }
  118. for(i=1;i<max;i++) //dodawanie pierwszej kolumny z pliku
  119. {
  120. sprintf(polecenie, "INSERT INTO %s VALUES (%s)",plik,tab[i][0]);
  121. doSQL(con,polecenie);
  122. }
  123. //update dane set tytul='40 to 1' where id=10;
  124. for(i=1;i<wymiary[1];i++)
  125. for(j=1;j<wymiary[0];j++){
  126. sprintf(polecenie, "update %s set %s='%s' where id=%s",plik,tab[0][i],tab[j][i],tab[j][0]);
  127. doSQL(con,polecenie);
  128. }
  129. for(i=0;i<wymiary[1];i++)
  130. if(dlugosc[i]!=20)
  131. {
  132. sprintf(polecenie, "ALTER TABLE %s ALTER COLUMN %s TYPE VARCHAR(%d)",plik,tab[0][i],dlugosc[i]);
  133. doSQL(con,polecenie);
  134. }
  135.  
  136. printf("\n-----------------------------------------------------------\n");
  137. printf("Czy chcesz dodac rekord do tabeli %s (T lub N)?\n",plik);
  138. char odp[1];
  139. char slowo[50];
  140. char slowo2[50];
  141. char tab2[1000][1000][1000];
  142. scanf("%s",&odp[0]);
  143. while(((strcmp(odp,"t")==0) || (strcmp(odp,"T")==0))) //dodawanie do tabeli
  144. {
  145. sprintf(slowo,"%d",max);
  146. strcpy(tab2[max][0],slowo);
  147. for(i=1;i<wymiary[1];i++)
  148. {
  149. printf("Podaj %s\n",tab[0][i]);
  150. scanf("%s",slowo);
  151. if(strcmp(slowo,"NULL")==0)
  152. strcpy(tab2[max][i],slowo);
  153. else
  154. {
  155. sprintf(slowo2,"'%s'",slowo);
  156. strcpy(tab2[max][i],slowo2);
  157. }
  158. if(strlen(slowo)>dlugosc[i]) //ew zmiana max VARCHAR
  159. {
  160. dlugosc[i]=strlen(slowo);
  161. sprintf(polecenie, "ALTER TABLE %s ALTER COLUMN %s TYPE VARCHAR(%d)",plik,tab[0][i],dlugosc[i]);
  162. doSQL(con,polecenie);
  163. }
  164. }
  165. sprintf(polecenie, "INSERT INTO %s VALUES (%s)",plik,tab2[max][0]);
  166. doSQL(con,polecenie);
  167. for(i=1;i<wymiary[1];i++){
  168. sprintf(polecenie, "update %s set %s='%s' where id=%s",plik,tab[0][i],tab2[max][i],tab2[max][0]);
  169. doSQL(con,polecenie);
  170. }
  171. max++;
  172. printf("\n-----------------------------------------------------------\n");
  173. printf("Czy chcesz dodac rekord do tabeli %s (T lub N)?\n",plik);
  174. temp=0;
  175. scanf("%s",&odp[0]);
  176. }
  177. sprintf(polecenie, "SELECT * FROM %s",plik);
  178. doSQL(con,polecenie);
  179. }
  180. }
  181. else
  182. printf("polaczenie nieudane: %s\n", PQerrorMessage(con));
  183. PQfinish(con);
  184. return EXIT_SUCCESS;
  185. }
  186.  
  187. int licz(char plik2[]){
  188. char znak, newline='\n',srednik=';';
  189. int kolumny=0, wiersze=0, maxdl=0, dl=0;
  190. FILE * dane = fopen(plik2, "r");
  191. if (dane == NULL){
  192. printf("Blad odczytu pliku! Prosze utworzyc plik o nazwie %s.\n",plik2);
  193. return 0;
  194. }
  195. else
  196. {
  197. printf("Otwarto plik %s\n",plik2);
  198. while(fscanf(dane,"%c",&znak)==1){
  199. ++dl;
  200. if(znak==newline) { wiersze++; dl=0;}
  201. if(wiersze==0 && znak==srednik) kolumny++;
  202. if(znak==srednik) dl=0;
  203. if(maxdl<dl) maxdl=dl;
  204.  
  205. }
  206. wiersze--;
  207. printf("wiersze=%i\n",wiersze);
  208. printf("kolumny=%i\n",++kolumny);
  209. printf("maxdl=%i\n",maxdl);
  210. wymiary[0]=wiersze;
  211. wymiary[1]=kolumny;
  212. wymiary[2]=maxdl;
  213. fclose(dane);
  214. }
  215. return 1;
  216. }
  217.  
  218. int main(){
  219. printf("Podaj nazwe pliku .csv (bez rozszerzenia) do wczytania\n\n\n");
  220. char plik[40];
  221. char plik2[44];
  222. scanf("%s",plik);
  223. strcpy(plik2,plik);
  224. strcat(plik2,".csv");
  225. if(licz(plik2)==0) return 0;
  226. char login[20];
  227. char dbname[20];
  228. char *password;
  229. printf("Podaj nazwe bazy danych.\n");
  230. scanf("%s",dbname);
  231. printf("Podaj login\n");
  232. scanf("%s",login);
  233. char info[150];
  234. strcpy(info,"host=localhost port=5432 dbname=");
  235. strcat(info,dbname);
  236. strcat(info," user=");
  237. strcat(info,login);
  238. strcat(info," password=");
  239. password=getpass("Podaj haslo\n");
  240. strcat(info,password);
  241. printf("szajs\n");
  242. password=NULL;
  243. printf("szajs\n");
  244. baza(plik,plik2,login,dbname,info);
  245. return 0;
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement