Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <libpq-fe.h>
- #include <string.h>
- #include <unistd.h>
- #include <stdio.h>
- int wymiary[3];
- void doSQL(PGconn *conn, char *command){
- PGresult *result;
- printf("%s\n", command);
- result = PQexec(conn, command);
- printf("status is : %s\n", PQresStatus(PQresultStatus(result)));
- printf("#rows affected: %s\n", PQcmdTuples(result));
- printf("result message: %s\n", PQresultErrorMessage(result));
- switch(PQresultStatus(result)) {
- case PGRES_TUPLES_OK:
- {
- int n = 0, r = 0;
- int nrows = PQntuples(result);
- int nfields = PQnfields(result);
- printf("number of rows returned = %d\n", nrows);
- printf("number of fields returned = %d\n", nfields);
- for(r = 0; r < nrows; r++) {
- for(n = 0; n < nfields; n++)
- printf(" %s = %s", PQfname(result, n),PQgetvalue(result,r,n));
- printf("\n");
- }
- }
- }
- PQclear(result);
- }
- int baza(char plik[], char plik2[], char login[], char dbname[], char info[] ){
- printf("gowno\n");
- PGconn *con = PQconnectdb(info); //laczenie z baza
- printf("gowno2\n");
- if(PQstatus(con) == CONNECTION_OK)
- {
- //
- printf("Logowanie pomyslne\n");
- printf("Baza danych: %s\n",dbname);
- printf("Login: %s\n\n",login);
- // if(licz(plik2)==0) return 0;
- FILE * dane = fopen(plik2, "r");
- if (dane == NULL){
- printf("Blad odczytu pliku! Prosze utworzyc plik o nazwie %s.\n",plik2);
- return 0;
- }
- else
- {
- printf("Otwarto plik %s\n",plik2);
- char polecenie[1000];
- int i, j=0, k=0;
- char temp, newline='\n',srednik=';';
- char tab[wymiary[0]][wymiary[1]][wymiary[2]];
- int dlugosc[wymiary[1]];
- for(i=0;i<wymiary[1];i++) dlugosc[i]=20;
- i=0;
- //czytanie zawartosci pliku
- while(fscanf(dane,"%c",&temp)==1)
- {
- if (temp==srednik)
- {
- if(tab[k][i][j-1]!=0 && k!=0 && i!=0)
- tab[k][i][j]=(char)39;
- if(20<(j-1)) //ew przekorczenie VARCHAR(20)
- {
- j--;
- if(dlugosc[i]<j)
- dlugosc[i]=j;
- }
- j=0;
- if(tab[k][i][j]==0)
- strcpy(tab[k][i],"NULL");
- i++;
- }
- else if (temp==newline)
- {
- if(tab[k][i][j-1]!=0 && k!=0 && i!=0)
- tab[k][i][j]=(char)39;
- if(20<(j-1)) //ew przekorczenie VARCHAR(20)
- {
- j--;
- if(dlugosc[i]<j)
- dlugosc[i]=j;
- }
- j=0;
- if(tab[k][i][j]==0)
- strcpy(tab[k][i],"NULL");
- i=0;
- k++;
- }
- else
- {
- if(j==0 && k!=0 && i!=0)
- {
- tab[k][i][j]=(char)39;
- j++;
- }
- tab[k][i][j]=temp;
- j++;
- }
- }
- int max=k;
- k=0;
- sprintf(polecenie, "DROP TABLE %s",plik);
- doSQL(con,polecenie);
- sprintf(polecenie,"CREATE TABLE %s(%s INTEGER PRIMARY KEY UNIQUE)",plik,tab[k][0]);
- doSQL(con,polecenie);
- //,tab[k][1],tab[k][2],tab[k][3],tab[k][4],tab[k][5]);
- for(i=1;i<wymiary[1];i++){
- sprintf(polecenie, "ALTER TABLE %s add COLUMN %s TYPE VARCHAR(20)",plik,tab[0][i]);
- doSQL(con,polecenie);
- }
- for(i=1;i<max;i++) //dodawanie pierwszej kolumny z pliku
- {
- sprintf(polecenie, "INSERT INTO %s VALUES (%s)",plik,tab[i][0]);
- doSQL(con,polecenie);
- }
- //update dane set tytul='40 to 1' where id=10;
- for(i=1;i<wymiary[1];i++)
- for(j=1;j<wymiary[0];j++){
- sprintf(polecenie, "update %s set %s='%s' where id=%s",plik,tab[0][i],tab[j][i],tab[j][0]);
- doSQL(con,polecenie);
- }
- for(i=0;i<wymiary[1];i++)
- if(dlugosc[i]!=20)
- {
- sprintf(polecenie, "ALTER TABLE %s ALTER COLUMN %s TYPE VARCHAR(%d)",plik,tab[0][i],dlugosc[i]);
- doSQL(con,polecenie);
- }
- printf("\n-----------------------------------------------------------\n");
- printf("Czy chcesz dodac rekord do tabeli %s (T lub N)?\n",plik);
- char odp[1];
- char slowo[50];
- char slowo2[50];
- char tab2[1000][1000][1000];
- scanf("%s",&odp[0]);
- while(((strcmp(odp,"t")==0) || (strcmp(odp,"T")==0))) //dodawanie do tabeli
- {
- sprintf(slowo,"%d",max);
- strcpy(tab2[max][0],slowo);
- for(i=1;i<wymiary[1];i++)
- {
- printf("Podaj %s\n",tab[0][i]);
- scanf("%s",slowo);
- if(strcmp(slowo,"NULL")==0)
- strcpy(tab2[max][i],slowo);
- else
- {
- sprintf(slowo2,"'%s'",slowo);
- strcpy(tab2[max][i],slowo2);
- }
- if(strlen(slowo)>dlugosc[i]) //ew zmiana max VARCHAR
- {
- dlugosc[i]=strlen(slowo);
- sprintf(polecenie, "ALTER TABLE %s ALTER COLUMN %s TYPE VARCHAR(%d)",plik,tab[0][i],dlugosc[i]);
- doSQL(con,polecenie);
- }
- }
- sprintf(polecenie, "INSERT INTO %s VALUES (%s)",plik,tab2[max][0]);
- doSQL(con,polecenie);
- for(i=1;i<wymiary[1];i++){
- sprintf(polecenie, "update %s set %s='%s' where id=%s",plik,tab[0][i],tab2[max][i],tab2[max][0]);
- doSQL(con,polecenie);
- }
- max++;
- printf("\n-----------------------------------------------------------\n");
- printf("Czy chcesz dodac rekord do tabeli %s (T lub N)?\n",plik);
- temp=0;
- scanf("%s",&odp[0]);
- }
- sprintf(polecenie, "SELECT * FROM %s",plik);
- doSQL(con,polecenie);
- }
- }
- else
- printf("polaczenie nieudane: %s\n", PQerrorMessage(con));
- PQfinish(con);
- return EXIT_SUCCESS;
- }
- int licz(char plik2[]){
- char znak, newline='\n',srednik=';';
- int kolumny=0, wiersze=0, maxdl=0, dl=0;
- FILE * dane = fopen(plik2, "r");
- if (dane == NULL){
- printf("Blad odczytu pliku! Prosze utworzyc plik o nazwie %s.\n",plik2);
- return 0;
- }
- else
- {
- printf("Otwarto plik %s\n",plik2);
- while(fscanf(dane,"%c",&znak)==1){
- ++dl;
- if(znak==newline) { wiersze++; dl=0;}
- if(wiersze==0 && znak==srednik) kolumny++;
- if(znak==srednik) dl=0;
- if(maxdl<dl) maxdl=dl;
- }
- wiersze--;
- printf("wiersze=%i\n",wiersze);
- printf("kolumny=%i\n",++kolumny);
- printf("maxdl=%i\n",maxdl);
- wymiary[0]=wiersze;
- wymiary[1]=kolumny;
- wymiary[2]=maxdl;
- fclose(dane);
- }
- return 1;
- }
- int main(){
- printf("Podaj nazwe pliku .csv (bez rozszerzenia) do wczytania\n\n\n");
- char plik[40];
- char plik2[44];
- scanf("%s",plik);
- strcpy(plik2,plik);
- strcat(plik2,".csv");
- if(licz(plik2)==0) return 0;
- char login[20];
- char dbname[20];
- char *password;
- printf("Podaj nazwe bazy danych.\n");
- scanf("%s",dbname);
- printf("Podaj login\n");
- scanf("%s",login);
- char info[150];
- strcpy(info,"host=localhost port=5432 dbname=");
- strcat(info,dbname);
- strcat(info," user=");
- strcat(info,login);
- strcat(info," password=");
- password=getpass("Podaj haslo\n");
- strcat(info,password);
- printf("szajs\n");
- password=NULL;
- printf("szajs\n");
- baza(plik,plik2,login,dbname,info);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement