Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <libpq-fe.h>
  5. #include <assert.h>
  6. #include <unistd.h>
  7. #include <termios.h>
  8.  
  9.  
  10. char *A,dbname[100],pass[100],user[100],port[100],host[100];
  11. char query[1000],drop[1000],alter[1000];
  12. char **kolumny;
  13. char **data;
  14. PGresult *result;
  15. PGconn *conn;
  16. int ilosc;
  17.  
  18. char** str_split(char* a_str, const char a_delim){
  19. char** result = 0;
  20. size_t count = 0;
  21. char* tmp = a_str;
  22. char* last_comma = 0;
  23. char delim[2];
  24. delim[0] = a_delim;
  25. delim[1] = 0;
  26.  
  27. while (*tmp)
  28. {
  29. if (a_delim == *tmp)
  30. {
  31. count++;
  32. last_comma = tmp;
  33. }
  34. tmp++;
  35. }
  36.  
  37. count += last_comma < (a_str + strlen(a_str) - 1);
  38. count++;
  39.  
  40. result = malloc(sizeof(char*) * count);
  41.  
  42. if (result)
  43. {
  44. size_t idx = 0;
  45. char* token = strtok(a_str, delim);
  46.  
  47. while (token)
  48. {
  49. assert(idx < count);
  50. *(result + idx++) = strdup(token);
  51. token = strtok(0, delim);
  52. }
  53. //assert(idx == count - 1);
  54. *(result + idx) = 0;
  55. }
  56.  
  57. return result;
  58. }
  59.  
  60. int countLines(char *name){
  61. int line;
  62. FILE *file = fopen(name, "r");
  63. char znak;
  64. while((znak = getc(file)) != EOF) {
  65. if(znak == '\n'){
  66. line++;
  67. }
  68. }
  69. fclose(file);
  70. return line;
  71. }
  72.  
  73. void getColumnNames(char *name){
  74. FILE *file = fopen(name, "r");
  75. char znak;
  76. char wiersz[1000];
  77. int linie;
  78. fscanf(file, "%s", wiersz);
  79. linie = strlen(wiersz);
  80. kolumny = str_split(wiersz, ';');
  81. fclose(file);
  82. }
  83.  
  84. void alterTable(int l, int length,char *name){
  85. char len[1000];
  86. sprintf(len, "%d", length);
  87. strcpy(alter, "ALTER TABLE ");
  88. strcat(alter, name);
  89. strcat(alter, " ALTER COLUMN ");
  90. strcat(alter, *(kolumny + l));
  91. strcat(alter, " TYPE VARCHAR(");
  92. strcat(alter, len);
  93. strcat(alter,")");
  94. if(PQstatus(conn) == CONNECTION_OK){
  95. result = PQexec(conn, alter);
  96. } else {
  97. printf("%s\n", PQerrorMessage(conn));
  98. }
  99.  
  100.  
  101.  
  102. }
  103.  
  104. void insertData(char *name){
  105. strcat(name,".csv");
  106. FILE *file = fopen(name, "r");
  107. int lines = countLines(name);
  108. char znak;
  109. int znaki = strlen(name);
  110. name[znaki-4]='\0';
  111. char wiersz[100];
  112. int i=0,linie,j,l,column=0;
  113. fscanf(file, "%s", wiersz);
  114. for(i=0;i<lines-2;i++){
  115. fscanf(file, "%s", wiersz);
  116. linie = strlen(wiersz);
  117. data = str_split(wiersz, ';');
  118. strcpy(query,"INSERT INTO ");
  119. strcat(query,name);
  120. strcat(query, " values('");
  121. for (l = 0; *(data + l); l++){
  122. //printf("Wyraz o nr %d to %s\n",l,*(data+l));
  123. if(l<ilosc){
  124. if(strlen(*(data + l))>=20){
  125. alterTable(l,strlen(*(data+l)),name);
  126. }
  127. if(strlen(*(data + l))==0){
  128. strcat(query, "NULL");
  129. }
  130. strcat(query, *(data + l));
  131. strcat(query, "', '");
  132. }
  133. }
  134. znaki = strlen(query);
  135. query[znaki-3]='\0';
  136. strcat(query, ")");
  137. if(PQstatus(conn) == CONNECTION_OK){
  138. result = PQexec(conn, query);
  139. } else {
  140. printf("%s\n", PQerrorMessage(conn));
  141. }
  142. }
  143. }
  144.  
  145. void createBase(char *name){
  146. int znaki = strlen(name);
  147. getColumnNames(name);
  148. name[znaki-4]='\0';
  149. conn = PQconnectdb("host=localhost port=5432 dbname=postgres user=postgres password=BGJucc");
  150. if(PQstatus(conn) == CONNECTION_OK){
  151. strcpy(query,"CREATE TABLE ");
  152. strcat(query, name);
  153. strcat(query, "(");
  154. int l;
  155. for (l = 0; *(kolumny + l); l++){
  156. strcat(query, *(kolumny + l));
  157. strcat(query, " VARCHAR(20), ");
  158. if(l==0){
  159. znaki = strlen(query);
  160. query[znaki-2]='\0';
  161. strcat(query, " UNIQUE, ");
  162. }
  163. }
  164. printf("%d",l);
  165. ilosc = l;
  166. znaki = strlen(query);
  167. query[znaki-2]='\0';
  168. strcat(query, ")");
  169. result = PQexec(conn, query);
  170. if(strcmp(PQresStatus(PQresultStatus(result)),"PGRES_FATAL_ERROR")==0){
  171. strcpy(drop, "DROP TABLE ");
  172. strcat(drop, name);
  173. result = PQexec(conn,drop);
  174. }
  175. result = PQexec(conn, query);
  176. insertData(name);
  177. } else {
  178. printf("%s\n", PQerrorMessage(conn));
  179. }
  180.  
  181. }
  182.  
  183. int main(int argc, char *argv[]){
  184. /*printf("Witaj użytkowniku!\n");
  185. printf("Podaj dane logowania:\n");
  186. printf("Nazwa Bazy: ");
  187. scanf("%s", dbname);
  188. printf("\nHost: ");
  189. scanf("%s", host);
  190. printf("\nPort: ");
  191. scanf("%s", port);
  192. printf("\nUser: ");
  193. scanf("%s", user);
  194. printf("\nHaslo: ");
  195. scanf("%s", pass);
  196. printf("Nazwa=%s, Host=%s, Port=%s, User=%s, Pass=%s\n",dbname,host,port,user,pass);*/
  197. if(argc==2){
  198. createBase(argv[1]);
  199. }
  200.  
  201. PQfinish(conn);
  202.  
  203. return 0;
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement