Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <libpq-fe.h>
  5. #include <assert.h>
  6. #include <unistd.h>
  7. #include <termios.h>
  8. #include <unistd.h>
  9.  
  10. PGconn *conn;
  11. PGresult *result;
  12. char fileName[100] = "";
  13. char **columns;
  14. char **split;
  15.  
  16. int rowsInFile(char filename[]){
  17.     FILE *fp;
  18.     int counter = 0;
  19.     if((fp = fopen(filename, "r")) == NULL){
  20.         printf("Something gone wrong. Exit the program...\n");
  21.         exit(1);
  22.     }  
  23.     char x;
  24.     while((x = getc(fp)) != EOF){
  25.          if(x == '\n') counter++;
  26.     }
  27.     fclose(fp);
  28.     return counter;
  29. }
  30.  
  31. void connection(char host[], char port[], char dbname[], char user[], char password[]){
  32.     char connectToPsql[256] = "";
  33.     strcpy(connectToPsql, "host=");
  34.     strcat(connectToPsql, host);
  35.     strcat(connectToPsql, " port=");
  36.     strcat(connectToPsql, port);
  37.     strcat(connectToPsql, " dbname=");
  38.     strcat(connectToPsql, dbname);
  39.     strcat(connectToPsql, " user=");
  40.     strcat(connectToPsql, user);
  41.     strcat(connectToPsql, " password=");
  42.     strcat(connectToPsql, password);   
  43.    
  44.     conn = PQconnectdb(connectToPsql);
  45.     if(PQstatus(conn) == CONNECTION_OK) {
  46.         printf("Everything went well.\nWelcome in my C project!\n");
  47.     } else{
  48.         printf("connection failed: %s\n", PQerrorMessage(conn));
  49.         printf("...Exit...\n");
  50.         exit(1);
  51.     }
  52. }
  53.  
  54. void createDB(char name[]){
  55.     char drop[128] = "";
  56.     char create[256] = "";
  57.    
  58.     strcat(drop, "DROP TABLE ");
  59.     strcat(drop, name);
  60.    
  61.     if(PQstatus(conn) == CONNECTION_OK){
  62.         result = PQexec(conn, drop);
  63.     } else {
  64.         printf("%s\n", PQerrorMessage(conn));
  65.     }
  66. }
  67.  
  68. void createTable(char filename[]){
  69.     char query[512] = "";
  70.     int i = 0;
  71.     int len = 0;
  72.     strcpy(query, "CREATE TABLE ");
  73.     strcat(query, filename);
  74.     strcat(query, "(");
  75.     for(i = 0; *(columns + i); i++){
  76.         strcat(query, *(columns + i));
  77.         strcat(query, " VARCHAR(20), ");
  78.     }
  79.     len = strlen(query);
  80.     query[len-3] = '\0';
  81.     strcat(query, "))");
  82.     if(PQstatus(conn) == CONNECTION_OK){
  83.         result = PQexec(conn, query);
  84.     } else {
  85.         printf("%s\n", PQerrorMessage(conn));
  86.     }
  87. }
  88.  
  89. char** splitStr(char* a_str, const char a_delim){
  90.     char** result    = 0;
  91.     size_t count     = 0;
  92.     char* tmp        = a_str;
  93.     char* last_comma = 0;
  94.     char delim[2];
  95.     delim[0] = a_delim;
  96.     delim[1] = 0;
  97.  
  98.     while (*tmp){
  99.         if (a_delim == *tmp){
  100.             count++;
  101.             last_comma = tmp;
  102.             }
  103.         tmp++;     
  104.     }
  105.     count += last_comma < (a_str + strlen(a_str) - 1);
  106.     count++;
  107.     result = malloc(sizeof(char*) * count);
  108.     if (result){
  109.     size_t idx  = 0;
  110.     char* token = strtok(a_str, delim);
  111.     while (token){
  112.         assert(idx < count);
  113.         *(result + idx++) = strdup(token);
  114.         token = strtok(0, delim);
  115.         }
  116.     *(result + idx) = 0;
  117.     }
  118.     return result;
  119. }
  120.  
  121. int maxColumnsValue(char row[]){
  122.     int i = 0;
  123.     int value = 0;
  124.     for(i = 0; i < strlen(row); i++){
  125.         if(row[i] == ';') value++;
  126.     }
  127.     value++;
  128.     return value;
  129. }
  130.  
  131. void makeNULL(char row[], int columnsVal){
  132.     char newNull[512] = "";
  133.     int i = 0;
  134.     int j = 0;
  135.     int columns  = maxColumnsValue(row);
  136.     for(i = columns; i < columnsVal + 1; i++) strcat(row, ";");
  137.     for(i = 0; i < strlen(row); i++){
  138.         newNull[j] = row[i];
  139.         j++;
  140.         if(row[i] == ';' && row[i+1] == ';' || row[i] == ';' && row[i+1] == '\0'){
  141.             strcat(newNull, "NULL");
  142.             j += 4;
  143.         }
  144.     }
  145.     strcpy(row, newNull);
  146. }
  147.  
  148. void addUniq(char file[]){
  149.     char query[256] = "";
  150.     strcpy(query, "ALTER TABLE ");
  151.     strcat(query, file);
  152.     strcat(query, " ADD CONSTRAINT id UNIQUE (");
  153.     strcat(query, *(columns));
  154.     strcat(query, ")");
  155.     if(PQstatus(conn) == CONNECTION_OK){
  156.             result = PQexec(conn, query);
  157.     } else {
  158.         printf("%s\n", PQerrorMessage(conn));
  159.     }
  160. }
  161.  
  162. void alterTable(int j, int length, char name[]){
  163.     char stringLen[10] =  "";
  164.     char alter[512] = "";
  165.     sprintf(stringLen, "%d", length);
  166.     strcpy(alter, "ALTER TABLE ");
  167.     strcat(alter, name);
  168.     strcat(alter, " ALTER COLUMN ");
  169.     strcat(alter, *(columns + j));
  170.     strcat(alter, " TYPE VARCHAR(");
  171.     strcat(alter, stringLen);
  172.     strcat(alter, ")");
  173.     if(PQstatus(conn) == CONNECTION_OK){
  174.             result = PQexec(conn, alter);
  175.     } else {
  176.         printf("%s\n", PQerrorMessage(conn));
  177.     }  
  178. }  
  179.  
  180. void createAndFillTable(char file[]){
  181.     char filename[100] = "";
  182.     char row[512] = "";
  183.     char query[1024] = "";
  184.     int i = 0;
  185.     int j = 0;
  186.     int len = 0;
  187.     int columnsVal = 0;
  188.    
  189.     strcat(filename, file);
  190.     strcat(filename, ".csv");
  191.    
  192.     FILE *fp;
  193.     if((fp = fopen(filename, "r")) == NULL){
  194.         printf("Something gone wrong. Exit the program...\n");
  195.         exit(1);
  196.     }
  197.     fscanf(fp, "%s", row);
  198.     columnsVal = maxColumnsValue(row);
  199.     columns = splitStr(row, ';');
  200.     createTable(file);
  201.     addUniq(file);
  202.        
  203.     char x;
  204.     for(i = 0; i < rowsInFile(filename) - 1; i++){
  205.         fscanf(fp, "%s", row);
  206.         makeNULL(row, columnsVal);
  207.         split = splitStr(row, ';');
  208.         strcpy(query, "INSERT INTO ");
  209.         strcat(query, file);
  210.         strcat(query, " VALUES('");
  211.         for(j = 0; *(split + j); j++){
  212.             if(j < columnsVal){
  213.                 if(strlen(*(split + j)) > 20){
  214.                     int len = strlen(*(split + j));
  215.                     alterTable(j, len, file);
  216.                     }
  217.                 if(strlen(*(split + j)) == 0) strcat(query, "NULL");
  218.                 strcat(query, *(split + j));
  219.                 strcat(query, "', '");
  220.             }
  221.         }
  222.         len = strlen(query);
  223.         query[len-3] = '\0';
  224.         strcat(query, ")");
  225.         if(PQstatus(conn) == CONNECTION_OK){
  226.             result = PQexec(conn, query);
  227.         } else {
  228.             printf("%s\n", PQerrorMessage(conn));
  229.         }
  230.     }
  231.     fclose(fp);
  232. }
  233.  
  234. void makeWebSite(char table[], FILE* fp){
  235.  
  236.     char select[128] = "";
  237.     if(PQstatus(conn) == CONNECTION_OK){
  238.         strcpy(select, "SELECT * FROM ");
  239.         strcat(select, table);
  240.         result = PQexec(conn, select);
  241.         if(PQresultStatus(result)==PGRES_TUPLES_OK){
  242.             PQprintOpt pqp;
  243.             pqp.header = 1;
  244.             pqp.align = 1;
  245.             pqp.html3 = 1;
  246.             pqp.expanded = 0;
  247.             pqp.pager = 0;
  248.             pqp.fieldSep = "";
  249.             pqp.tableOpt = "align=center";
  250.             pqp.caption = table;
  251.             pqp.fieldName = NULL;
  252.             PQprint(fp, result, &pqp);
  253.         }
  254.     }
  255. }
  256.  
  257. void fixHtml(char site[]){
  258.     char buf[100] = "sed -i 's/ align=center//g' ";
  259.     strcat(buf, site);
  260.     system(buf);
  261.    
  262.     strcpy(buf, "sed -i 's/ align=\"top\"//g' ");
  263.     strcat(buf, site); 
  264.     system(buf);
  265.    
  266.     strcpy(buf, "sed -i 's/ align=\"left\"//g' ");
  267.     strcat(buf, site); 
  268.     system(buf);
  269.    
  270.     strcpy(buf, "sed -i 's/ align=\"right\"//g' ");
  271.     strcat(buf, site); 
  272.     system(buf);
  273. }
  274.  
  275. int main(int argc, char *argv[]){
  276.    
  277.     char host[50] = "";
  278.     char port[10] = "";
  279.     char dbname[50] = "";
  280.     char user[50] = "";
  281.        
  282.  
  283.    
  284.     /*printf("Host\t\t: ");
  285.     scanf("%s", host);
  286.     printf("Port\t\t: ");
  287.     scanf("%s", port);
  288.     printf("DBname\t\t: ");
  289.     scanf("%s", dbname);
  290.     printf("User\t\t: ");
  291.     scanf("%s", user);
  292.     char *password = getpass("Password\t: ");*/
  293.        
  294.     //connection(host, port, dbname, user, password);
  295.     connection("localhost", "5432", "postgres", "postgres", "dupa");
  296.    
  297.     if(argc == 2){
  298.         strncpy(fileName, argv[1], strlen(argv[1])-4);
  299.         createDB(fileName);
  300.         createAndFillTable(fileName);
  301.     } else {
  302.         char site[50] = "";
  303.         char table[50] = "";
  304.         FILE *fp;
  305.         strcpy(site, argv[argc-1]);
  306.         if((fp = fopen(site, "w")) == NULL){
  307.             printf("Something gone wrong. Exit the program...\n");
  308.             exit(1);
  309.         }
  310.         fprintf(fp, "<!DOCTYPE html>\n<html>\n<head>\n<title>ProjektC</title>\n<style>\n");
  311.         fprintf(fp, "html, body {\n width: 100%\nbackground-color:#8E8AFF;\n }\n");
  312.         fprintf(fp, "table {\n font-family: arial, sans-serif;\nborder-collapse: collapse;\n margin: 0 auto;\n}\n");
  313.         fprintf(fp, "td, th {\n border: 1px solid #dddddd;\n text-align: left;\n padding: 8px;\n}\n");
  314.         fprintf(fp, "tr:nth-child(even) {\n background-color: #6DFE6D;\n}\n");
  315.         fprintf(fp, "</style>\n</head>\n<body>\n");
  316.         int i;
  317.         for(i = 1; i < argc - 1; i++){
  318.             strcpy(table, argv[i]);
  319.             makeWebSite(table, fp);
  320.             fprintf(fp, "<br><br><br>\n");
  321.         }
  322.         fprintf(fp, "</body>\n</html>\n");
  323.         fclose(fp);
  324.         fixHtml(site);
  325.     }  
  326.     return 0;
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement