Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <libpq-fe.h>
- #include <assert.h>
- #include <unistd.h>
- #include <termios.h>
- char *A,dbname[100],pass[100],user[100],port[100],host[100];
- char query[1000],drop[1000],alter[1000];
- char **kolumny;
- char **data;
- PGresult *result;
- PGconn *conn;
- int ilosc;
- char** str_split(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);
- }
- //assert(idx == count - 1);
- *(result + idx) = 0;
- }
- return result;
- }
- int countLines(char *name){
- int line;
- FILE *file = fopen(name, "r");
- char znak;
- while((znak = getc(file)) != EOF) {
- if(znak == '\n'){
- line++;
- }
- }
- fclose(file);
- return line;
- }
- void getColumnNames(char *name){
- FILE *file = fopen(name, "r");
- char znak;
- char wiersz[1000];
- int linie;
- fscanf(file, "%s", wiersz);
- linie = strlen(wiersz);
- kolumny = str_split(wiersz, ';');
- fclose(file);
- }
- void alterTable(int l, int length,char *name){
- char len[1000];
- sprintf(len, "%d", length);
- strcpy(alter, "ALTER TABLE ");
- strcat(alter, name);
- strcat(alter, " ALTER COLUMN ");
- strcat(alter, *(kolumny + l));
- strcat(alter, " TYPE VARCHAR(");
- strcat(alter, len);
- strcat(alter,")");
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, alter);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- void insertData(char *name){
- strcat(name,".csv");
- FILE *file = fopen(name, "r");
- int lines = countLines(name);
- char znak;
- int znaki = strlen(name);
- name[znaki-4]='\0';
- char wiersz[100];
- int i=0,linie,j,l,column=0;
- fscanf(file, "%s", wiersz);
- for(i=0;i<lines-2;i++){
- fscanf(file, "%s", wiersz);
- linie = strlen(wiersz);
- data = str_split(wiersz, ';');
- strcpy(query,"INSERT INTO ");
- strcat(query,name);
- strcat(query, " values('");
- for (l = 0; *(data + l); l++){
- //printf("Wyraz o nr %d to %s\n",l,*(data+l));
- if(l<ilosc){
- if(strlen(*(data + l))>=20){
- alterTable(l,strlen(*(data+l)),name);
- }
- if(strlen(*(data + l))==0){
- strcat(query, "NULL");
- }
- strcat(query, *(data + l));
- strcat(query, "', '");
- }
- }
- znaki = strlen(query);
- query[znaki-3]='\0';
- strcat(query, ")");
- if(PQstatus(conn) == CONNECTION_OK){
- result = PQexec(conn, query);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- }
- void createBase(char *name){
- int znaki = strlen(name);
- getColumnNames(name);
- name[znaki-4]='\0';
- conn = PQconnectdb("host=localhost port=5432 dbname=postgres user=postgres password=BGJucc");
- if(PQstatus(conn) == CONNECTION_OK){
- strcpy(query,"CREATE TABLE ");
- strcat(query, name);
- strcat(query, "(");
- int l;
- for (l = 0; *(kolumny + l); l++){
- strcat(query, *(kolumny + l));
- strcat(query, " VARCHAR(20), ");
- if(l==0){
- znaki = strlen(query);
- query[znaki-2]='\0';
- strcat(query, " UNIQUE, ");
- }
- }
- printf("%d",l);
- ilosc = l;
- znaki = strlen(query);
- query[znaki-2]='\0';
- strcat(query, ")");
- result = PQexec(conn, query);
- if(strcmp(PQresStatus(PQresultStatus(result)),"PGRES_FATAL_ERROR")==0){
- strcpy(drop, "DROP TABLE ");
- strcat(drop, name);
- result = PQexec(conn,drop);
- }
- result = PQexec(conn, query);
- insertData(name);
- } else {
- printf("%s\n", PQerrorMessage(conn));
- }
- }
- int main(int argc, char *argv[]){
- /*printf("Witaj użytkowniku!\n");
- printf("Podaj dane logowania:\n");
- printf("Nazwa Bazy: ");
- scanf("%s", dbname);
- printf("\nHost: ");
- scanf("%s", host);
- printf("\nPort: ");
- scanf("%s", port);
- printf("\nUser: ");
- scanf("%s", user);
- printf("\nHaslo: ");
- scanf("%s", pass);
- printf("Nazwa=%s, Host=%s, Port=%s, User=%s, Pass=%s\n",dbname,host,port,user,pass);*/
- if(argc==2){
- createBase(argv[1]);
- }
- PQfinish(conn);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement