Closed Formeinstein13 closed 2 years ago
main amb les fincions del script de creacio de taules i de insercio de dades
package projecte1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.file.DirectoryIteratorException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Random;
import java.util.Scanner;
public class ProvesMain {
public static void main(String[] args) {
Random r=new Random();
String dadesGenerades[][] = new String[1][1], nomsCamps[]=new String[]{"Nom", "Cognom", "Ciutats", "Adreces", "Professions", "Pais", "Estudis", "Colors", "URL"}; //La primera dimensio de l'array defineix els camps a buscar, i la segona la quantitat de registres a generar
int nombreRegistresGenerar=0, campFinal=0;
try {
File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_estatics_i_IBAN.txt");
FileReader fr = new FileReader(entrada);
BufferedReader br = new BufferedReader(fr);
boolean error=false, generat=false;
int i=1,x=0, j=0, campsGenerar=0, tamany=0, nlinia=0;
String linea1="", linea="", linea1Separado[], lineaSeparado[];
linea1=br.readLine();
Scanner sc = new Scanner(entrada);
while(sc.hasNextLine()) {
sc.nextLine();
nlinia++;
}
sc.close();
String[] linies=new String[nlinia];
//Semarem els camps per ";"
linea1Separado=linea1.split(";");
while(br.ready() && error==false) //mentres hi hagi lineas
{
x++;
if(linea1Separado.length != 3) //Si no estan tots els camps error
{
error=true;
break;
}
//Definim cuantes dades haurem de generar
nombreRegistresGenerar=Integer.parseInt(linea1Separado[2])+1;
if (!generat) {
try //Definim la quantitat de camps a generar
{
Scanner s = new Scanner(entrada);
while(s.hasNextLine()) {
s.nextLine();
campsGenerar++;
}
campsGenerar--;
//definim l'array de sortida de dades
dadesGenerades = new String[campsGenerar][nombreRegistresGenerar];
generat=true;
}
catch (Exception e) {
}
}
//Iniciem la revisio/generació de dades del camps demanats
linea=br.readLine();
lineaSeparado=linea.split(";");
linies[x]=lineaSeparado[1];
if (lineaSeparado[0].equals("1")) //Si el primer camp es 1, generarem noms
{
File fNoms=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
FileReader fn = new FileReader(fNoms);
BufferedReader bn = new BufferedReader(fn);
String noms[]= new String[200];
for (j=0;bn.ready();j++)
{
noms[j]=bn.readLine();
}
bn.close(); //S'han de tencar
fn.close();
//desordenem la llista per a emplenar els noms aleatoriament
//Emplenem l'array de control amb les dades demanades
dadesGenerades[campFinal][0]="Noms";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("2")) //Si el primer camp es 2, generarem cognoms
{
File fCognoms=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\COGNOMS.txt");
FileReader fcn = new FileReader(fCognoms);
BufferedReader bcn = new BufferedReader(fcn);
String cognoms[]= new String[250];
for (j=0;bcn.ready();j++)
{
cognoms[j]=bcn.readLine();
}
bcn.close();
fcn.close();
//Emplenem l'array de control amb les dades demanades
dadesGenerades[campFinal][0]="Cognoms";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("3")) //Si el primer camp es 1, generarem noms
{
File fCiutats=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\CIUTATS.txt");
FileReader fci = new FileReader(fCiutats);
BufferedReader bci = new BufferedReader(fci);
String ciutats[]= new String[200];
for (j=0;bci.ready();j++)
{
ciutats[j]=bci.readLine();
}
bci.close();
fci.close();
dadesGenerades[campFinal][0]="Ciutats";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("4"))
{
File fAdreses=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\ADRECES.txt");
FileReader fad = new FileReader(fAdreses);
BufferedReader bad = new BufferedReader(fad);
String adreces[]= new String[200];
for (j=0;bad.ready();j++)
{
adreces[j]=bad.readLine();
}
bad.close();
fad.close();
dadesGenerades[campFinal][0]="Adreses";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("5"))
{
File fProfesions=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\PROFESIONS.txt");
FileReader fpr = new FileReader(fProfesions);
BufferedReader bpr = new BufferedReader(fpr);
String professions[]= new String[239];
for (j=0;bpr.ready();j++)
{
professions[j]=bpr.readLine();
}
bpr.close();
fpr.close();
dadesGenerades[campFinal][0]="Professions";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("6"))
{
File fPais=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\PAISOS.txt");
FileReader fpa = new FileReader(fPais);
BufferedReader bpa = new BufferedReader(fpa);
String pais[]= new String[446];
for (j=0;bpa.ready();j++)
{
pais[j]=bpa.readLine();
}
bpa.close();
fpa.close();
dadesGenerades[campFinal][0]="Pais";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("7"))
{
File fEstudis=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\Estudis.txt");
FileReader fes = new FileReader(fEstudis);
BufferedReader bes = new BufferedReader(fes);
String estudis[]= new String[253];
for (j=0;bes.ready();j++)
{
estudis[j]=bes.readLine();
}
bes.close();
fes.close();
dadesGenerades[campFinal][0]="Estudis";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("8"))
{
File fColors=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\Colors.txt");
FileReader fco = new FileReader(fColors);
BufferedReader bco = new BufferedReader(fco);
String colors[]= new String[113];
for (j=0;bco.ready();j++)
{
colors[j]=bco.readLine();
}
bco.close();
fco.close();
dadesGenerades[campFinal][0]="Colors";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("9"))
{
File fUrl=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\URL.txt");
FileReader fu = new FileReader(fUrl);
BufferedReader bu = new BufferedReader(fu);
String url[]= new String[200];
for (j=0;bu.ready();j++)
{
url[j]=bu.readLine();
}
bu.close();
fu.close();
dadesGenerades[campFinal][0]="URL";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("10"))
{
File fCompanyia=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
FileReader fco = new FileReader(fCompanyia);
BufferedReader bco = new BufferedReader(fco);
String companyia[]= new String[243];
for (j=0;bco.ready();j++)
{
companyia[j]=bco.readLine();
}
bco.close();
fco.close();
dadesGenerades[campFinal][0]="Companyia";
for (int k = 1; k < nombreRegistresGenerar; k++) {
dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
}
campFinal++;
}
else if (lineaSeparado[0].equals("17")) {
IBAN(dadesGenerades, campFinal);
campFinal++;
}
else if (lineaSeparado[0].equals("18"))
{
DNI(dadesGenerades, campFinal, r);
campFinal++;
}
else if (lineaSeparado[0].equals("13"))
{
}
}
if (linea1Separado[0].equals("XML"))
{
File sortida2 = new File(linea1Separado[1]+"fitxer_sortida.xml");
FileWriter fw = new FileWriter(sortida2);
BufferedWriter bw = new BufferedWriter(fw);
//Aqui iria la funcion escribir fixero linea por linea
}
else if (linea1Separado[0].equals("SQL"))
{
//creem un fitxer de sortida
File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxer_sortida.sql");
//declarem la variable que contindra el contingut del fitxer de sortida
String SQL="";
//recollim el script de creacio de la taula
String sql1=sql(linies);
//recollim el script de insercio de les dades a la taula
String sql2=sqlDades(dadesGenerades,linies);
//ajuntem el script de creacio de taula + el script de insercio de les dades
SQL=sql1+"\n"+sql2;
System.out.println(sql2);
try (FileWriter escriptor =new FileWriter(sortida);) {
escriptor.append(SQL).write('\n');
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
else //Si no hi ha cap dels dos error
{
error=true;
System.out.println("ERROR en la Seleccio de sortida");
}
for (int k = 0; k < campsGenerar; k++) {
for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
System.out.print(dadesGenerades[k][k2]+" ");
}
System.out.println();
}
if(error==true)
{
System.out.println("ERROR");
}
else
{
System.out.println("Ha sortit tot be!!");
}
br.close(); //S'han de tancar
fr.close();
}catch (Exception pasanCosas) {
pasanCosas.printStackTrace();}
}
public static String sqlDades(String dadesGenerades[][],String[] linies) {
//iniciem una variable que sera el script de incercio
String sql="INSERT INTO dades (";
//fem aquest bucle per decidir quines columnes seran emplenades de dades
for (int i=1;i<linies.length;i++) {
if (i<linies.length-1) {
sql=sql+linies[i]+", ";
}
else if (i==linies.length-1){
sql=sql+linies[i];
}
}
//tanquem la capsalera de incercio i iniciem la incercio de les dades
sql=sql+") ";
sql=sql+"\n";
sql=sql+"VALUES (";
int llarg=dadesGenerades[0].length-1;
//fem aquest bucle per recollir les dades que inserirem a la taula
for (int k = 1; k <= llarg; k++) {
//fem un if per fer el tancaments del script
if (k>1) {
sql=sql+"), ";
sql=sql+"\n";
sql=sql+"(";
}
//fem aquest bucle per crear les cometes dobles pels varchars i treure-lis hals numeros
for (int k2 = 0; k2 < dadesGenerades.length; k2++) {
if (dadesGenerades[k2][0].equals("Noms")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Cognoms")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Ciutats")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Adreses")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Professions")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Pais")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Estudis")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Colors")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("URL")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Companyia")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Emails")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("IP4")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("Password")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("IBAN")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else if (dadesGenerades[k2][0].equals("DNI")) {
sql=sql+"\""+dadesGenerades[k2][k]+"\"";
}
else {
sql=sql+dadesGenerades[k2][k]+", ";
}
if (k2<dadesGenerades.length-1) {
sql=sql+", ";
}
}
//tanquem el script
if (k==llarg) {
sql=sql+");";
}
}
return sql;
}
public static String sql(String[] linies) {
//declarem un array que contindra totes les linies del script de creacio de taula
String[] sqlSeparat=new String[linies.length+1];
//declarem una variable que contindra totes el script de creacio de taula
String sql="";
//fem un bucle per crear el scrip de creacio de taula
for (int i = 0;i<sqlSeparat.length;i++) {
//comencem ha fer el inici de script
if(i==0) {
sqlSeparat[i]="CREATE TABLE dades (";
}
//fem el final del script
else if(i==sqlSeparat.length-1) {
sqlSeparat[i]=");";
}
//fem el contingut del mitg del script
else {
if (linies[i].equals("Noms")){
sqlSeparat[i]=linies[i]+" Varchar (20)" ;
}
else if(linies[i].equals("Cognoms")) {
sqlSeparat[i]=linies[i]+" Varchar (20)" ;
}
else if(linies[i].equals("Ciutats")) {
sqlSeparat[i]=linies[i]+" Varchar (20)" ;
}
else if(linies[i].equals("Adreses")) {
sqlSeparat[i]=linies[i]+" Varchar (200)" ;
}
else if(linies[i].equals("Professions")) {
sqlSeparat[i]=linies[i]+" Varchar (50)" ;
}
else if(linies[i].equals("Pais")) {
sqlSeparat[i]=linies[i]+" Varchar (50)" ;
}
else if(linies[i].equals("Estudis")) {
sqlSeparat[i]=linies[i]+" Varchar (200)" ;
}
else if(linies[i].equals("Colors")) {
sqlSeparat[i]=linies[i]+" Varchar (20)" ;
}
else if(linies[i].equals("URL")) {
sqlSeparat[i]=linies[i]+" Varchar (20)" ;
}
else if(linies[i].equals("Companyia")) {
sqlSeparat[i]=linies[i]+" Varchar (50)" ;
}
else if(linies[i].equals("Boolean")) {
sqlSeparat[i]=linies[i]+" Boolean" ;
}
else if(linies[i].equals("Number")) {
sqlSeparat[i]=linies[i]+" integer (250)" ;
}
else if(linies[i].equals("Emails")) {
sqlSeparat[i]=linies[i]+" Varchar (50)" ;
}
else if(linies[i].equals("IP4")) {
sqlSeparat[i]=linies[i]+" Varchar (20)" ;
}
else if(linies[i].equals("Password")) {
sqlSeparat[i]=linies[i]+" Varchar (500)" ;
}
else if(linies[i].equals("Dates")) {
sqlSeparat[i]=linies[i]+" Date" ;
}
else if(linies[i].equals("IBAN")) {
sqlSeparat[i]=linies[i]+" Varchar (25)" ;
}
else if(linies[i].equals("DNI")) {
sqlSeparat[i]=linies[i]+" Varchar (10)" ;
}
else if(linies[i].equals("Autonumeric")) {
sqlSeparat[i]=linies[i]+" Integer (5)" ;
}
}
}
//fem aquest bucle per inserir el contingut del script a una variable string
for (int i = 0;i<sqlSeparat.length;i++) {
if (i==0 || i==sqlSeparat.length-1 || i==sqlSeparat.length-2) {
sql=sql+sqlSeparat[i];
}
else {
sql=sql+sqlSeparat[i]+", ";
}
}
return sql;
}
private static void DNI(String[][] dadesGenerades, int campFinal,Random r) {
//Creem un array per tenir predefinida la posició de les lletres, que sempre serà la mateixa
String letra[] = {"T", "R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E"};
int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
String dni=""; //Serà el dni final
dadesGenerades[campFinal][0]="DNI";
for (int j = 1; j < dadesGenerades[campFinal].length; j++){
while (i!=8) { //En aquest bucle, generarem a cada numero del dni un numero aleatori
dni=dni+r.nextInt(9);;
i++;
}
posicionLetra=Integer.parseInt(dni)%23; //Calcularem la resta de la divisió del dni entre 23, per a saber quina lletra se li assignarà
dni=dni+letra[posicionLetra]; //Li assignem la seva lletra corresponent a partir del numero tret, agafant aquesta n posició
dadesGenerades[campFinal][j]=dni;
}
}
public static void IBAN (String dadesGenerades[][], int campFinal) {
int contador=0, tamany=0, banc, oficina, control1, control2, A=0, B=0, C, D=0, E;
Random r = new Random();
String BancsLleida[]=new String[1], oficinesBanc[]=new String[1], bancOficina="", compte="", IBAN, IBANsenseCC, CCC="", nomFitxer="", Rstring;
boolean finalitzador=false;
//Llegim l'arxiu dels bancs presents a la provincia de Lleida
try {
File f1 = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\FitxersIBAN\\BancsLleida.txt");
Scanner s = new Scanner(f1);
FileReader fr = new FileReader(f1);
BufferedReader br = new BufferedReader(fr);
while(s.hasNextLine()) {
s.nextLine();
contador++;
}
tamany=contador;
BancsLleida=new String[tamany];
contador=0;
while(contador<tamany) {
BancsLleida[contador]=br.readLine();
contador++;
}
contador=0;
}catch (Exception e) {
}
//Elegim el banc aleatoriament
banc=r.nextInt(tamany);
//Un cop tenim el banc, carreguem les seves oficines
Path dir = Paths.get("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\FitxersIBAN\\");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir);) {
for (Path fitxer: stream) {
if (finalitzador==true) {
break;
}
nomFitxer=fitxer.toString();
if (nomFitxer.startsWith("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\FitxersIBAN\\"+BancsLleida[banc])) {
File f2 = new File(fitxer.toString());
Scanner s2 = new Scanner(f2);
FileReader fr2 = new FileReader(f2);
BufferedReader br2 = new BufferedReader(fr2);
while(s2.hasNextLine()) {
s2.nextLine();
contador++;
}
tamany=contador;
oficinesBanc=new String[tamany];
contador=0;
while(contador<tamany) {
oficinesBanc[contador]=br2.readLine();
contador++;
}
contador=0;
finalitzador=true;
}
}
} catch (IOException | DirectoryIteratorException ex) {
System.err.println(ex);
}
//Elegim la oficina aleatoriament
oficina=r.nextInt(tamany);
//Completem banc i oficina
//Bucle per emplenar l'array de control d'Ibans
dadesGenerades[campFinal][0]="IBAN";
for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
bancOficina=BancsLleida[r.nextInt(BancsLleida.length)]+oficinesBanc[r.nextInt(oficinesBanc.length)];
compte="";
for(int i = 0; i < 10; i++){
compte += r.nextInt(10);
}
//Calculem el primer digit de control
for (int i = 0; i < bancOficina.length(); i++) {
if(i==0) A+=Character.getNumericValue(bancOficina.charAt(i))*4;
if(i==1) A+=Character.getNumericValue(bancOficina.charAt(i))*8;
if(i==2) A+=Character.getNumericValue(bancOficina.charAt(i))*5;
if(i==3) A+=Character.getNumericValue(bancOficina.charAt(i))*10;
if(i==4) B+=Character.getNumericValue(bancOficina.charAt(i))*9;
if(i==5) B+=Character.getNumericValue(bancOficina.charAt(i))*7;
if(i==6) B+=Character.getNumericValue(bancOficina.charAt(i))*3;
if(i==7) B+=Character.getNumericValue(bancOficina.charAt(i))*6;
}
C=(A+B)%11;
control1=11-C;
if (control1==10) {
control1=1;
}
if (control1==11) {
control1=0;
}
//Calculem el 2n digit de control
for (int i = 0; i < compte.length(); i++) {
if(i==0) D+=Character.getNumericValue(compte.charAt(i))*1;
if(i==1) D+=Character.getNumericValue(compte.charAt(i))*2;
if(i==2) D+=Character.getNumericValue(compte.charAt(i))*4;
if(i==3) D+=Character.getNumericValue(compte.charAt(i))*8;
if(i==4) D+=Character.getNumericValue(compte.charAt(i))*5;
if(i==5) D+=Character.getNumericValue(compte.charAt(i))*10;
if(i==6) D+=Character.getNumericValue(compte.charAt(i))*9;
if(i==7) D+=Character.getNumericValue(compte.charAt(i))*7;
if(i==8) D+=Character.getNumericValue(compte.charAt(i))*3;
if(i==9) D+=Character.getNumericValue(compte.charAt(i))*6;
}
E=D%11;
control2=11-E;
if (control2==10) {
control2=1;
}
if (control2==11) {
control2=0;
}
CCC=bancOficina+control1+control2+compte;
//Calculem els digits de control de l'IBAN
IBANsenseCC=CCC+14+28;
BigInteger calcularIban=new BigInteger(IBANsenseCC);
BigInteger mod97 = new BigInteger("97");
BigInteger RBigInt=calcularIban.mod(mod97);
Rstring=RBigInt.toString();
if (Rstring.length()<2) {
IBAN="ES0"+Rstring+CCC;
}else {
IBAN="ES"+Rstring+CCC;
}
//Escribim l'iban a l'array
dadesGenerades[campFinal][j]=IBAN;
}
}
}
public class GeneradorSQL {
}