Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<libpq-fe.h>
- #include<stdlib.h>
- #include<unistd.h>
- #include<stdbool.h>
- #include<string.h>
- #include<string.h>
- void stworz_polaczenie_info(int argc,char *name,char *wynik)
- {
- char createdb[100] = {"\0"};
- char user[100] = {"\0"};
- char *haslo;
- sprintf(wynik,"createdb %s 2>/dev/null",name);
- system(wynik);
- printf("Logowanie\n");
- printf("Uzytkownik: \n");
- scanf("%s",user);
- haslo = getpass("Haslo: ");
- sprintf(wynik,"host=localhost port=5432 dbname=%s user=%s password=%s",name,user,haslo);
- }
- bool pokaz(PGconn *polaczenie)
- {
- if(PQstatus(polaczenie) == CONNECTION_OK)
- {
- printf("Polaczono.\n");
- printf("Nazwa bazy danych: %s\n",PQdb(polaczenie));
- printf("Uzytkownik: %s\n", PQuser(polaczenie));
- printf("Haslo: ");
- int haslo_dl = strlen(PQpass(polaczenie));
- while(haslo_dl--){ printf("*"); }
- printf("\n");
- return true;
- }
- else
- {
- printf("Nie polaczono.\n%s\n",PQerrorMessage(polaczenie));
- return false;
- }
- }
- void utworz_tabele_nazwa(char *zrodlo,char *wynik)
- {
- strncat(wynik,zrodlo,strlen(zrodlo));
- }
- void drop(char *tabela_nazwa,char *wynik)
- {
- sprintf(wynik,"DROP TABLE %s;",tabela_nazwa);
- }
- char *pole(char *linie, int nr)
- {
- char *podzial;
- for(podzial = strtok(linie,";");podzial && *podzial;podzial = strtok(NULL,";\n"))
- {
- if(!--nr) return podzial;
- }
- return NULL;
- }
- int zlicz_kolumny(FILE *file)
- {
- char linie[1000] = {"\0"};
- fseek(file,0,0);
- fgets(linie,1000,file);
- char *pom = strdup(linie);
- int i,licznik = 1;
- for(i=0; i<strlen(pom);i++)
- {
- if(pom[i] == ';') licznik++;
- }
- free(pom);
- return licznik;
- }
- void utworz_tabele(FILE *file,char *tabela_nazwa,char *wynik)
- {
- char linia[1000] = {"\0"};
- char kolumna[1000] = {"\0"};
- fgets(linia,1000,file);
- char *pom = strdup(linia);
- int i = 1, licznik = zlicz_kolumny(file);
- while(licznik--)
- {
- pom = strdup(linia);
- strcat(kolumna,"\t");
- strcat(kolumna,pole(pom,i));
- strcat(kolumna," VARCHAR(20),\n");
- i++;
- }
- sprintf(wynik,"CREATE TABLE %s (\n\tid SERIAL,\n",tabela_nazwa);
- strncat(wynik,kolumna,strlen(kolumna)-2);
- strcat(wynik,"\n);");
- free(pom);
- }
- void wybierz_tabele(char *tabela_nazwa,char *wynik)
- {
- sprintf(wynik,"SELECT * FROM %s;",tabela_nazwa);
- }
- void drukuj_T(PGresult * wynik)
- {
- int i,j;
- int rzedy = PQntuples(wynik);
- int pola = PQnfields(wynik);
- printf("Zwrocone rzedy: %d\n",rzedy);
- printf("Zwrocone pola: %d\n",pola);
- for(i=0;i<rzedy;i++)
- {
- for(j=0;j<pola;j++)
- {
- printf("%16s = %24s\n",PQfname(wynik,j),PQgetvalue(wynik,i,j));
- }
- printf("\n");
- }
- }
- void SQL(PGconn *polaczenie,char *komenda)
- {
- PGresult *wynik;
- printf("> %s\n",komenda);
- wynik = PQexec(polaczenie,komenda);
- printf("Status: %s\n",PQresStatus(PQresultStatus(wynik)));
- printf("Zmienione: %s\n",PQcmdTuples(wynik));
- printf("Komunikat: %s\n",PQresultErrorMessage(wynik));
- switch(PQresultStatus(wynik))
- {
- case PGRES_TUPLES_OK:
- drukuj_T(wynik);
- break;
- }
- PQclear(wynik);
- }
- void utworz_naglowki(FILE *file, char *wynik)
- {
- char linie[1000] = {"\0"};
- char naglowki[1000] = "(";
- fseek(file,0,0);
- fgets(linie,1000,file);
- char *pom = strdup(linie);
- int i = 1,licznik = zlicz_kolumny(file);
- while(licznik--)
- {
- pom = strdup(linie);
- strcat(naglowki,pole(pom,i));
- strcat(naglowki,", ");
- i++;
- }
- strncat(wynik,naglowki,strlen(naglowki)-2);
- strcat(wynik,")");
- free(pom);
- }
- void alter_tab(char *tabela_nazwa,char *kolumna_nazwa,int rozmiar,char *wynik)
- {
- sprintf(wynik,"ALTER TABLE %s ALTER COLUMN %s TYPE VARCHAR(%d);", tabela_nazwa,kolumna_nazwa,rozmiar);
- }
- void wstaw_tab(PGconn *polaczenie,FILE *file,char *tabela_nazwa)
- {
- char linie[1000] = {"\0"};
- char naglowki[300] = {"\0"};
- utworz_naglowki(file,naglowki);
- int i=1,j=0,licznik=zlicz_kolumny(file);
- fseek(file,0,0);
- char nagl[300] = {"\0"};
- fgets(nagl,300,file);
- int maxdl[licznik+1];
- for(i=1;i<=(licznik+1);i++)
- {
- maxdl[i] = 20;
- }
- while(fgets(linie,1000,file))
- {
- char wstaw[1000] = "INSERT INTO ";
- strcat(wstaw,tabela_nazwa);
- strcat(wstaw,naglowki);
- strcat(wstaw," VALUES\n(");
- char *pom;
- i=1;
- j=licznik;
- while(j--)
- {
- pom = strdup(linie);
- strcat(wstaw,"'");
- strcat(wstaw,pole(pom,i));
- pom = strdup(linie);
- if(strlen(pole(pom,i)) > maxdl[i])
- {
- pom = strdup(linie);
- maxdl[i] = strlen(pole(pom,i));
- char alter_tabela[300];
- pom = strdup(nagl);
- alter_tab(tabela_nazwa,(char*)pole(pom,i), maxdl[i],alter_tabela);
- SQL(polaczenie,alter_tabela);
- }
- strcat(wstaw,"'");
- if(j !=0) strcat(wstaw,",");
- i++;
- }
- strcat(wstaw,");");
- SQL(polaczenie,wstaw);
- }
- }
- void HTML(FILE *plik)
- {
- fprintf(plik,"<html>\n <head>\n <link rel=\"stylesheet\" href = styl.css>\n </head>\n");
- fprintf(plik,"<body>\n");
- }
- void closeHTML(FILE *plik)
- {
- fprintf(plik,"</body>\n");
- fprintf(plik,"</html>\n");
- }
- void PQdrukuj(FILE *wyjscie,char *tabela)
- {
- char komenda[300];
- char komenda2[300];
- char komenda3[300];
- sprintf(komenda,"echo '<html>\n<head>\n<link rel=\"stylesheet\" href = styl.css\n</head>\n<body>\n' >> %s",tabela);
- system(komenda);
- sprintf(komenda2,"psql -d %s -c \"select * from %s order by id;\" >> %s",tabela,tabela,tabela);
- system(komenda2);
- sprintf(komenda3,"echo '</body>\n</html>\n' >> %s",tabela);
- system(komenda3);
- }
- int main(int argc,char *argv[1])
- {
- FILE *file = fopen(argv[1],"r");
- argv[1][strlen(argv[1])-4] = 0;
- char polaczenie_info[300] ={"\0"};
- stworz_polaczenie_info(argc,argv[1],polaczenie_info);
- PGconn * polaczenie = PQconnectdb(polaczenie_info);
- if(!pokaz(polaczenie)) return 1;
- char tabela_nazwa[100] = {"\0"};
- char drop_tabela[300] = {"\0"};
- char create_tabela[500] = {"\0"};
- char select_tabela[300] = {"\0"};
- printf("===========================\n");
- printf("Czy chcesz utworzyc strone HTML?\n");
- printf("===========================\n");
- printf("Wpisz 'y' jesli tak.\n");
- char wybor;
- scanf(" %c",&wybor);
- if(wybor != 'y') {
- utworz_tabele_nazwa(argv[1],tabela_nazwa);
- drop(tabela_nazwa,drop_tabela);
- utworz_tabele(file,argv[1],create_tabela);
- wybierz_tabele(tabela_nazwa,select_tabela);
- SQL(polaczenie,drop_tabela);
- SQL(polaczenie,create_tabela);
- wstaw_tab(polaczenie,file,tabela_nazwa);
- SQL(polaczenie,select_tabela);
- PQfinish(polaczenie);
- }
- else {
- utworz_tabele_nazwa(argv[1],tabela_nazwa);
- drop(tabela_nazwa,drop_tabela);
- utworz_tabele(file,argv[1],create_tabela);
- wybierz_tabele(tabela_nazwa,select_tabela);
- SQL(polaczenie,drop_tabela);
- SQL(polaczenie,create_tabela);
- wstaw_tab(polaczenie,file,tabela_nazwa);
- SQL(polaczenie,select_tabela);
- FILE *strona = fopen(argv[1],"w");
- PQdrukuj(strona,argv[1]);
- printf("Utworzono strone!\n");
- PQfinish(polaczenie);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement