Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <libpq-fe.h>
- #include <assert.h>
- #include <unistd.h>
- #include <termios.h>
- #include <unistd.h>
- PGconn *conn;
- PGresult *result;
- char fileName[100] = "";
- char **columns;
- char **split;
- int rowsInFile(char filename[]){
- FILE *fp;
- int counter = 0;
- if((fp = fopen(filename, "r")) == NULL){
- printf("Something gone wrong. Exit the program...\n");
- exit(1);
- }
- char x;
- while((x = getc(fp)) != EOF){
- if(x == '\n') counter++;
- }
- fclose(fp);
- return counter;
- }
- void connection(char host[], char port[], char dbname[], char user[], char password[]){
- char connectToPsql[256] = "";
- strcpy(connectToPsql, "host=");
- strcat(connectToPsql, host);
- strcat(connectToPsql, " port=");
- strcat(connectToPsql, port);
- strcat(connectToPsql, " dbname=");
- strcat(connectToPsql, dbname);
- strcat(connectToPsql, " user=");
- strcat(connectToPsql, user);
- strcat(connectToPsql, " password=");
- strcat(connectToPsql, password);
- conn = PQconnectdb(connectToPsql);
- if(PQstatus(conn) == CONNECTION_OK) {
- printf("Everything went well.\nWelcome in my C project!\n");
- } else{
- printf("connection failed: %s\n", PQerrorMessage(conn));
- printf("...Exit...\n");
- exit(1);
- }
- }
- void createDB(char name[]){
- char drop[128] = "";
- char create[256] = "";
- strcat(drop, "DROP TABLE ");
- strcat(drop, name);
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, drop);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- void createTable(char filename[]){
- char query[512] = "";
- int i = 0;
- int len = 0;
- strcpy(query, "CREATE TABLE ");
- strcat(query, filename);
- strcat(query, "(");
- for(i = 0; *(columns + i); i++){
- strcat(query, *(columns + i));
- strcat(query, " VARCHAR(20), ");
- }
- len = strlen(query);
- query[len-3] = '\0';
- strcat(query, "))");
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, query);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- char** splitStr(char* a_str, const char a_delim){
- char** result = 0;
- size_t count = 0;
- char* tmp = a_str;
- char* last_comma = 0;
- char delim[2];
- delim[0] = a_delim;
- delim[1] = 0;
- while (*tmp){
- if (a_delim == *tmp){
- count++;
- last_comma = tmp;
- }
- tmp++;
- }
- count += last_comma < (a_str + strlen(a_str) - 1);
- count++;
- result = malloc(sizeof(char*) * count);
- if (result){
- size_t idx = 0;
- char* token = strtok(a_str, delim);
- while (token){
- assert(idx < count);
- *(result + idx++) = strdup(token);
- token = strtok(0, delim);
- }
- *(result + idx) = 0;
- }
- return result;
- }
- int maxColumnsValue(char row[]){
- int i = 0;
- int value = 0;
- for(i = 0; i < strlen(row); i++){
- if(row[i] == ';') value++;
- }
- value++;
- return value;
- }
- void makeNULL(char row[], int columnsVal){
- char newNull[512] = "";
- int i = 0;
- int j = 0;
- int columns = maxColumnsValue(row);
- for(i = columns; i < columnsVal + 1; i++) strcat(row, ";");
- for(i = 0; i < strlen(row); i++){
- newNull[j] = row[i];
- j++;
- if(row[i] == ';' && row[i+1] == ';' || row[i] == ';' && row[i+1] == '\0'){
- strcat(newNull, "NULL");
- j += 4;
- }
- }
- strcpy(row, newNull);
- }
- void addUniq(char file[]){
- char query[256] = "";
- strcpy(query, "ALTER TABLE ");
- strcat(query, file);
- strcat(query, " ADD CONSTRAINT id UNIQUE (");
- strcat(query, *(columns));
- strcat(query, ")");
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, query);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- void alterTable(int j, int length, char name[]){
- char stringLen[10] = "";
- char alter[512] = "";
- sprintf(stringLen, "%d", length);
- strcpy(alter, "ALTER TABLE ");
- strcat(alter, name);
- strcat(alter, " ALTER COLUMN ");
- strcat(alter, *(columns + j));
- strcat(alter, " TYPE VARCHAR(");
- strcat(alter, stringLen);
- strcat(alter, ")");
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, alter);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- void createAndFillTable(char file[]){
- char filename[100] = "";
- char row[512] = "";
- char query[1024] = "";
- int i = 0;
- int j = 0;
- int len = 0;
- int columnsVal = 0;
- strcat(filename, file);
- strcat(filename, ".csv");
- FILE *fp;
- if((fp = fopen(filename, "r")) == NULL){
- printf("Something gone wrong. Exit the program...\n");
- exit(1);
- }
- fscanf(fp, "%s", row);
- columnsVal = maxColumnsValue(row);
- columns = splitStr(row, ';');
- createTable(file);
- addUniq(file);
- char x;
- for(i = 0; i < rowsInFile(filename) - 1; i++){
- fscanf(fp, "%s", row);
- makeNULL(row, columnsVal);
- split = splitStr(row, ';');
- strcpy(query, "INSERT INTO ");
- strcat(query, file);
- strcat(query, " VALUES('");
- for(j = 0; *(split + j); j++){
- if(j < columnsVal){
- if(strlen(*(split + j)) > 20){
- int len = strlen(*(split + j));
- alterTable(j, len, file);
- }
- if(strlen(*(split + j)) == 0) strcat(query, "NULL");
- strcat(query, *(split + j));
- strcat(query, "', '");
- }
- }
- len = strlen(query);
- query[len-3] = '\0';
- strcat(query, ")");
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, query);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- fclose(fp);
- }
- void makeWebSite(char table[], FILE* fp){
- char select[128] = "";
- if(PQstatus(conn) == CONNECTION_OK){
- strcpy(select, "SELECT * FROM ");
- strcat(select, table);
- result = PQexec(conn, select);
- if(PQresultStatus(result)==PGRES_TUPLES_OK){
- PQprintOpt pqp;
- pqp.header = 1;
- pqp.align = 1;
- pqp.html3 = 1;
- pqp.expanded = 0;
- pqp.pager = 0;
- pqp.fieldSep = "";
- pqp.tableOpt = "align=center";
- pqp.caption = table;
- pqp.fieldName = NULL;
- PQprint(fp, result, &pqp);
- }
- }
- }
- void fixHtml(char site[]){
- char buf[100] = "sed -i 's/ align=center//g' ";
- strcat(buf, site);
- system(buf);
- strcpy(buf, "sed -i 's/ align=\"top\"//g' ");
- strcat(buf, site);
- system(buf);
- strcpy(buf, "sed -i 's/ align=\"left\"//g' ");
- strcat(buf, site);
- system(buf);
- strcpy(buf, "sed -i 's/ align=\"right\"//g' ");
- strcat(buf, site);
- system(buf);
- }
- int main(int argc, char *argv[]){
- char host[50] = "";
- char port[10] = "";
- char dbname[50] = "";
- char user[50] = "";
- /*printf("Host\t\t: ");
- scanf("%s", host);
- printf("Port\t\t: ");
- scanf("%s", port);
- printf("DBname\t\t: ");
- scanf("%s", dbname);
- printf("User\t\t: ");
- scanf("%s", user);
- char *password = getpass("Password\t: ");*/
- //connection(host, port, dbname, user, password);
- connection("localhost", "5432", "postgres", "postgres", "dupa");
- if(argc == 2){
- strncpy(fileName, argv[1], strlen(argv[1])-4);
- createDB(fileName);
- createAndFillTable(fileName);
- } else {
- char site[50] = "";
- char table[50] = "";
- FILE *fp;
- strcpy(site, argv[argc-1]);
- if((fp = fopen(site, "w")) == NULL){
- printf("Something gone wrong. Exit the program...\n");
- exit(1);
- }
- fprintf(fp, "<!DOCTYPE html>\n<html>\n<head>\n<title>ProjektC</title>\n<style>\n");
- fprintf(fp, "html, body {\n width: 100%\nbackground-color:#8E8AFF;\n }\n");
- fprintf(fp, "table {\n font-family: arial, sans-serif;\nborder-collapse: collapse;\n margin: 0 auto;\n}\n");
- fprintf(fp, "td, th {\n border: 1px solid #dddddd;\n text-align: left;\n padding: 8px;\n}\n");
- fprintf(fp, "tr:nth-child(even) {\n background-color: #6DFE6D;\n}\n");
- fprintf(fp, "</style>\n</head>\n<body>\n");
- int i;
- for(i = 1; i < argc - 1; i++){
- strcpy(table, argv[i]);
- makeWebSite(table, fp);
- fprintf(fp, "<br><br><br>\n");
- }
- fprintf(fp, "</body>\n</html>\n");
- fclose(fp);
- fixHtml(site);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement