Julss799 / PROJECTE1-DAM2

Projecte 1: Entrega 05/12/2022 - 07/12/2022
1 stars 0 forks source link

Proves Main Sprint 2 (Issue Interna) #38

Closed eliasporter closed 1 year ago

eliasporter commented 1 year ago

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.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Scanner; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter;

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, j=0, campsGenerar=0, tamany=0; String linea1="", linea="", linea1Separado[], lineaSeparado[];

        linea1=br.readLine();
        //Semarem els camps per ";"
        linea1Separado=linea1.split(";");
        while(br.ready() && error==false) //mentres hi hagi lineas
        {               
            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(";");
            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]="Adreces";
                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]="Paisos";
                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]="Companyies";
                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("13"))
            {

            }
        }

        /*if (linea1Separado[0].equals("XML"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else if (linea1Separado[0].equals("SQL"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else //Si no hi ha cap dels dos error
        {
            error=true;
            System.out.println("ERROR");
        }*/

    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 tencar
        fr.close();
    }catch (Exception pasanCosas) {
        pasanCosas.printStackTrace();}
}
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;  
    }
}

}

Julss799 commented 1 year ago

[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.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Scanner; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter;

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, j=0, campsGenerar=0, tamany=0; String linea1="", linea="", linea1Separado[], lineaSeparado[]; linea1=br.readLine();

    //Semarem els camps per ";"
    linea1Separado=linea1.split(";");
    while(br.ready() && error==false) //mentres hi hagi lineas
    {               
        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(";");
        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]="Adreces";
            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]="Paisos";
            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]="Companyies";
            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 sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
        FileWriter fw = new FileWriter(sortida);
        BufferedWriter bw = new BufferedWriter(fw);
        //Aqui iria la funcion escribir fixero linea por linea
    }
    else if (linea1Separado[0].equals("SQL"))
    {
        File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
        FileWriter fw = new FileWriter(sortida);
        BufferedWriter bw = new BufferedWriter(fw);
        //Aqui iria la funcion escribir fixero linea por linea
    }
    else //Si no hi ha cap dels dos error
    {
        error=true;
        System.out.println("ERROR");
    }*/

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 tencar
    fr.close();
}catch (Exception pasanCosas) {
    pasanCosas.printStackTrace();}

} private static void DNI(String[][] dadesGenerades, int campFinal,Random r) { // TODO Auto-generated method stub //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;  
}

} }](url)

eliasporter commented 1 year ago

Implementada la funcio Numeros, ID 12

else if (lineaSeparado[0].equals("12")) {
    Numeros(dadesGenerades, campFinal, lineaSeparado, r);
    campFinal++;
}

Funció:

private static void Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparado[], Random r) {
    int decimals=0, minim=0, maxim=1000;
    if (lineaSeparado.length==3) {
        decimals=Integer.parseInt(lineaSeparado[2]);
    }else if (lineaSeparado.length==4) {
        decimals=Integer.parseInt(lineaSeparado[2]);
        minim=Integer.parseInt(lineaSeparado[3]);
    }else if (lineaSeparado.length==5) {
        decimals=Integer.parseInt(lineaSeparado[2]);
        minim=Integer.parseInt(lineaSeparado[3]);
        maxim=Integer.parseInt(lineaSeparado[4]);
    }
    maxim=maxim-minim;
    dadesGenerades[campFinal][0]="Numeros";
    for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
        double generat=r.nextDouble(maxim)+minim;
        BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
        dadesGenerades[campFinal][j]=redondeado.toString();
    }       
}
Julss799 commented 1 year ago

Implementada la funció DNI, ID 18

else if (lineaSeparado[0].equals("18"))
            {
                DNI(dadesGenerades, campFinal, r,lineaSeparado);
                campFinal++;
            }

Funció:

private static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparado) {
    // TODO Auto-generated method stub
    //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"};
    dadesGenerades[campFinal][0]=lineaSeparado[1];
    for (int j = 1; j < dadesGenerades[campFinal].length; j++){
        String dni="";
        int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
        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;
    }
}
Julss799 commented 1 year ago

Implementada la funció IP4, ID 1

else if(lineaSeparado[0].equals("14")) {
                IP4(dadesGenerades, campFinal, r,lineaSeparado);
                campFinal++;
            }

Funció:

private static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparado) {
    // TODO Auto-generated method stub
    int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
    dadesGenerades[campFinal][0]=lineaSeparado[1];

    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        String ipFinal="";
        part1=r.nextInt(256);
        part2=r.nextInt(256);
        part3=r.nextInt(256);
        part4=r.nextInt(256);
        ipFinal=part1+"."+part2+"."+part3+"."+part4;
        dadesGenerades[campFinal][j]=ipFinal;
    }

}
Julss799 commented 1 year ago

Implementada la funció Password, ID 15

else if(lineaSeparado[0].equals("15")) {
                Password(dadesGenerades, campFinal, lineaSeparado, r);
                campFinal++;
            }

Funció:

private static void Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparado, Random r) {
    // TODO Auto-generated method stub
    char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
    int lletres, numeros, simbols;

    dadesGenerades[campFinal][0]=lineaSeparado[1];
    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        String passw="";//Declarem la variable on anirà la nostra password
        int longitud = 0,i=0,majMin=3,num, posicio=0;
        char lletra=' '; //Declarem una variable per agafar una lletra quan ens la demanin
        while(i<Integer.parseInt(lineaSeparado[7])) {
            if(lineaSeparado[2].equals("Si") && i<Integer.parseInt(lineaSeparado[7])) { //Si hi ha lletres comprovarem si ha indicat majuscules o minuscules
                if (lineaSeparado[4].equals("No") && lineaSeparado[5].equals("No") && i<Integer.parseInt(lineaSeparado[7])) {//Si no ha indicat cap de les dues, utilitzarem la variable majMin per a fer un aleatori y que agafi qualsevol de les dues
                    majMin=r.nextInt(2)+1;
                }
                if((lineaSeparado[4].equals("Si") || majMin==1) && i<Integer.parseInt(lineaSeparado[7])) {
                    lletra=(char)(r.nextInt(26)+'A');
                    passw=passw+lletra;
                    i++;
                }
                if((lineaSeparado[5].equals("Si") || majMin==2) && i<Integer.parseInt(lineaSeparado[7])) {
                    lletra=(char)(r.nextInt(26)+'a');
                    passw=passw+lletra;
                    i++;
                }
            }
            else if(lineaSeparado[2].equals("No") && (lineaSeparado[5].equals("Si") || lineaSeparado[4].equals("Si"))) { //Si indica majuscules o minuscules pero no lletres serà un error
                System.out.println("ERROR");
            }
            if (lineaSeparado[3].equals("Si")&& i<Integer.parseInt(lineaSeparado[7])) { //farem un random per els numeros
                num=r.nextInt(10); //El 10 no estarà inclos
                passw=passw+num;
                i++;
            }
            if (lineaSeparado[6].equals("Si")&& i<Integer.parseInt(lineaSeparado[7]))
            {
                posicio=r.nextInt(13);
                passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                i++;
            }   
        }
        dadesGenerades[campFinal][j]=passw;
    }
Julss799 commented 1 year ago

Canviar les meves funcions de private a public

Julss799 commented 1 year ago

Implementar el lineaSeparado[1] per agafar el nom escrit al fitxer

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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                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]=lineaSeparado[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                }
                campFinal++;
            }
Julss799 commented 1 year ago

Implementada la funció Boolean, ID 11

else if(lineaSeparado[0].equals("11"))
            {
                Boolean(lineaSeparado, r, dadesGenerades, campFinal);
                campFinal++;
            }

Funció

public static void Boolean(String[] lineaSeparado, Random r, String[][] dadesGenerades, int campFinal) {
    // TODO Auto-generated method stub
    dadesGenerades[campFinal][0]=lineaSeparado[1];
    String aleatori; //variable on es guarda boolean
    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
        if (numeroAleatori==0){ //si es 0, sortira boolean false
            aleatori="false";
        }
        else {
            aleatori="true"; //i si surt 1, sortira boolean true
        }
        dadesGenerades[campFinal][j]=aleatori;
    }
}
eliasporter commented 1 year ago

Funció autonumeric ID 19

else if (lineaSeparado[0].equals("19")) 
                {           
                    Autonumeric(dadesGenerades, campFinal, lineaSeparado);
                    campFinal++;
                }

Funció

public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparado[]) {
        int inici=0;
        if(lineaSeparado.length==3) {
            inici=Integer.parseInt(lineaSeparado[2]);
        }
        dadesGenerades[campFinal][0]=lineaSeparado[1];
        for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
            dadesGenerades[campFinal][i]=String.valueOf(inici);
            inici++;
        }

    }
Julss799 commented 1 year ago

Implementació del camp Dates, ID 16

else if (lineaSeparado[0].equals("16"))
            {
                Dates(dadesGenerades, campFinal, r,lineaSeparado);
                campFinal++;
            }

Funció

public static void Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparado) {
    // TODO Auto-generated method stub
    dadesGenerades[campFinal][0]=lineaSeparado[1];
    int anyMax = 2023, anyMin = 1900, dia, mes, any;
    if (lineaSeparado.length==3) {
        anyMin=Integer.parseInt(lineaSeparado[2]);
    }else if (lineaSeparado.length==4) {
        anyMin=Integer.parseInt(lineaSeparado[2]);
        anyMax=Integer.parseInt(lineaSeparado[3]);
    }
    //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
    int interval = anyMax-anyMin+1;
    //Si l'any minim es mes gran que l'any maxim, donarà un error
    if(anyMin>anyMax) {System.out.println("ERROR");}

    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {

            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12)
            {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) //Si el mes generat es el dos haurem de controlar els anys bisiestos
            {
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else
            {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=dia+"/"+mes+"/"+any;
    }
}
Formeinstein13 commented 1 year ago

Implementacio de la funcio que genera SQL: Primer contem les linies i iniciem un array de strings per guardar el contingut de les linies.

Scanner sc = new Scanner(entrada); while(sc.hasNextLine()) { sc.nextLine(); nlinia++; } sc.close(); String[] linies=new String[nlinia];

Guardem el contingut de les linies: linies[x]=lineaSeparado[1];

creem el arxiu SQl: else if (linea1Separado[0].equals("SQL")) { File sortida=new File("C:\DAM2\PROJECTE_1\Fitxer_sortida.sql"); String sql=sql(linies); try (FileWriter escriptor =new FileWriter(sortida);) { escriptor.append(sql).write('\n'); } catch (IOException e) { System.err.println(e.getMessage()); } }

Funció: public static String sql(String[] linies) { String[] sqlSeparat=new String[linies.length+1]; String sql=""; for (int i = 0;i<sqlSeparat.length;i++) { if(i==0) { sqlSeparat[i]="CREATE TABLE dades ("; } else if(i==sqlSeparat.length-1) { sqlSeparat[i]=");"; } 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 (20)" ; } else if(linies[i].equals("Estudis")) { sqlSeparat[i]=linies[i]+" Varchar (50)" ; } 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)" ; } } } 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; }

Julss799 commented 1 year ago

Tot el main

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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

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, i=0;
    int[] numFitxer = new int [19];

    try {
        File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_sense_opcions.txt");
        FileReader fr = new FileReader(entrada);
        BufferedReader br = new BufferedReader(fr);
        boolean error=false, generat=false;
        int j=0, campsGenerar=0;
        String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];
        linea1=br.readLine();
        if(linea1==null){
            System.out.println("Arxiu vuit");
            error=true;
        }else {
            //Separarem els camps per ";"
            linea1Separat=linea1.split(";");
        }        
        FileReader fr1 = new FileReader(entrada);
        BufferedReader br1 = new BufferedReader(fr1);
        linea1=br1.readLine();
        while((linea=br1.readLine()) != null) {
            lineaSeparat=linea.split(";");
            System.out.println(linea);  
            //copiem id de cada linea en un array
            numFitxer[i]=Integer.parseInt(lineaSeparat[0]);
            i++;
        }
        //ordenem l'array
        Arrays.sort(numFitxer);
        for(i=0;i<numFitxer.length;i++) {
            //si hi ha una posicion amb 0 el sobreescrivim pel següent numero de l'array
            if(numFitxer[i]==0) {
                numFitxer[i]=numFitxer[i+1];
            }
            else {
                //System.out.print(numFitxer[i]+" ");
            }
        }

        while(br.ready() && error==false){ //mentres hi hagi lineas
            if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                System.out.println("Primera linea invalida");
                error=true;
                break;
            }
            //Definim cuantes dades haurem de generar
            nombreRegistresGenerar=Integer.parseInt(linea1Separat[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();
            lineaSeparat=linea.split(";");
            if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                error=true;
                System.out.println("ID invalid o nom invalid");
                break;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                }
                campFinal++;
            }
            else if(lineaSeparat[0].equals("11")) {
                Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("12")) {
                if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                    System.out.println("Error numero de camps Numeros");
                    error=true;
                    break;
                }
                error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("13")) {
                if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                    System.out.println("Error numero de camps Email");
                    error=true;
                    break;
                }
                campFinal++;
            }
            else if(lineaSeparat[0].equals("14")) {
                IP4(dadesGenerades, campFinal, r,lineaSeparat);
                campFinal++;
            }
            else if(lineaSeparat[0].equals("15")) {
                if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                    System.out.println("Error numero de camps Password");
                    error=true;
                    break;
                }
                error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("16")) {
                if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                    System.out.println("Error numero de camps Dates");
                    error=true;
                    break;
                }
                error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("17")) {
                IBAN(dadesGenerades, campFinal,lineaSeparat);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("18")) {
                DNI(dadesGenerades, campFinal, r,lineaSeparat);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("19")) {
                if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                    System.out.println("Error numero de camps Autonumeric");
                    error=true;
                    break;
                }
                Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                campFinal++;
            }
        }

        /*if (linea1Separado[0].equals("XML"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else if (linea1Separado[0].equals("SQL"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else //Si no hi ha cap dels dos error
        {
            error=true;
            System.out.println("ERROR");
        }*/

        if(error==true) {
            System.out.println("ERROR");
        }
        else {
            //Mostra els camps per test
            for (int k = 0; k < campsGenerar; k++) {
                for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                    System.out.print(dadesGenerades[k][k2]+" ");
                }
                System.out.println();
            }   
            System.out.println("Ha sortit tot be!!");
        }

            br.close(); //S'han de tencar
            fr.close();
    } catch (Exception pasanCosas) {
        pasanCosas.printStackTrace();}
}

//ID 11
public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
    // TODO Auto-generated method stub
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    String aleatori; //variable on es guarda boolean
    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
        if (numeroAleatori==0){ //si es 0, sortira boolean false
            aleatori="false";
        }
        else {
            aleatori="true"; //i si surt 1, sortira boolean true
        }
        dadesGenerades[campFinal][j]=aleatori;
    }
}

//ID 12
public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
    int decimals=0, minim=0, maxim=1000;
    if(lineaSeparat.length>2) {
        if (lineaSeparat.length==3) {
            decimals=Integer.parseInt(lineaSeparat[2]);
        }else if (lineaSeparat.length==4) {
            decimals=Integer.parseInt(lineaSeparat[2]);
            minim=Integer.parseInt(lineaSeparat[3]);
        }else if (lineaSeparat.length==5) {
            decimals=Integer.parseInt(lineaSeparat[2]);
            minim=Integer.parseInt(lineaSeparat[3]);
            maxim=Integer.parseInt(lineaSeparat[4]);
        }
        if(Integer.parseInt(lineaSeparat[2])<0) {
            System.out.println("Error decimals (Numeros)");
            error=true;
        }
    }

    int maxim2 = maxim-minim;
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
        if(maxim<minim)
        {
            System.out.println("Error numero maxim mes petit que minim (Numeros)");
            error=true;
            break;
        }
        double generat=r.nextDouble(maxim2)+minim;
        BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
        dadesGenerades[campFinal][j]=redondeado.toString();
    }   
    return error;
}

//ID 13

//ID 14
public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
    // TODO Auto-generated method stub
    int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        String ipFinal="";
        part1=r.nextInt(256);
        part2=r.nextInt(256);
        part3=r.nextInt(256);
        part4=r.nextInt(256);
        ipFinal=part1+"."+part2+"."+part3+"."+part4;
        dadesGenerades[campFinal][j]=ipFinal;
    }
}

//ID 15
public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
    // TODO Auto-generated method stub
    char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
    dadesGenerades[campFinal][0]=lineaSeparat[1];   
    for (int j = 1; j < dadesGenerades[campFinal].length && error==false; j++) {
        String passw="";//Declarem la variable on anirà la nostra password
        int i=0,majMin=3,num, posicio=0;
        char lletra=' '; //Declarem una variable per agafar una lletra quan ens la demanin
        while(i<Integer.parseInt(lineaSeparat[7])) {
            if(lineaSeparat[2].equals("Si") && i<Integer.parseInt(lineaSeparat[7])) { //Si hi ha lletres comprovarem si ha indicat majuscules o minuscules
                if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No") && i<Integer.parseInt(lineaSeparat[7])) {//Si no ha indicat cap de les dues, utilitzarem la variable majMin per a fer un aleatori y que agafi qualsevol de les dues
                    majMin=r.nextInt(2)+1;
                }
                if((lineaSeparat[4].equals("Si") || majMin==1) && i<Integer.parseInt(lineaSeparat[7])) {
                    lletra=(char)(r.nextInt(26)+'A');
                    passw=passw+lletra;
                    i++;
                }
                if((lineaSeparat[5].equals("Si") || majMin==2) && i<Integer.parseInt(lineaSeparat[7])) {
                    lletra=(char)(r.nextInt(26)+'a');
                    passw=passw+lletra;
                    i++;
                }
            }
            else if(lineaSeparat[2].equals("No") && (lineaSeparat[5].equals("Si") || lineaSeparat[4].equals("Si"))) { //Si indica majuscules o minuscules pero no lletres serà un error
                System.out.println("Error Password, lletres no y maj o min si");
                error=true;
                break;
            }
            if (lineaSeparat[3].equals("Si")&& i<Integer.parseInt(lineaSeparat[7])) { //farem un random per els numeros
                num=r.nextInt(10); //El 10 no estarà inclos
                passw=passw+num;
                i++;
            }
            if (lineaSeparat[6].equals("Si")&& i<Integer.parseInt(lineaSeparat[7])) {
                posicio=r.nextInt(13);
                passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                i++;
            }   
        }
        dadesGenerades[campFinal][j]=passw;
    }
    return error;
}

//ID 16
public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
    // TODO Auto-generated method stub
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    int anyMax = 2023, anyMin = 1900, dia, mes, any;
    if (lineaSeparat.length==3) {
        anyMin=Integer.parseInt(lineaSeparat[2]);
        if(Integer.parseInt(lineaSeparat[2])<0)
        {
            error=true;
            System.out.println("Error numero de camps Dates (Minim)");
        }
    }else if (lineaSeparat.length==4) {
        anyMin=Integer.parseInt(lineaSeparat[2]);
        anyMax=Integer.parseInt(lineaSeparat[3]);
        if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
        {
            error=true;
            System.out.println("Error numero de camps Dates (Minim o Maxim)");
        }
    }
    //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
    int interval = anyMax-anyMin+1;
    //Si l'any minim es mes gran que l'any maxim, donarà un error

    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        if(anyMin>anyMax) {
            System.out.println("Error numero maxim mes petit que minim (Date)");
            error=true;
            break;
        }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=dia+"/"+mes+"/"+any;
    }
    return error;
}

//ID 17
public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
    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]=lineaSeparat[1];
    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;  
    }
    }

//ID 18
public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
    // TODO Auto-generated method stub
    //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"};
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (int j = 1; j < dadesGenerades[campFinal].length; j++){
        String dni="";
        int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
        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;
    }
}

//ID 19
public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
    int inici=0;
    if(lineaSeparat.length==3) {
        inici=Integer.parseInt(lineaSeparat[2]);
    }
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
        dadesGenerades[campFinal][i]=String.valueOf(inici);
        inici++;
    }
}
}
eliasporter commented 1 year ago

Tot el main dimecres 19 21:05

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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class ProvesMainJulia191022 {
    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, i=0;
        int[] ordreFitxerEntradaOriginal = new int [1];
        int[] entradaOrdenat = new int [1];

        try {
            File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_sense_opcions.txt");
            FileReader fr = new FileReader(entrada);
            BufferedReader br = new BufferedReader(fr);
            boolean error=false, generat=false;
            int j=0, campsGenerar=0;
            String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];

            //Si no hi ha linies a l'arxiu
            linea1=br.readLine();
            if(linea1==null){
                System.out.println("Arxiu vuit");
                error=true;
            }else {
                //Separarem els camps per ";"
                linea1Separat=linea1.split(";");
            }        
            FileReader fr1 = new FileReader(entrada);
            BufferedReader br1 = new BufferedReader(fr1);
            linea1=br1.readLine();
            while((linea=br1.readLine()) != null) {
                //copiem id de cada linea en un array
                i++;
            }
            fr1.close();
            br1.close();
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);
            ordreFitxerEntradaOriginal = new int [i];
            entradaOrdenat = new int [i];
            i=0;
            linea1=br1.readLine();
            while((linea=br1.readLine()) != null) {
                lineaSeparat=linea.split(";");
                //copiem id de cada linea en un array
                ordreFitxerEntradaOriginal[i]=Integer.parseInt(lineaSeparat[0]);
                entradaOrdenat[i]=Integer.parseInt(lineaSeparat[0]);
                i++;
            }
            //ordenem l'array
            Arrays.sort(entradaOrdenat);
            for(i=0;i<entradaOrdenat.length;i++) {
                //si hi ha una posicion amb 0 el sobreescrivim pel següent numero de l'array
                if(entradaOrdenat[i]==0) {
                    entradaOrdenat[i]=entradaOrdenat[i+1];
                }
                else {
                    //System.out.print(numFitxer[i]+" ");
                }
            }

            while(br.ready() && error==false){ //mentres hi hagi lineas
                if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                    System.out.println("Primera linea invalida");
                    error=true;
                    break;
                }
                //Definim cuantes dades haurem de generar
                nombreRegistresGenerar=Integer.parseInt(linea1Separat[2]);

                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+1];
                        generat=true;
                    }
                    catch (Exception e) {   
                    }
                }

                //Iniciem la revisio/generació de dades del camps demanats
                linea=br.readLine();
                lineaSeparat=linea.split(";");
                if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                    error=true;
                    System.out.println("ID invalid o nom invalid");
                    break;
                }
                else if (lineaSeparat[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();

                    //Emplenem l'array de control amb les dades demanades
                    dadesGenerades[campFinal][0]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < dadesGenerades[0].length; k++) {
                        dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                    }
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("11")) {
                    Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("12")) {
                    if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Numeros");
                        error=true;
                        break;
                    }
                    error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("13")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Email");
                        error=true;
                        break;
                    }
                    Email(dadesGenerades, campFinal, lineaSeparat, entradaOrdenat, nombreRegistresGenerar);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("14")) {
                    IP4(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("15")) {
                    if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Password");
                        error=true;
                        break;
                    }
                    error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("16")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Dates");
                        error=true;
                        break;
                    }
                    error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("17")) {
                    IBAN(dadesGenerades, campFinal,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("18")) {
                    DNI(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("19")) {
                    if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Autonumeric");
                        error=true;
                        break;
                    }
                    Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                    campFinal++;
                }
            }

            /*if (linea1Separado[0].equals("XML"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else if (linea1Separado[0].equals("SQL"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else //Si no hi ha cap dels dos error
        {
            error=true;
            System.out.println("ERROR");
        }*/

            if(error==true) {
                System.out.println("ERROR");
            }
            else {
                //Mostra els camps per test
                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        System.out.print(dadesGenerades[k][k2]+" ");
                    }
                    System.out.println();
                }   
                System.out.println("Ha sortit tot be!!");
            }

            br.close(); //S'han de tencar
            fr.close();
        } catch (Exception pasanCosas) {
            pasanCosas.printStackTrace();}
    }

    //ID 11
    public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
        // TODO Auto-generated method stub
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        String aleatori; //variable on es guarda boolean
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
            if (numeroAleatori==0){ //si es 0, sortira boolean false
                aleatori="false";
            }
            else {
                aleatori="true"; //i si surt 1, sortira boolean true
            }
            dadesGenerades[campFinal][j]=aleatori;
        }
    }

    //ID 12
    public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
        int decimals=0, minim=0, maxim=1000;
        if(lineaSeparat.length>2) {
            if (lineaSeparat.length==3) {
                decimals=Integer.parseInt(lineaSeparat[2]);
            }else if (lineaSeparat.length==4) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
            }else if (lineaSeparat.length==5) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
                maxim=Integer.parseInt(lineaSeparat[4]);
            }
            if(Integer.parseInt(lineaSeparat[2])<0) {
                System.out.println("Error decimals (Numeros)");
                error=true;
            }
        }

        int maxim2 = maxim-minim;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(maxim<minim)
            {
                System.out.println("Error numero maxim mes petit que minim (Numeros)");
                error=true;
                break;
            }
            double generat=r.nextDouble(maxim2)+minim;
            BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
            dadesGenerades[campFinal][j]=redondeado.toString();
        }   
        return error;
    }

    //ID 13
    public static void Email(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, int entradaOrdenat[], int nombreRegistresGenerar) throws IOException {
        Random rnd= new Random();
        boolean bNoms=false, bCompanyies=false, nomsJaGenerats=false, companyiesJaGenerades=false;
        int lineasNom = 0, lineasCompanyia = 0, i=0, aleatori=0, total=nombreRegistresGenerar, posicioArrayCompanyies=0;
        String extensio=".com", dominiDemanat="", noms[], nomsCompanyia[];

        if (lineaSeparat.length==3) {
            dominiDemanat=lineaSeparat[2];
        }
        if (lineaSeparat.length==4) {
            dominiDemanat=lineaSeparat[2];
            extensio=lineaSeparat[3];
        }

        for (int j = 0; j < dadesGenerades.length; j++) {
            if (entradaOrdenat[j]==1) {
                bNoms=true;
            }
            if (entradaOrdenat[j]==10) {
                posicioArrayCompanyies=j;
                bCompanyies=true;
            }
        }
        if (!bNoms) {
            //aqui declarem i inicialitzem el fitxer de noms
            File filenom = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
            Scanner scnom = new Scanner(filenom);
            FileReader frnom = new FileReader(filenom);
            BufferedReader brnom = new BufferedReader(frnom);
            //contem les linies del fitxer de noms
            while(scnom.hasNextLine()) {
                scnom.nextLine();
                lineasNom++;
            }
            scnom.close();
            noms= new String[lineasNom];
            //inicialitzem i emplenem l'array des del fitxer de noms
            while(brnom.ready()) {
                String nom = brnom.readLine();
                noms[i]=nom;
                i++;
            }
            brnom.close();
            frnom.close();
            i=0;
        }else {
            noms=new String[total];
            for (int j = 1, k =0; k < noms.length; j++, k++) {
                noms[k]=dadesGenerades[0][j];
            }
            lineasNom=nombreRegistresGenerar;
            nomsJaGenerats=true;
        }
        if (!bCompanyies) {
            //aqui declarem i inicialitzem el fitxer de companyies
            File fileCompanyia = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
            Scanner scCompanyia = new Scanner(fileCompanyia);
            FileReader frCompanyia = new FileReader(fileCompanyia);
            BufferedReader brCompanyia = new BufferedReader(frCompanyia);
            //contem les linies del fitxer de companyies
            while(scCompanyia.hasNextLine()) {
                scCompanyia.nextLine();
                lineasCompanyia++;
            }
            scCompanyia.close();
            //declarem els arrays de string del fitxer de noms i del fitxer de companyies
            nomsCompanyia= new String[lineasCompanyia];

            //inicialitzem el array del fitxer de companyies
            while(brCompanyia.ready()) {
                String nom = brCompanyia.readLine();
                nomsCompanyia[i]=nom;
                i++;
            }
            brCompanyia.close();
            frCompanyia.close();
        }else {
            nomsCompanyia=new String[nombreRegistresGenerar];
            for (int j = 1, k =0; j < dadesGenerades[0].length; j++, k++) {
                nomsCompanyia[k]=dadesGenerades[posicioArrayCompanyies][j];
            }
            lineasCompanyia=nombreRegistresGenerar;
            companyiesJaGenerades=true;
        }
        //declarem els arrays per barrejar el fitxer de noms i de companyies, si es necessari
        String nomsAleatoris[]= new String[total], nomsRepetits[]= new String[total], NumerosNomsRepetits[]= new String[total], companyiesAleatoris[]= new String[total];
        //inicialitzem el array per barrejar el fitxer de noms

        if (!nomsJaGenerats) {
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasNom);
                nomsAleatoris[i]=noms[aleatori].toLowerCase();
                nomsRepetits[i]=nomsAleatoris[i];
            }           
        }else {
            for (int j = 0; j < noms.length; j++) {
                nomsAleatoris[j]=noms[j].toLowerCase();
            }           
        }

        //funcio per a poder canviar el nom dels que estan repetits
        for(i=0;i<total;i++) {
            for (int i2 = 0;i2<noms.length;i2++) {
                int fin=nomsRepetits.length-2;
                if (i2<fin&&nomsAleatoris[i].equals(nomsRepetits[i2+1])) {
                    aleatori=rnd.nextInt(lineasNom);
                    String temp=nomsAleatoris[i];
                    NumerosNomsRepetits[i]=NumerosNomsRepetits[i]+1;
                    nomsAleatoris[i]=temp+NumerosNomsRepetits[i];
                }
            }
        }
        if (!companyiesJaGenerades) {
            //inicialitzem el array per barrejar el fitxer de companyies si no demanen companyies
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasCompanyia);
                companyiesAleatoris[i]=nomsCompanyia[aleatori];
            }       
        }else {
            for (int j = 0; j < nomsCompanyia.length; j++) {
                companyiesAleatoris[j]=nomsCompanyia[j].toLowerCase();
            }
        }
        //inicialitzem el array de dominis per crear els dominis a partir de el nom de la companyia
        String dominis[]= new String[total];
        //inicialitzem el array que crea els dominis
        for (i=0;i<total;i++) {
            String[] parts = nomsCompanyia[i].split(" ");
            String domini="";
            for (int i2 = 0;i2<parts.length;i2++) {
                domini=domini+parts[i2];
            }
            dominis[i]=domini.toLowerCase();
        }
        //declarem el array per crear els emails
        String emails[]= new String[total];
        //inicialitzem el array per crear els emails
        //aquest if es per saver si no hi ha un domini solicitat
        if (dominiDemanat.isEmpty()) {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominis[i]+extensio;
            }
        }
        //aquest else es per saver si hi ha un domini solicitat
        else {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominiDemanat+extensio;
            }
        }
        //Emplenem amb els emails l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (i=0;i<emails.length;i++) {
            dadesGenerades[campFinal][i+1]=emails[i];
        }

    }
    //ID 14
    public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            String ipFinal="";
            part1=r.nextInt(256);
            part2=r.nextInt(256);
            part3=r.nextInt(256);
            part4=r.nextInt(256);
            ipFinal=part1+"."+part2+"."+part3+"."+part4;
            dadesGenerades[campFinal][j]=ipFinal;
        }
    }

    //ID 15
    public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
        // TODO Auto-generated method stub
        char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
        dadesGenerades[campFinal][0]=lineaSeparat[1];   
        for (int j = 1; j < dadesGenerades[campFinal].length && error==false; j++) {
            String passw="";//Declarem la variable on anirà la nostra password
            int i=0,majMin=3,num, posicio=0;
            char lletra=' '; //Declarem una variable per agafar una lletra quan ens la demanin
            while(i<Integer.parseInt(lineaSeparat[7])) {
                if(lineaSeparat[2].equals("Si") && i<Integer.parseInt(lineaSeparat[7])) { //Si hi ha lletres comprovarem si ha indicat majuscules o minuscules
                    if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No") && i<Integer.parseInt(lineaSeparat[7])) {//Si no ha indicat cap de les dues, utilitzarem la variable majMin per a fer un aleatori y que agafi qualsevol de les dues
                        majMin=r.nextInt(2)+1;
                    }
                    if((lineaSeparat[4].equals("Si") || majMin==1) && i<Integer.parseInt(lineaSeparat[7])) {
                        lletra=(char)(r.nextInt(26)+'A');
                        passw=passw+lletra;
                        i++;
                    }
                    if((lineaSeparat[5].equals("Si") || majMin==2) && i<Integer.parseInt(lineaSeparat[7])) {
                        lletra=(char)(r.nextInt(26)+'a');
                        passw=passw+lletra;
                        i++;
                    }
                }
                else if(lineaSeparat[2].equals("No") && (lineaSeparat[5].equals("Si") || lineaSeparat[4].equals("Si"))) { //Si indica majuscules o minuscules pero no lletres serà un error
                    System.out.println("Error Password, lletres no y maj o min si");
                    error=true;
                    break;
                }
                if (lineaSeparat[3].equals("Si")&& i<Integer.parseInt(lineaSeparat[7])) { //farem un random per els numeros
                    num=r.nextInt(10); //El 10 no estarà inclos
                    passw=passw+num;
                    i++;
                }
                if (lineaSeparat[6].equals("Si")&& i<Integer.parseInt(lineaSeparat[7])) {
                    posicio=r.nextInt(13);
                    passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                    i++;
                }   
            }
            dadesGenerades[campFinal][j]=passw;
        }
        return error;
    }

    //ID 16
    public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
        // TODO Auto-generated method stub
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        int anyMax = 2023, anyMin = 1900, dia, mes, any;
        if (lineaSeparat.length==3) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            if(Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim)");
            }
        }else if (lineaSeparat.length==4) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            anyMax=Integer.parseInt(lineaSeparat[3]);
            if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim o Maxim)");
            }
        }
        //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
        int interval = anyMax-anyMin+1;
        //Si l'any minim es mes gran que l'any maxim, donarà un error

        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(anyMin>anyMax) {
                System.out.println("Error numero maxim mes petit que minim (Date)");
                error=true;
                break;
            }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=dia+"/"+mes+"/"+any;
        }
        return error;
    }

    //ID 17
    public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
        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]=lineaSeparat[1];
        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;  
        }
    }

    //ID 18
    public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        //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"};
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++){
            String dni="";
            int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
            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;
        }
    }

    //ID 19
    public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
        int inici=0;
        if(lineaSeparat.length==3) {
            inici=Integer.parseInt(lineaSeparat[2]);
        }
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
            dadesGenerades[campFinal][i]=String.valueOf(inici);
            inici++;
        }

    }
}
Julss799 commented 1 year ago

TOT EL MAIN AMB LES FUNCIONS IMPLEMENTADES

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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.Arrays;
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, i=0;
    int[] numFitxer = new int [19];
    int[] ordreFitxerEntradaOriginal = new int [1];
    int[] entradaOrdenat = new int [1];

    try {
        File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_sense_opcions.txt");
        FileReader fr = new FileReader(entrada);
        BufferedReader br = new BufferedReader(fr);
        boolean error=false, generat=false;
        int j=0, campsGenerar=0, nlinia=0,x=0;
        String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];
        linea1=br.readLine();
        if(linea1==null){
            System.out.println("Arxiu vuit");
            error=true;
        }else {
            //Separarem els camps per ";"
            linea1Separat=linea1.split(";");
        }    
        //Ordenarem el fitxer d'entrada per a seguir la nostra estrategia, tot i que despres al fitxer de sortida sortirà igual que a l'entrada
        FileReader fr1 = new FileReader(entrada);
        BufferedReader br1 = new BufferedReader(fr1);
        linea1=br1.readLine();
        while((linea=br1.readLine()) != null) {
            //copiem id de cada linea en un array
            i++;
        }
        fr1.close();
        br1.close();
        fr1 = new FileReader(entrada);
        br1 = new BufferedReader(fr1);
        ordreFitxerEntradaOriginal = new int [i];
        entradaOrdenat = new int [i];
        i=0;
        linea1=br1.readLine();
        while((linea=br1.readLine()) != null) {
            lineaSeparat=linea.split(";");
            //copiem id de cada linea en un array
            ordreFitxerEntradaOriginal[i]=Integer.parseInt(lineaSeparat[0]);
            entradaOrdenat[i]=Integer.parseInt(lineaSeparat[0]);
            i++;
        }
        //ordenem l'array
        Arrays.sort(entradaOrdenat);
        for(i=0;i<entradaOrdenat.length;i++) {
            //si hi ha una posicion amb 0 el sobreescrivim pel següent numero de l'array
            if(entradaOrdenat[i]==0) {
                entradaOrdenat[i]=entradaOrdenat[i+1];
            }
            else {
                //System.out.print(numFitxer[i]+" ");
            }
        }
        //SQL
        Scanner sc = new Scanner(entrada);
        while(sc.hasNextLine()) {
            sc.nextLine();
            nlinia++;
          }
        String[] linies=new String[nlinia-1];
        String[] liniesNoms=new String[nlinia-1];
        sc.close();
        while(br.ready() && error==false){ //mentres hi hagi lineas
            if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                System.out.println("Primera linea invalida");
                error=true;
                break;
            }
            //Definim cuantes dades haurem de generar
            nombreRegistresGenerar=Integer.parseInt(linea1Separat[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();
            lineaSeparat=linea.split(";");
            //SQL
            linies[x]=lineaSeparat[0];
            liniesNoms[x]=lineaSeparat[1];
            x++;
            if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                error=true;
                System.out.println("ID invalid o nom invalid");
                break;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                }
                campFinal++;
            }
            else if (lineaSeparat[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]=lineaSeparat[1];
                for (int k = 1; k < nombreRegistresGenerar; k++) {
                    dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                }
                campFinal++;
            }
            else if(lineaSeparat[0].equals("11")) {
                Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("12")) {
                if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                    System.out.println("Error numero de camps Numeros");
                    error=true;
                    break;
                }
                error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("13")) {
                if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                    System.out.println("Error numero de camps Email");
                    error=true;
                    break;
                }
                Email(dadesGenerades, campFinal, lineaSeparat, entradaOrdenat, nombreRegistresGenerar);
                campFinal++;
            }
            else if(lineaSeparat[0].equals("14")) {
                IP4(dadesGenerades, campFinal, r,lineaSeparat);
                campFinal++;
            }
            else if(lineaSeparat[0].equals("15")) {
                if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                    System.out.println("Error numero de camps Password");
                    error=true;
                    break;
                }
                error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("16")) {
                if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                    System.out.println("Error numero de camps Dates");
                    error=true;
                    break;
                }
                error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("17")) {
                IBAN(dadesGenerades, campFinal,lineaSeparat);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("18")) {
                DNI(dadesGenerades, campFinal, r,lineaSeparat);
                campFinal++;
            }
            else if (lineaSeparat[0].equals("19")) {
                if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                    System.out.println("Error numero de camps Autonumeric");
                    error=true;
                    break;
                }
                Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                campFinal++;
            }
        }

        /*if (linea1Separado[0].equals("XML"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else if (linea1Separado[0].equals("SQL"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else //Si no hi ha cap dels dos error
        {
            error=true;
            System.out.println("ERROR");
        }*/

        if(error==true) {
            System.out.println("ERROR");
        }
        else {
            //Mostra els camps per test
            for (int k = 0; k < campsGenerar; k++) {
                for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                    System.out.print(dadesGenerades[k][k2]+" ");
                }
                System.out.println();
            }   
            if (linea1Separat[0].equals("XML"))
            {
                File sortida2 = new File(linea1Separat[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 (linea1Separat[0].equals("SQL"))
            {
                //creem un fitxer de sortida
                File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\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, liniesNoms);
                //recollim el script de insercio de les dades a la taula
                String sql2=sqlDades(dadesGenerades,linies,liniesNoms);
                //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());
                }
            }
            System.out.println("Ha sortit tot be!!");
        }

            br.close(); //S'han de tencar
            fr.close();
    } catch (Exception pasanCosas) {
        pasanCosas.printStackTrace();}
}

//ID 11
public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
    // TODO Auto-generated method stub
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    String aleatori; //variable on es guarda boolean
    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
        if (numeroAleatori==0){ //si es 0, sortira boolean false
            aleatori="false";
        }
        else {
            aleatori="true"; //i si surt 1, sortira boolean true
        }
        dadesGenerades[campFinal][j]=aleatori;
    }
}

//ID 12
public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
    int decimals=0, minim=0, maxim=1000;
    if(lineaSeparat.length>2) {
        if (lineaSeparat.length==3) {
            decimals=Integer.parseInt(lineaSeparat[2]);
        }else if (lineaSeparat.length==4) {
            decimals=Integer.parseInt(lineaSeparat[2]);
            minim=Integer.parseInt(lineaSeparat[3]);
        }else if (lineaSeparat.length==5) {
            decimals=Integer.parseInt(lineaSeparat[2]);
            minim=Integer.parseInt(lineaSeparat[3]);
            maxim=Integer.parseInt(lineaSeparat[4]);
        }
        if(Integer.parseInt(lineaSeparat[2])<0) {
            System.out.println("Error decimals (Numeros)");
            error=true;
        }
    }

    int maxim2 = maxim-minim;
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
        if(maxim<minim)
        {
            System.out.println("Error numero maxim mes petit que minim (Numeros)");
            error=true;
            break;
        }
        double generat=r.nextDouble(maxim2)+minim;
        BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
        dadesGenerades[campFinal][j]=redondeado.toString();
    }   
    return error;
}

//ID 13
public static void Email(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, int entradaOrdenat[], int nombreRegistresGenerar) throws IOException {
    Random rnd= new Random();
    boolean bNoms=false, bCompanyies=false, nomsJaGenerats=false, companyiesJaGenerades=false;
    int lineasNom = 0, lineasCompanyia = 0, i=0, aleatori=0, total=nombreRegistresGenerar-1, posicioArrayCompanyies=0;
    String extensio=".com", dominiDemanat="", noms[], nomsCompanyia[];

    if (lineaSeparat.length==3) {
        dominiDemanat=lineaSeparat[2];
    }
    if (lineaSeparat.length==4) {
        dominiDemanat=lineaSeparat[2];
        extensio=lineaSeparat[3];
    }

    for (int j = 0; j < dadesGenerades.length; j++) {
        if (entradaOrdenat[j]==1) {
            bNoms=true;
        }
        if (entradaOrdenat[j]==10) {
            posicioArrayCompanyies=j;
            bCompanyies=true;
        }
    }
    if (!bNoms) {
        //aqui declarem i inicialitzem el fitxer de noms
        File filenom = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
        Scanner scnom = new Scanner(filenom);
        FileReader frnom = new FileReader(filenom);
        BufferedReader brnom = new BufferedReader(frnom);
        //contem les linies del fitxer de noms
        while(scnom.hasNextLine()) {
            scnom.nextLine();
            lineasNom++;
        }
        scnom.close();
        noms= new String[lineasNom];
        //inicialitzem i emplenem l'array des del fitxer de noms
        while(brnom.ready()) {
            String nom = brnom.readLine();
            noms[i]=nom;
            i++;
        }
        brnom.close();
        frnom.close();
        i=0;
    }else {
        noms=new String[total];
        for (int j = 1, k =0; k < noms.length; j++, k++) {
            noms[k]=dadesGenerades[0][j];
        }
        lineasNom=nombreRegistresGenerar;
        nomsJaGenerats=true;
    }
    if (!bCompanyies) {
        //aqui declarem i inicialitzem el fitxer de companyies
        File fileCompanyia = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
        Scanner scCompanyia = new Scanner(fileCompanyia);
        FileReader frCompanyia = new FileReader(fileCompanyia);
        BufferedReader brCompanyia = new BufferedReader(frCompanyia);
        //contem les linies del fitxer de companyies
        while(scCompanyia.hasNextLine()) {
            scCompanyia.nextLine();
            lineasCompanyia++;
        }
        scCompanyia.close();
        //declarem els arrays de string del fitxer de noms i del fitxer de companyies
        nomsCompanyia= new String[lineasCompanyia];

        //inicialitzem el array del fitxer de companyies
        while(brCompanyia.ready()) {
            String nom = brCompanyia.readLine();
            nomsCompanyia[i]=nom;
            i++;
        }
        brCompanyia.close();
        frCompanyia.close();
    }else {
        nomsCompanyia=new String[nombreRegistresGenerar-1];
        for (int j = 1, k =0; j < dadesGenerades[0].length; j++, k++) {
            nomsCompanyia[k]=dadesGenerades[posicioArrayCompanyies][j];
        }
        lineasCompanyia=nombreRegistresGenerar;
        companyiesJaGenerades=true;
    }
    //declarem els arrays per barrejar el fitxer de noms i de companyies, si es necessari
    String nomsAleatoris[]= new String[total], nomsRepetits[]= new String[total], NumerosNomsRepetits[]= new String[total], companyiesAleatoris[]= new String[total];
    //inicialitzem el array per barrejar el fitxer de noms

    if (!nomsJaGenerats) {
        for(i=0;i<total;i++) {
            aleatori=rnd.nextInt(lineasNom);
            nomsAleatoris[i]=noms[aleatori].toLowerCase();
            nomsRepetits[i]=nomsAleatoris[i];
        }           
    }else {
        for (int j = 0; j < noms.length; j++) {
            nomsAleatoris[j]=noms[j].toLowerCase();
        }           
    }

    //funcio per a poder canviar el nom dels que estan repetits
    for(i=0;i<total;i++) {
        for (int i2 = 0;i2<noms.length;i2++) {
            int fin=nomsRepetits.length-2;
            if (i2<fin&&nomsAleatoris[i].equals(nomsRepetits[i2+1])) {
                aleatori=rnd.nextInt(lineasNom);
                String temp=nomsAleatoris[i];
                NumerosNomsRepetits[i]=NumerosNomsRepetits[i]+1;
                nomsAleatoris[i]=temp+NumerosNomsRepetits[i];
            }
        }
    }
    if (!companyiesJaGenerades) {
        //inicialitzem el array per barrejar el fitxer de companyies si no demanen companyies
        for(i=0;i<total;i++) {
            aleatori=rnd.nextInt(lineasCompanyia);
            companyiesAleatoris[i]=nomsCompanyia[aleatori];
        }       
    }else {
        for (int j = 0; j < nomsCompanyia.length; j++) {
            companyiesAleatoris[j]=nomsCompanyia[j].toLowerCase();
        }
    }
    //inicialitzem el array de dominis per crear els dominis a partir de el nom de la companyia
    String dominis[]= new String[total];
    //inicialitzem el array que crea els dominis
    for (i=0;i<total;i++) {
        String[] parts = nomsCompanyia[i].split(" ");
        String domini="";
        for (int i2 = 0;i2<parts.length;i2++) {
            domini=domini+parts[i2];
        }
        dominis[i]=domini.toLowerCase();
    }
    //declarem el array per crear els emails
    String emails[]= new String[total];
    //inicialitzem el array per crear els emails
    //aquest if es per saver si no hi ha un domini solicitat
    if (dominiDemanat.isEmpty()) {
        for (i=0;i<total;i++) {
            emails[i]=nomsAleatoris[i]+"@"+dominis[i]+extensio;
        }
    }
    //aquest else es per saver si hi ha un domini solicitat
    else {
        for (i=0;i<total;i++) {
            emails[i]=nomsAleatoris[i]+"@"+dominiDemanat+extensio;
        }
    }
    //Emplenem amb els emails l'array de control
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (i=0;i<emails.length;i++) {
        dadesGenerades[campFinal][i+1]=emails[i];
    }

}

//ID 14
public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
    // TODO Auto-generated method stub
    int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        String ipFinal="";
        part1=r.nextInt(256);
        part2=r.nextInt(256);
        part3=r.nextInt(256);
        part4=r.nextInt(256);
        ipFinal=part1+"."+part2+"."+part3+"."+part4;
        dadesGenerades[campFinal][j]=ipFinal;
    }
}

//ID 15
public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
    // TODO Auto-generated method stub
    char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
    dadesGenerades[campFinal][0]=lineaSeparat[1];   
    for (int j = 1; j < dadesGenerades[campFinal].length && error==false; j++) {
        String passw="";//Declarem la variable on anirà la nostra password
        int i=0,majMin=3,num, posicio=0;
        char lletra=' '; //Declarem una variable per agafar una lletra quan ens la demanin
        while(i<Integer.parseInt(lineaSeparat[7])) {
            if(lineaSeparat[2].equals("Si") && i<Integer.parseInt(lineaSeparat[7])) { //Si hi ha lletres comprovarem si ha indicat majuscules o minuscules
                if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No") && i<Integer.parseInt(lineaSeparat[7])) {//Si no ha indicat cap de les dues, utilitzarem la variable majMin per a fer un aleatori y que agafi qualsevol de les dues
                    majMin=r.nextInt(2)+1;
                }
                if((lineaSeparat[4].equals("Si") || majMin==1) && i<Integer.parseInt(lineaSeparat[7])) {
                    lletra=(char)(r.nextInt(26)+'A');
                    passw=passw+lletra;
                    i++;
                }
                if((lineaSeparat[5].equals("Si") || majMin==2) && i<Integer.parseInt(lineaSeparat[7])) {
                    lletra=(char)(r.nextInt(26)+'a');
                    passw=passw+lletra;
                    i++;
                }
            }
            else if(lineaSeparat[2].equals("No") && (lineaSeparat[5].equals("Si") || lineaSeparat[4].equals("Si"))) { //Si indica majuscules o minuscules pero no lletres serà un error
                System.out.println("Error Password, lletres no y maj o min si");
                error=true;
                break;
            }
            if (lineaSeparat[3].equals("Si")&& i<Integer.parseInt(lineaSeparat[7])) { //farem un random per els numeros
                num=r.nextInt(10); //El 10 no estarà inclos
                passw=passw+num;
                i++;
            }
            if (lineaSeparat[6].equals("Si")&& i<Integer.parseInt(lineaSeparat[7])) {
                posicio=r.nextInt(13);
                passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                i++;
            }   
        }
        dadesGenerades[campFinal][j]=passw;
    }
    return error;
}

//ID 16
public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
    // TODO Auto-generated method stub
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    int anyMax = 2023, anyMin = 1900, dia, mes, any;
    if (lineaSeparat.length==3) {
        anyMin=Integer.parseInt(lineaSeparat[2]);
        if(Integer.parseInt(lineaSeparat[2])<0)
        {
            error=true;
            System.out.println("Error numero de camps Dates (Minim)");
        }
    }else if (lineaSeparat.length==4) {
        anyMin=Integer.parseInt(lineaSeparat[2]);
        anyMax=Integer.parseInt(lineaSeparat[3]);
        if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
        {
            error=true;
            System.out.println("Error numero de camps Dates (Minim o Maxim)");
        }
    }
    //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
    int interval = anyMax-anyMin+1;
    //Si l'any minim es mes gran que l'any maxim, donarà un error

    for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
        if(anyMin>anyMax) {
            System.out.println("Error numero maxim mes petit que minim (Date)");
            error=true;
            break;
        }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=any+"-"+mes+"-"+dia;
    }
    return error;
}

//ID 17
public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
    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]=lineaSeparat[1];
    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;  
    }
    }

//ID 18
public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
    // TODO Auto-generated method stub
    //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"};
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (int j = 1; j < dadesGenerades[campFinal].length; j++){
        String dni="";
        int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
        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;
    }
}

//ID 19
public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
    int inici=0;
    if(lineaSeparat.length==3) {
        inici=Integer.parseInt(lineaSeparat[2]);
    }
    dadesGenerades[campFinal][0]=lineaSeparat[1];
    for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
        dadesGenerades[campFinal][i]=String.valueOf(inici);
        inici++;
    }
}

//SQL Crear taula
public static String sql(String[] linies, String[] liniesNoms) {
    //declarem un array que contindra totes les linies del script de creacio de taula
    String[] sqlSeparat=new String[linies.length+2];
    //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
    int i=0;
    for (int j = 0;j<sqlSeparat.length;j++) {
        //comencem ha fer el inici de script
        if(j==0) {
            sqlSeparat[j]="CREATE TABLE dades (";
        }
        //fem el final del script
        else if(j==sqlSeparat.length-1) {
            sqlSeparat[j]=");";
        }
        //fem el contingut del mitg del script
        else {
            if (linies[i].equals("1")){
                sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
            }
            else if(linies[i].equals("2")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
            }
            else if(linies[i].equals("3")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
            }
            else if(linies[i].equals("4")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (200)" ;
            }
            else if(linies[i].equals("5")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
            }
            else if(linies[i].equals("6")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
            }
            else if(linies[i].equals("7")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (200)" ;
            }
            else if(linies[i].equals("8")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
            }
            else if(linies[i].equals("9")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
            }
            else if(linies[i].equals("10")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (150)" ;
            }
            else if(linies[i].equals("11")) {
                sqlSeparat[j]=liniesNoms[i]+" Boolean" ;
            }
            else if(linies[i].equals("12")) {
                sqlSeparat[j]=liniesNoms[i]+" Double" ;
            }
            else if(linies[i].equals("13")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (150)" ;
            }
            else if(linies[i].equals("14")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;           
            }
            else if(linies[i].equals("15")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (500)" ;
            }
            else if(linies[i].equals("16")) {
                sqlSeparat[j]=liniesNoms[i]+" Date" ;
            }
            else if(linies[i].equals("17")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (25)" ;
            }
            else if(linies[i].equals("18")) {
                sqlSeparat[j]=liniesNoms[i]+" Varchar (10)" ;
            }
            else if(linies[i].equals("19")) {
                sqlSeparat[j]=liniesNoms[i]+" integer (5)" ;
            }
            i++;
        }
    }
    //fem aquest bucle per inserir el contingut del script a una variable string
    for (
            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;
}

//SQL Insert into

public static String sqlDades(String dadesGenerades[][],String[] linies, String[] liniesNoms) {
    //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=0;i<linies.length;i++) {
        if (i<linies.length-1) {
            sql=sql+liniesNoms[i]+", ";
        }
        else if (i==linies.length-1){
            sql=sql+liniesNoms[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 (linies[k2].equals("1")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("2")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("3")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("4")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("5")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("6")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("7")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("8")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("9")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("10")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("13")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("14")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("15")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("16")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("17")) {
                sql=sql+"\""+dadesGenerades[k2][k]+"\"";
            }
            else if (linies[k2].equals("18")) {
                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;
}

}
eliasporter commented 1 year ago

Main final classe 2-11-22 Afegir canvis a aquest!!

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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.Arrays;
import java.util.Comparator;
import java.util.Random;
import java.util.Scanner;

public class ProvesMain21122 {
    public static void main(String[] args) {
        Random r=new Random();
        /* La primera dimensio de l'array bidimensional dadesGenerades, contindrà les etiquetes dels camps a generar, i la segona els registres a generar.
         * A sEntradaOriginal, guardem l'ordre d'entrada del fitxer original, a sEntradaOrdenat, els camps ordenats per ID
         */
        String dadesGenerades[][] = new String[1][1], sEntradaOrdenat[] = new String[1], sEntradaOriginal[]=new String[1]; 
        int nombreRegistresGenerar=0, campFinal=0, i=0;
        int[] idEntradaOriginal = new int [1], idEntradaOrdenat = new int [1];

        try {
            File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_amb_opcions.txt");
            FileReader fr = new FileReader(entrada);
            BufferedReader br = new BufferedReader(fr);
            boolean error=false, generat=false;
            int j=0, campsGenerar=0, nlinia=0,x=0;
            String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];
            linea1=br.readLine();
            if(linea1==null){
                System.out.println("Arxiu vuit");
                error=true;
            }else {
                //Separarem els camps per ";"
                linea1Separat=linea1.split(";");
            }
            br.close();
            fr.close();
            //Ordenarem el fitxer d'entrada per a seguir la nostra estrategia, tot i que despres al fitxer de sortida sortirà igual que a l'entrada
            FileReader fr1 = new FileReader(entrada);
            BufferedReader br1 = new BufferedReader(fr1);
            //Escriurem un arxiu amb l'entrada ordenada
            FileWriter fw1 = new FileWriter("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
            linea1=br1.readLine();
            while((linea=br1.readLine()) != null) {
                //contem les linies a generar
                i++;
            }
            fr1.close();
            br1.close();
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);
            sEntradaOriginal = new String[i];
            sEntradaOrdenat = new String [i];
            idEntradaOrdenat = new int [i];
            idEntradaOriginal = new int [i];
            i=0;
            linea1=br1.readLine();
            fw1.write(linea1+"\n");
            fw1.flush();
            while((linea=br1.readLine()) != null) {
                lineaSeparat=linea.split(";");
                //copiem id de cada linea en un array
                sEntradaOriginal[i]=linea;
                idEntradaOriginal[i]=Integer.parseInt(lineaSeparat[0]);
                idEntradaOrdenat[i]=Integer.parseInt(lineaSeparat[0]);
                sEntradaOrdenat[i]=linea;
                i++;
            }
            fr1.close();
            br1.close();
            //ordenem l'array
            boolean ordenat=false;
            int contaIntercambis=0;
            //Utilitzem un bucle niuat, que sortira quan estigui ordenat
            while(!ordenat){
                for(int l=0;l<idEntradaOrdenat.length-1;l++){
                    if (idEntradaOrdenat[l]>idEntradaOrdenat[l+1]){
                        //Intercambiem valors
                        int aux=idEntradaOrdenat[l];
                        String sAux=sEntradaOrdenat[l];
                        idEntradaOrdenat[l]=idEntradaOrdenat[l+1];
                        sEntradaOrdenat[l]=sEntradaOrdenat[l+1];
                        idEntradaOrdenat[l+1]=aux;
                        sEntradaOrdenat[l+1]=sAux;
                        //Indiquem que hi ha canvi
                        contaIntercambis++;
                    }
                }
                //Si no hi ha intercambis, es que esta ordenat.
                if (contaIntercambis==0){
                    ordenat=true;
                }
                //Inicialitzem la variable de nou per a que comçi a contar de nou
                contaIntercambis=0;
            }
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);
            linea1=br1.readLine();
            for (int k = 0; k < sEntradaOrdenat.length; k++) {
                fw1.write(sEntradaOrdenat[k]+"\n");
                System.out.println(sEntradaOrdenat[k]);
            }
            fw1.flush();

            entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
            fr = new FileReader(entrada);
            br = new BufferedReader(fr);

            //SQL
            linea1=br.readLine();
            linea1Separat=linea1.split(";");
            while(br.ready() && error==false){ //mentres hi hagi lineas
                if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                    System.out.println("Primera linea invalida");
                    error=true;
                    break;
                }
                //Definim cuantes dades haurem de generar
                nombreRegistresGenerar=Integer.parseInt(linea1Separat[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();
                lineaSeparat=linea.split(";");
                if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                    error=true;
                    System.out.println("ID invalid o nom invalid");
                    break;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                    }
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("11")) {
                    Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("12")) {
                    if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Numeros");
                        error=true;
                        break;
                    }
                    error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("13")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Email");
                        error=true;
                        break;
                    }
                    Email(dadesGenerades, campFinal, lineaSeparat, idEntradaOrdenat, nombreRegistresGenerar);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("14")) {
                    IP4(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("15")) {
                    if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Password");
                        error=true;
                        break;
                    }
                    error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("16")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Dates");
                        error=true;
                        break;
                    }
                    error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("17")) {
                    IBAN(dadesGenerades, campFinal,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("18")) {
                    DNI(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("19")) {
                    if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Autonumeric");
                        error=true;
                        break;
                    }
                    Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                    campFinal++;
                }
            }

            /*if (linea1Separado[0].equals("XML"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else if (linea1Separado[0].equals("SQL"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else //Si no hi ha cap dels dos error
        {
            error=true;
            System.out.println("ERROR");
        }*/

            if(error==true) {
                System.out.println("ERROR");
            }
            else {
                //Mostra els camps per test
                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        System.out.print(dadesGenerades[k][k2]+" ");
                    }
                    System.out.println();
                }   
                if (linea1Separat[0].equals("XML"))
                {
                    File sortida2 = new File(linea1Separat[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 (linea1Separat[0].equals("SQL"))
                {
                    //creem un fitxer de sortida
                    File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\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(idEntradaOrdenat, dadesGenerades);
                    //recollim el script de insercio de les dades a la taula
                    String sql2=sqlDades(dadesGenerades,idEntradaOrdenat);
                    //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());
                    }
                }
                System.out.println("Ha sortit tot be!!");
            }

            br.close(); //S'han de tencar
            fr.close();
        } catch (Exception pasanCosas) {
            pasanCosas.printStackTrace();}
    }

    //ID 11
    public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
        // TODO Auto-generated method stub
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        String aleatori; //variable on es guarda boolean
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
            if (numeroAleatori==0){ //si es 0, sortira boolean false
                aleatori="false";
            }
            else {
                aleatori="true"; //i si surt 1, sortira boolean true
            }
            dadesGenerades[campFinal][j]=aleatori;
        }
    }

    //ID 12
    public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
        int decimals=0, minim=0, maxim=1000;
        if(lineaSeparat.length>2) {
            if (lineaSeparat.length==3) {
                decimals=Integer.parseInt(lineaSeparat[2]);
            }else if (lineaSeparat.length==4) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
            }else if (lineaSeparat.length==5) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
                maxim=Integer.parseInt(lineaSeparat[4]);
            }
            if(Integer.parseInt(lineaSeparat[2])<0) {
                System.out.println("Error decimals (Numeros)");
                error=true;
            }
        }

        int maxim2 = maxim-minim;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(maxim<minim)
            {
                System.out.println("Error numero maxim mes petit que minim (Numeros)");
                error=true;
                break;
            }
            double generat=r.nextDouble(maxim2)+minim;
            BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
            dadesGenerades[campFinal][j]=redondeado.toString();
        }   
        return error;
    }

    //ID 13
    public static void Email(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, int idEntradaOrdenat[], int nombreRegistresGenerar) throws IOException {
        Random rnd= new Random();
        boolean bNoms=false, bCompanyies=false, nomsJaGenerats=false, companyiesJaGenerades=false;
        int lineasNom = 0, lineasCompanyia = 0, i=0, aleatori=0, total=nombreRegistresGenerar-1, posicioArrayCompanyies=0, posicioArrayNoms=0;
        String extensio=".com", dominiDemanat="", noms[], nomsCompanyia[];

        if (lineaSeparat.length==3) {
            dominiDemanat=lineaSeparat[2];
        }
        if (lineaSeparat.length==4) {
            dominiDemanat=lineaSeparat[2];
            extensio=lineaSeparat[3];
        }

        for (int j = 0; j < dadesGenerades.length; j++) {
            if (idEntradaOrdenat[j]==1) {
                posicioArrayNoms=j;
                bNoms=true;
            }
            if (idEntradaOrdenat[j]==10) {
                posicioArrayCompanyies=j;
                bCompanyies=true;
            }
        }
        if (!bNoms) {
            //aqui declarem i inicialitzem el fitxer de noms
            File filenom = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
            Scanner scnom = new Scanner(filenom);
            FileReader frnom = new FileReader(filenom);
            BufferedReader brnom = new BufferedReader(frnom);
            //contem les linies del fitxer de noms
            while(scnom.hasNextLine()) {
                scnom.nextLine();
                lineasNom++;
            }
            scnom.close();
            noms= new String[lineasNom];
            //inicialitzem i emplenem l'array des del fitxer de noms
            while(brnom.ready()) {
                String nom = brnom.readLine();
                noms[i]=nom;
                i++;
            }
            brnom.close();
            frnom.close();
            i=0;
        }else {
            noms=new String[total];
            for (int j = 1, k =0; k < noms.length; j++, k++) {
                noms[k]=dadesGenerades[posicioArrayNoms][j];
            }
            lineasNom=nombreRegistresGenerar;
            nomsJaGenerats=true;
        }
        if (!bCompanyies) {
            //aqui declarem i inicialitzem el fitxer de companyies
            File fileCompanyia = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
            Scanner scCompanyia = new Scanner(fileCompanyia);
            FileReader frCompanyia = new FileReader(fileCompanyia);
            BufferedReader brCompanyia = new BufferedReader(frCompanyia);
            //contem les linies del fitxer de companyies
            while(scCompanyia.hasNextLine()) {
                scCompanyia.nextLine();
                lineasCompanyia++;
            }
            scCompanyia.close();
            //declarem els arrays de string del fitxer de noms i del fitxer de companyies
            nomsCompanyia= new String[lineasCompanyia];

            //inicialitzem el array del fitxer de companyies
            while(brCompanyia.ready()) {
                String nom = brCompanyia.readLine();
                nomsCompanyia[i]=nom;
                i++;
            }
            brCompanyia.close();
            frCompanyia.close();
        }else {
            nomsCompanyia=new String[nombreRegistresGenerar-1];
            for (int j = 1, k =0; j < dadesGenerades[0].length; j++, k++) {
                nomsCompanyia[k]=dadesGenerades[posicioArrayCompanyies][j];
            }
            lineasCompanyia=nombreRegistresGenerar;
            companyiesJaGenerades=true;
        }
        //declarem els arrays per barrejar el fitxer de noms i de companyies, si es necessari
        String nomsAleatoris[]= new String[total], nomsRepetits[]= new String[total], NumerosNomsRepetits[]= new String[total], companyiesAleatoris[]= new String[total];
        //inicialitzem el array per barrejar el fitxer de noms

        if (!nomsJaGenerats) {
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasNom);
                nomsAleatoris[i]=noms[aleatori].toLowerCase();
                nomsRepetits[i]=nomsAleatoris[i];
            }           
        }else {
            for (int j = 0; j < noms.length; j++) {
                nomsAleatoris[j]=noms[j].toLowerCase();
            }           
        }

        //funcio per a poder canviar el nom dels que estan repetits
        for(i=0;i<total;i++) {
            for (int i2 = 0;i2<noms.length;i2++) {
                int fin=nomsRepetits.length-2;
                if (i2<fin&&nomsAleatoris[i].equals(nomsRepetits[i2+1])) {
                    aleatori=rnd.nextInt(lineasNom);
                    String temp=nomsAleatoris[i];
                    NumerosNomsRepetits[i]=NumerosNomsRepetits[i]+1;
                    nomsAleatoris[i]=temp+NumerosNomsRepetits[i];
                }
            }
        }
        if (!companyiesJaGenerades) {
            //inicialitzem el array per barrejar el fitxer de companyies si no demanen companyies
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasCompanyia);
                companyiesAleatoris[i]=nomsCompanyia[aleatori];
            }       
        }else {
            for (int j = 0; j < nomsCompanyia.length; j++) {
                companyiesAleatoris[j]=nomsCompanyia[j].toLowerCase();
            }
        }
        //inicialitzem el array de dominis per crear els dominis a partir de el nom de la companyia
        String dominis[]= new String[total];
        //inicialitzem el array que crea els dominis
        for (i=0;i<total;i++) {
            String[] parts = nomsCompanyia[i].split(" ");
            String domini="";
            for (int i2 = 0;i2<parts.length;i2++) {
                domini=domini+parts[i2];
            }
            dominis[i]=domini.toLowerCase();
        }
        //declarem el array per crear els emails
        String emails[]= new String[total];
        //inicialitzem el array per crear els emails
        //aquest if es per saver si no hi ha un domini solicitat
        if (dominiDemanat.isEmpty()) {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominis[i]+extensio;
            }
        }
        //aquest else es per saver si hi ha un domini solicitat
        else {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominiDemanat+extensio;
            }
        }
        //Emplenem amb els emails l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (i=0;i<emails.length;i++) {
            dadesGenerades[campFinal][i+1]=emails[i];
        }

    }

    //ID 14
    public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            String ipFinal="";
            part1=r.nextInt(256);
            part2=r.nextInt(256);
            part3=r.nextInt(256);
            part4=r.nextInt(256);
            ipFinal=part1+"."+part2+"."+part3+"."+part4;
            dadesGenerades[campFinal][j]=ipFinal;
        }
    }

    //ID 15
    public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
        String opcionsGeneracio[] = new String[1], majMin[] = new String[1], passw="";
        int i=0, selector=0, num=0, posicio=0;
        char lletra;
        boolean lletres = false, numeros = false, majuscules = false, minuscules = false, simbols = false;
        char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
        //emplenem el primer camp de l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];

        //Mirem les opcions demanades
        if (lineaSeparat[2].equals("Si")) {
            lletres = true;
            if (lineaSeparat[4].equals("Si")) {
                majuscules = true;
            }
            if (lineaSeparat[5].equals("Si")){
                minuscules = true;
            }
            if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No")) {
                majuscules = minuscules = true;
            }
        }else if (lineaSeparat[4].equals("Si") || lineaSeparat[5].equals("Si")){
            System.out.println("Error en el camp Password, lletres no seleccionades y maj o min si");
            error = true;
            return error;
        }
        if (lineaSeparat[3].equals("Si")) {
            numeros = true;
        }
        if (lineaSeparat[6].equals("Si")) {
            simbols = true;
        }

        //Segons les opcions demanades, generem diferents arrays de selecció
        if (lletres && numeros && simbols) {
            opcionsGeneracio = new String[]{"lletres", "numeros", "simbols"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros && simbols) {
            opcionsGeneracio = new String[]{"numeros", "simbols"};      
        }else if (lletres && simbols) {
            opcionsGeneracio = new String[]{"lletres", "simbols"};      
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres && numeros) {
            opcionsGeneracio = new String[]{"lletres", "numeros"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres) {
            opcionsGeneracio = new String[]{"lletres"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros) {
            opcionsGeneracio = new String[]{"numeros"};
        }else {
            opcionsGeneracio = new String[]{"simbols"};         
        }
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            passw="";
            i=0;
            while(i<Integer.parseInt(lineaSeparat[7])) {
                switch (opcionsGeneracio[r.nextInt(opcionsGeneracio.length)]) {
                case "lletres":
                    switch (majMin[r.nextInt(majMin.length)]) {
                    case "majuscules":
                        lletra=(char)(r.nextInt(26)+'A');
                        passw+=lletra;
                        i++;
                        break;
                    case "minuscules":
                        lletra=(char)(r.nextInt(26)+'a');
                        passw+=lletra;
                        i++;
                        break;
                    }
                case "numeros": 
                    num=r.nextInt(10); //El 10 no estarà inclos
                    passw=passw+num;
                    i++;
                    break;
                case "simbols":
                    posicio=r.nextInt(13);
                    passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                    i++;
                    break;
                }
            }
            dadesGenerades[campFinal][j]=passw;
        }
        return error;
    }

    //ID 16
    public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        int anyMax = 2023, anyMin = 1900, dia, mes, any;
        if (lineaSeparat.length==3) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            if(Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim)");
            }
        }else if (lineaSeparat.length==4) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            anyMax=Integer.parseInt(lineaSeparat[3]);
            if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim o Maxim)");
            }
        }
        //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
        int interval = anyMax-anyMin+1;
        //Si l'any minim es mes gran que l'any maxim, donarà un error

        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(anyMin>anyMax) {
                System.out.println("Error numero maxim mes petit que minim (Date)");
                error=true;
                break;
            }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=any+"-"+mes+"-"+dia;
        }
        return error;
    }

    //ID 17
    public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
        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]=lineaSeparat[1];
        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;  
        }
    }

    //ID 18
    public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        //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"};
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++){
            String dni="";
            int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
            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;
        }
    }

    //ID 19
    public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
        int inici=0;
        if(lineaSeparat.length==3) {
            inici=Integer.parseInt(lineaSeparat[2]);
        }
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
            dadesGenerades[campFinal][i]=String.valueOf(inici);
            inici++;
        }
    }

    //SQL Crear taula
    public static String sql(int[] linies, String[][] liniesNoms) {
        //declarem un array que contindra totes les linies del script de creacio de taula
        String[] sqlSeparat=new String[linies.length+2];
        //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
        int i=0;
        for (int j = 0;j<sqlSeparat.length;j++) {
            //comencem ha fer el inici de script
            if(j==0) {
                sqlSeparat[j]="CREATE TABLE dades (";
            }
            //fem el final del script
            else if(j==sqlSeparat.length-1) {
                sqlSeparat[j]=");";
            }
            //fem el contingut del mitg del script
            else {
                if (linies[i]==1){
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
                }
                else if(linies[i]==2) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
                }
                else if(linies[i]==3) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==4) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (200)" ;
                }
                else if(linies[i]==5) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==6) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==7) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (200)" ;
                }
                else if(linies[i]==8) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==9) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
                }
                else if(linies[i]==10) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (150)" ;
                }
                else if(linies[i]==11) {
                    sqlSeparat[j]=liniesNoms[i]+" Boolean" ;
                }
                else if(linies[i]==12) {
                    sqlSeparat[j]=liniesNoms[i]+" Double" ;
                }
                else if(linies[i]==13) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (150)" ;
                }
                else if(linies[i]==14) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;           
                }
                else if(linies[i]==15) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (500)" ;
                }
                else if(linies[i]==16) {
                    sqlSeparat[j]=liniesNoms[i]+" Date" ;
                }
                else if(linies[i]==17) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (25)" ;
                }
                else if(linies[i]==18) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (10)" ;
                }
                else if(linies[i]==19) {
                    sqlSeparat[j]=liniesNoms[i]+" integer (5)" ;
                }
                i++;
            }
        }
        //fem aquest bucle per inserir el contingut del script a una variable string
        for (
                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;
    }

    //SQL Insert into

    public static String sqlDades(String dadesGenerades[][], int[] 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=0;i<linies.length;i++) {
            if (i<linies.length-1) {
                sql=sql+dadesGenerades[i][0]+", ";
            }
            else if (i==linies.length-1){
                sql=sql+dadesGenerades[i][0];
            }
        }
        //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 (linies[k2]==1) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==2) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==3) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==4) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==5) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==6) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==7) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==8) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==9) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==10) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==13) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==14) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==15) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==16) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==17) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==18) {
                    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;
    }

}
Formeinstein13 commented 1 year ago
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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.Arrays;
import java.util.Comparator;
import java.util.Random;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class MainProjecte2 {
    public static void main(String[] args) {
        Random r=new Random();
        /* La primera dimensio de l'array bidimensional dadesGenerades, contindrà les etiquetes dels camps a generar, i la segona els registres a generar.
         * A sEntradaOriginal, guardem l'ordre d'entrada del fitxer original, a sEntradaOrdenat, els camps ordenats per ID
         */
        String dadesGenerades[][] = new String[1][1], sEntradaOrdenat[] = new String[1], sEntradaOriginal[]=new String[1]; 
        int nombreRegistresGenerar=0, campFinal=0, i=0;
        int[] idEntradaOriginal = new int [1], idEntradaOrdenat = new int [1];

        try {
            File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_amb_opcions.txt");
            FileReader fr = new FileReader(entrada);
            BufferedReader br = new BufferedReader(fr);
            boolean error=false, generat=false;
            int j=0, campsGenerar=0, nlinia=0,x=0;
            String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];
            linea1=br.readLine();
            if(linea1==null){
                System.out.println("Arxiu vuit");
                error=true;
            }else {
                //Separarem els camps per ";"
                linea1Separat=linea1.split(";");
            }
            br.close();
            fr.close();
            //Ordenarem el fitxer d'entrada per a seguir la nostra estrategia, tot i que despres al fitxer de sortida sortirà igual que a l'entrada
            FileReader fr1 = new FileReader(entrada);
            BufferedReader br1 = new BufferedReader(fr1);
            //Escriurem un arxiu amb l'entrada ordenada
            FileWriter fw1 = new FileWriter("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
            linea1=br1.readLine();
            while((linea=br1.readLine()) != null) {
                //contem les linies a generar
                i++;
            }
            fr1.close();
            br1.close();
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);
            sEntradaOriginal = new String[i];
            sEntradaOrdenat = new String [i];
            idEntradaOrdenat = new int [i];
            idEntradaOriginal = new int [i];
            i=0;
            linea1=br1.readLine();
            fw1.write(linea1+"\n");
            fw1.flush();
            while((linea=br1.readLine()) != null) {
                lineaSeparat=linea.split(";");
                //copiem id de cada linea en un array
                sEntradaOriginal[i]=linea;
                idEntradaOriginal[i]=Integer.parseInt(lineaSeparat[0]);
                idEntradaOrdenat[i]=Integer.parseInt(lineaSeparat[0]);
                sEntradaOrdenat[i]=linea;
                i++;
            }
            fr1.close();
            br1.close();
            //ordenem l'array
            boolean ordenat=false;
            int contaIntercambis=0;
            //Utilitzem un bucle niuat, que sortira quan estigui ordenat
            while(!ordenat){
                for(int l=0;l<idEntradaOrdenat.length-1;l++){
                    if (idEntradaOrdenat[l]>idEntradaOrdenat[l+1]){
                        //Intercambiem valors
                        int aux=idEntradaOrdenat[l];
                        String sAux=sEntradaOrdenat[l];
                        idEntradaOrdenat[l]=idEntradaOrdenat[l+1];
                        sEntradaOrdenat[l]=sEntradaOrdenat[l+1];
                        idEntradaOrdenat[l+1]=aux;
                        sEntradaOrdenat[l+1]=sAux;
                        //Indiquem que hi ha canvi
                        contaIntercambis++;
                    }
                }
                //Si no hi ha intercambis, es que esta ordenat.
                if (contaIntercambis==0){
                    ordenat=true;
                }
                //Inicialitzem la variable de nou per a que comçi a contar de nou
                contaIntercambis=0;
            }
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);
            linea1=br1.readLine();
            for (int k = 0; k < sEntradaOrdenat.length; k++) {
                fw1.write(sEntradaOrdenat[k]+"\n");
                System.out.println(sEntradaOrdenat[k]);
            }
            fw1.flush();

            entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
            fr = new FileReader(entrada);
            br = new BufferedReader(fr);

            //SQL
            linea1=br.readLine();
            linea1Separat=linea1.split(";");
            while(br.ready() && error==false){ //mentres hi hagi lineas
                if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                    System.out.println("Primera linea invalida");
                    error=true;
                    break;
                }
                //Definim cuantes dades haurem de generar
                nombreRegistresGenerar=Integer.parseInt(linea1Separat[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();
                lineaSeparat=linea.split(";");
                if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                    error=true;
                    System.out.println("ID invalid o nom invalid");
                    break;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                    }
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("11")) {
                    Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("12")) {
                    if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Numeros");
                        error=true;
                        break;
                    }
                    error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("13")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Email");
                        error=true;
                        break;
                    }
                    Email(dadesGenerades, campFinal, lineaSeparat, idEntradaOrdenat, nombreRegistresGenerar);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("14")) {
                    IP4(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("15")) {
                    if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Password");
                        error=true;
                        break;
                    }
                    error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("16")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Dates");
                        error=true;
                        break;
                    }
                    error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("17")) {
                    IBAN(dadesGenerades, campFinal,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("18")) {
                    DNI(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("19")) {
                    if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Autonumeric");
                        error=true;
                        break;
                    }
                    Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                    campFinal++;
                }
            }

            /*if (linea1Separado[0].equals("XML"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.xml");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else if (linea1Separado[0].equals("SQL"))
        {
            File sortida = new File(linea1Separado[1]+"fitxer_sortida.sql");
            FileWriter fw = new FileWriter(sortida);
            BufferedWriter bw = new BufferedWriter(fw);
            //Aqui iria la funcion escribir fixero linea por linea
        }
        else //Si no hi ha cap dels dos error
        {
            error=true;
            System.out.println("ERROR");
        }*/

            if(error==true) {
                System.out.println("ERROR");
            }
            else {
                //Mostra els camps per test
                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        System.out.print(dadesGenerades[k][k2]+" ");
                    }
                    System.out.println();
                }   
                if (linea1Separat[0].equals("XML"))
                {
                    //si el firxer de sortida es XML executarem aquesta funcio per crear el archiu XML corresponent
                    //aquesta bariable agafa tot el fitxer del xml
                    String XML="";
                    //aquesta agafa tot el fitxer xml per afegir un tros de codi
                    String XMLPle="";
                    //senyalem l'entrada i la sortida
                    File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xsd");
                    File entrada2=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xml");
                    FileReader frx = new FileReader(entrada2);
                    BufferedReader brx = new BufferedReader(frx);
                    //executem la funcio que genera el XML
                    xml(dadesGenerades,nombreRegistresGenerar);
                    File sortida2=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xml");
                    //aquest bucle agafa tot el fitxer XML i el posa en un string
                    while(brx.ready()) {
                        XML = brx.readLine();
                    }
                    //separem el artxiu xml per ">"
                    String[] Xml=XML.split(">");
                    //fem aquest bucle per implementar la linea de codi que li falta
                    for(i=0;i<Xml.length;i++) {
                        if (i==1) {
                            XMLPle=XMLPle+"<?xml-stylesheet type=\"text/xsl\" href=\"Fitxer_sortida.xsl\"?>"+Xml[i]+" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"file:///C:/DAM2/PROJECTE_1/Fitxers_sortida/Fitxer_sortida.xsd\">";
                        }
                        else {
                            XMLPle=XMLPle+Xml[i]+">";
                        }
                    }
                    //reescribim el fitxer XML
                    try (FileWriter escriptor1 =new FileWriter(sortida2);) {
                        escriptor1.append(XMLPle).write('\n');
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                    //executem la funcio per generar el XSD i passem el XSD a un String
                    String text=xsd(dadesGenerades);
                    //Creem el artxiu XSD amb el String fet anteriorment
                    try (FileWriter escriptor2 =new FileWriter(sortida);) {
                        escriptor2.append(text).write('\n');
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                    //creem un arxiu de sortida per el xslt
                    File sortida3=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xsl");
                    //agafem el contingut del que tindra el fitxer xslt i el bolquem al fitxer de sortida
                    String xslt=xslt(dadesGenerades);
                    try (FileWriter escriptor3 =new FileWriter(sortida3);) {
                        escriptor3.append(xslt).write('\n');
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                }
                else if (linea1Separat[0].equals("SQL"))
                {
                    //creem un fitxer de sortida
                    File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\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(idEntradaOrdenat, dadesGenerades);
                    //recollim el script de insercio de les dades a la taula
                    String sql2=sqlDades(dadesGenerades,idEntradaOrdenat);
                    //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());
                    }
                }
                System.out.println("Ha sortit tot be!!");
            }

            br.close(); //S'han de tencar
            fr.close();
        } catch (Exception pasanCosas) {
            pasanCosas.printStackTrace();}
    }

    //ID 11
    public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
        // TODO Auto-generated method stub
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        String aleatori; //variable on es guarda boolean
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
            if (numeroAleatori==0){ //si es 0, sortira boolean false
                aleatori="false";
            }
            else {
                aleatori="true"; //i si surt 1, sortira boolean true
            }
            dadesGenerades[campFinal][j]=aleatori;
        }
    }

    //ID 12
    public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
        int decimals=0, minim=0, maxim=1000;
        if(lineaSeparat.length>2) {
            if (lineaSeparat.length==3) {
                decimals=Integer.parseInt(lineaSeparat[2]);
            }else if (lineaSeparat.length==4) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
            }else if (lineaSeparat.length==5) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
                maxim=Integer.parseInt(lineaSeparat[4]);
            }
            if(Integer.parseInt(lineaSeparat[2])<0) {
                System.out.println("Error decimals (Numeros)");
                error=true;
            }
        }

        int maxim2 = maxim-minim;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(maxim<minim)
            {
                System.out.println("Error numero maxim mes petit que minim (Numeros)");
                error=true;
                break;
            }
            double generat=r.nextDouble(maxim2)+minim;
            BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
            dadesGenerades[campFinal][j]=redondeado.toString();
        }   
        return error;
    }

    //ID 13
    public static void Email(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, int idEntradaOrdenat[], int nombreRegistresGenerar) throws IOException {
        Random rnd= new Random();
        boolean bNoms=false, bCompanyies=false, nomsJaGenerats=false, companyiesJaGenerades=false;
        int lineasNom = 0, lineasCompanyia = 0, i=0, aleatori=0, total=nombreRegistresGenerar-1, posicioArrayCompanyies=0, posicioArrayNoms=0;
        String extensio=".com", dominiDemanat="", noms[], nomsCompanyia[];

        if (lineaSeparat.length==3) {
            dominiDemanat=lineaSeparat[2];
        }
        if (lineaSeparat.length==4) {
            dominiDemanat=lineaSeparat[2];
            extensio=lineaSeparat[3];
        }

        for (int j = 0; j < dadesGenerades.length; j++) {
            if (idEntradaOrdenat[j]==1) {
                posicioArrayNoms=j;
                bNoms=true;
            }
            if (idEntradaOrdenat[j]==10) {
                posicioArrayCompanyies=j;
                bCompanyies=true;
            }
        }
        if (!bNoms) {
            //aqui declarem i inicialitzem el fitxer de noms
            File filenom = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
            Scanner scnom = new Scanner(filenom);
            FileReader frnom = new FileReader(filenom);
            BufferedReader brnom = new BufferedReader(frnom);
            //contem les linies del fitxer de noms
            while(scnom.hasNextLine()) {
                scnom.nextLine();
                lineasNom++;
            }
            scnom.close();
            noms= new String[lineasNom];
            //inicialitzem i emplenem l'array des del fitxer de noms
            while(brnom.ready()) {
                String nom = brnom.readLine();
                noms[i]=nom;
                i++;
            }
            brnom.close();
            frnom.close();
            i=0;
        }else {
            noms=new String[total];
            for (int j = 1, k =0; k < noms.length; j++, k++) {
                noms[k]=dadesGenerades[posicioArrayNoms][j];
            }
            lineasNom=nombreRegistresGenerar;
            nomsJaGenerats=true;
        }
        if (!bCompanyies) {
            //aqui declarem i inicialitzem el fitxer de companyies
            File fileCompanyia = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
            Scanner scCompanyia = new Scanner(fileCompanyia);
            FileReader frCompanyia = new FileReader(fileCompanyia);
            BufferedReader brCompanyia = new BufferedReader(frCompanyia);
            //contem les linies del fitxer de companyies
            while(scCompanyia.hasNextLine()) {
                scCompanyia.nextLine();
                lineasCompanyia++;
            }
            scCompanyia.close();
            //declarem els arrays de string del fitxer de noms i del fitxer de companyies
            nomsCompanyia= new String[lineasCompanyia];

            //inicialitzem el array del fitxer de companyies
            while(brCompanyia.ready()) {
                String nom = brCompanyia.readLine();
                nomsCompanyia[i]=nom;
                i++;
            }
            brCompanyia.close();
            frCompanyia.close();
        }else {
            nomsCompanyia=new String[nombreRegistresGenerar-1];
            for (int j = 1, k =0; j < dadesGenerades[0].length; j++, k++) {
                nomsCompanyia[k]=dadesGenerades[posicioArrayCompanyies][j];
            }
            lineasCompanyia=nombreRegistresGenerar;
            companyiesJaGenerades=true;
        }
        //declarem els arrays per barrejar el fitxer de noms i de companyies, si es necessari
        String nomsAleatoris[]= new String[total], nomsRepetits[]= new String[total], NumerosNomsRepetits[]= new String[total], companyiesAleatoris[]= new String[total];
        //inicialitzem el array per barrejar el fitxer de noms

        if (!nomsJaGenerats) {
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasNom);
                nomsAleatoris[i]=noms[aleatori].toLowerCase();
                nomsRepetits[i]=nomsAleatoris[i];
            }           
        }else {
            for (int j = 0; j < noms.length; j++) {
                nomsAleatoris[j]=noms[j].toLowerCase();
            }           
        }

        //funcio per a poder canviar el nom dels que estan repetits
        for(i=0;i<total;i++) {
            for (int i2 = 0;i2<noms.length;i2++) {
                int fin=nomsRepetits.length-2;
                if (i2<fin&&nomsAleatoris[i].equals(nomsRepetits[i2+1])) {
                    aleatori=rnd.nextInt(lineasNom);
                    String temp=nomsAleatoris[i];
                    NumerosNomsRepetits[i]=NumerosNomsRepetits[i]+1;
                    nomsAleatoris[i]=temp+NumerosNomsRepetits[i];
                }
            }
        }
        if (!companyiesJaGenerades) {
            //inicialitzem el array per barrejar el fitxer de companyies si no demanen companyies
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasCompanyia);
                companyiesAleatoris[i]=nomsCompanyia[aleatori];
            }       
        }else {
            for (int j = 0; j < nomsCompanyia.length; j++) {
                companyiesAleatoris[j]=nomsCompanyia[j].toLowerCase();
            }
        }
        //inicialitzem el array de dominis per crear els dominis a partir de el nom de la companyia
        String dominis[]= new String[total];
        //inicialitzem el array que crea els dominis
        for (i=0;i<total;i++) {
            String[] parts = nomsCompanyia[i].split(" ");
            String domini="";
            for (int i2 = 0;i2<parts.length;i2++) {
                domini=domini+parts[i2];
            }
            dominis[i]=domini.toLowerCase();
        }
        //declarem el array per crear els emails
        String emails[]= new String[total];
        //inicialitzem el array per crear els emails
        //aquest if es per saver si no hi ha un domini solicitat
        if (dominiDemanat.isEmpty()) {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominis[i]+extensio;
            }
        }
        //aquest else es per saver si hi ha un domini solicitat
        else {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominiDemanat+extensio;
            }
        }
        //Emplenem amb els emails l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (i=0;i<emails.length;i++) {
            dadesGenerades[campFinal][i+1]=emails[i];
        }

    }

    //ID 14
    public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            String ipFinal="";
            part1=r.nextInt(256);
            part2=r.nextInt(256);
            part3=r.nextInt(256);
            part4=r.nextInt(256);
            ipFinal=part1+"."+part2+"."+part3+"."+part4;
            dadesGenerades[campFinal][j]=ipFinal;
        }
    }

    //ID 15
    public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
        String opcionsGeneracio[] = new String[1], majMin[] = new String[1], passw="";
        int i=0, selector=0, num=0, posicio=0;
        char lletra;
        boolean lletres = false, numeros = false, majuscules = false, minuscules = false, simbols = false;
        char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
        //emplenem el primer camp de l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];

        //Mirem les opcions demanades
        if (lineaSeparat[2].equals("Si")) {
            lletres = true;
            if (lineaSeparat[4].equals("Si")) {
                majuscules = true;
            }
            if (lineaSeparat[5].equals("Si")){
                minuscules = true;
            }
            if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No")) {
                majuscules = minuscules = true;
            }
        }else if (lineaSeparat[4].equals("Si") || lineaSeparat[5].equals("Si")){
            System.out.println("Error en el camp Password, lletres no seleccionades y maj o min si");
            error = true;
            return error;
        }
        if (lineaSeparat[3].equals("Si")) {
            numeros = true;
        }
        if (lineaSeparat[6].equals("Si")) {
            simbols = true;
        }

        //Segons les opcions demanades, generem diferents arrays de selecció
        if (lletres && numeros && simbols) {
            opcionsGeneracio = new String[]{"lletres", "numeros", "simbols"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros && simbols) {
            opcionsGeneracio = new String[]{"numeros", "simbols"};      
        }else if (lletres && simbols) {
            opcionsGeneracio = new String[]{"lletres", "simbols"};      
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres && numeros) {
            opcionsGeneracio = new String[]{"lletres", "numeros"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres) {
            opcionsGeneracio = new String[]{"lletres"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros) {
            opcionsGeneracio = new String[]{"numeros"};
        }else {
            opcionsGeneracio = new String[]{"simbols"};         
        }
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            passw="";
            i=0;
            while(i<Integer.parseInt(lineaSeparat[7])) {
                switch (opcionsGeneracio[r.nextInt(opcionsGeneracio.length)]) {
                case "lletres":
                    switch (majMin[r.nextInt(majMin.length)]) {
                    case "majuscules":
                        lletra=(char)(r.nextInt(26)+'A');
                        passw+=lletra;
                        i++;
                        break;
                    case "minuscules":
                        lletra=(char)(r.nextInt(26)+'a');
                        passw+=lletra;
                        i++;
                        break;
                    }
                case "numeros": 
                    num=r.nextInt(10); //El 10 no estarà inclos
                    passw=passw+num;
                    i++;
                    break;
                case "simbols":
                    posicio=r.nextInt(13);
                    passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                    i++;
                    break;
                }
            }
            dadesGenerades[campFinal][j]=passw;
        }
        return error;
    }

    //ID 16
    public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        int anyMax = 2023, anyMin = 1900, dia, mes, any;
        if (lineaSeparat.length==3) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            if(Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim)");
            }
        }else if (lineaSeparat.length==4) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            anyMax=Integer.parseInt(lineaSeparat[3]);
            if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim o Maxim)");
            }
        }
        //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
        int interval = anyMax-anyMin+1;
        //Si l'any minim es mes gran que l'any maxim, donarà un error

        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(anyMin>anyMax) {
                System.out.println("Error numero maxim mes petit que minim (Date)");
                error=true;
                break;
            }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=any+"-"+mes+"-"+dia;
        }
        return error;
    }

    //ID 17
    public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
        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]=lineaSeparat[1];
        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;  
        }
    }

    //ID 18
    public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        //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"};
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++){
            String dni="";
            int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
            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;
        }
    }

    //ID 19
    public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
        int inici=0;
        if(lineaSeparat.length==3) {
            inici=Integer.parseInt(lineaSeparat[2]);
        }
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
            dadesGenerades[campFinal][i]=String.valueOf(inici);
            inici++;
        }
    }
    private static void xml(String[][] dadesGenerades, int nombreRegistresGenerar)  {
        try {
            // Creo una instancia de DocumentBuilderFactory
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // Creo un documentBuilder
            DocumentBuilder builder = factory.newDocumentBuilder();;
            // Creo un DOMImplementation
            DOMImplementation implementation = builder.getDOMImplementation();
            // Creo un document amb un element root
            Document documento = implementation.createDocument(null, "dadesGenerades", null);
            documento.setXmlVersion("1.0");
            // Creo el element principal
            Element dades = documento.createElement("dades");
            // instancio el element principal com el fill del element root
            documento.getDocumentElement().appendChild(dades);
            //fem aquest bucle per crear el registres neccesaris
            for (int x=1;x<nombreRegistresGenerar;x++) {
            //creo el element de registres
            Element registre = documento.createElement("Registre");
            dades.appendChild(registre);
            //fem aquest bucle per emplenar els element fills de l'elementde registres
            for (int i=0; i<dadesGenerades.length; i++) {   
            //agafem el tipus de element
            Element tipus = documento.createElement(dadesGenerades[i][0]);
            //agafem el contingut de l'element
            Text contingut = documento.createTextNode(dadesGenerades[i][x]);
            tipus.appendChild(contingut);
            registre.appendChild(tipus);
            }
            }
            // Asocio el source amb el Document
            Source source = new DOMSource(documento);
            // Creo el Result, indicant quin ficher es creara
            Result result = new StreamResult(new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xml"));
            // Creo un transformer, que crea el ficher XML
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(source, result);

            } catch (ParserConfigurationException | TransformerException ex) {
                System.out.println(ex.getMessage());
            }
    }
    public static String xsd(String[][] dadesGenerades) {
        //Hem fet la capsalera del xsd
        String xsd="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
                + "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\">\r\n"
                + "  <xs:element name=\"dadesGenerades\">\r\n"
                + "    <xs:complexType>\r\n"
                + "      <xs:sequence>\r\n"
                + "        <xs:element ref=\"dades\"/>\r\n"
                + "      </xs:sequence>\r\n"
                + "    </xs:complexType>\r\n"
                + "  </xs:element>\n"
                + "  <xs:element name=\"dades\">\r\n"
                + "    <xs:complexType>\r\n"
                + "      <xs:sequence>\r\n"
                + "        <xs:element ref=\"Registre\" maxOccurs=\"unbounded\"/>\r\n"
                + "      </xs:sequence>\r\n"
                + "    </xs:complexType>\r\n"
                + "  </xs:element>\r\n"
                + "  <xs:element name=\"Registre\">\r\n"
                + "    <xs:complexType>\r\n"
                + "      <xs:sequence>\n";
        //fem aquest bucle per agafar els noms dels camps per ordre
        for (int i=0;i<dadesGenerades.length;i++) {
            xsd=xsd+"        <xs:element name=\""+dadesGenerades[i][0]+"\" type=\"xs:string\"/>\n";
        }
        //fem el tancaments finals
        xsd=xsd+"      </xs:sequence>\r\n"
                + "    </xs:complexType>\r\n"
                + "  </xs:element>\r\n"
                + "</xs:schema>\r";
        return xsd;
    }
    //funcio per crear el fitxer xslt
    public static String xslt(String[][] dadesGenerades) {
        //declarem la capsalera del fitxer
        String xslt = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
                + "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\r\n"
                + "<xsl:template match=\"/\">\r\n"
                + " <html>\r\n"
                + " <body>\r\n"
                + "  <h2>dadesGenerades</h2>\r\n"
                + "  <table border=\"1\">\r\n"
                + "   <tr>\r\n";
                //agafem les dades en ordre de generacio per implementar la capsalera de la taula
                for (int i=0;i<dadesGenerades.length;i++) {
                    xslt =xslt+ "    <th>"+dadesGenerades[i][0]+"</th>\r\n";
                }
                //declarem els tancaments de la capsalera
                xslt =xslt+ "   </tr>\r\n"
                + "   <xsl:for-each select=\"//Registre\">\r\n"
                + "   <tr>\r\n";
                //agafem les etiquetes dels noms per generar les dades de cada etiqueta  
                for (int i=0;i<dadesGenerades.length;i++) {
                    xslt =xslt+ "    <td><xsl:value-of select=\""+dadesGenerades[i][0]+"\"/></td>\r\n";
                }
                //declarem els tancaments del fitxer
                xslt =xslt+ "   </tr>\r\n"
                + "   </xsl:for-each>\r\n"
                + "  </table>\r\n"
                + " </body>\r\n"
                + " </html>>\r\n"
                + "</xsl:template>\r\n"
                + "</xsl:stylesheet>";
        return xslt;
    }
    //SQL Crear taula
    public static String sql(int[] linies, String[][] liniesNoms) {
        //declarem un array que contindra totes les linies del script de creacio de taula
        String[] sqlSeparat=new String[linies.length+2];
        //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
        int i=0;
        for (int j = 0;j<sqlSeparat.length;j++) {
            //comencem ha fer el inici de script
            if(j==0) {
                sqlSeparat[j]="CREATE TABLE dades (";
            }
            //fem el final del script
            else if(j==sqlSeparat.length-1) {
                sqlSeparat[j]=");";
            }
            //fem el contingut del mitg del script
            else {
                if (linies[i]==1){
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;
                }
                else if(linies[i]==2) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;
                }
                else if(linies[i]==3) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==4) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (200)" ;
                }
                else if(linies[i]==5) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==6) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==7) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (200)" ;
                }
                else if(linies[i]==8) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==9) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;
                }
                else if(linies[i]==10) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (150)" ;
                }
                else if(linies[i]==11) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Boolean" ;
                }
                else if(linies[i]==12) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Double" ;
                }
                else if(linies[i]==13) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (150)" ;
                }
                else if(linies[i]==14) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;            
                }
                else if(linies[i]==15) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (500)" ;
                }
                else if(linies[i]==16) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Date" ;
                }
                else if(linies[i]==17) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (25)" ;
                }
                else if(linies[i]==18) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (10)" ;
                }
                else if(linies[i]==19) {
                    sqlSeparat[j]=liniesNoms[i][0]+" integer (5)" ;
                }
                i++;
            }
        }
        //fem aquest bucle per inserir el contingut del script a una variable string
        for (
                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;
    }

    //SQL Insert into

    public static String sqlDades(String dadesGenerades[][], int[] 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=0;i<linies.length;i++) {
            if (i<linies.length-1) {
                sql=sql+dadesGenerades[i][0]+", ";
            }
            else if (i==linies.length-1){
                sql=sql+dadesGenerades[i][0];
            }
        }
        //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 (linies[k2]==1) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==2) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==3) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==4) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==5) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==6) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==7) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==8) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==9) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==10) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==13) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==14) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==15) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==16) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==17) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==18) {
                    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;
    }

}
eliasporter commented 1 year ago

Ultima versio del main funcionant, adapteu els darrers canvies a les funcions dins d'aquest.

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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

public class ProvesMain21122 {
    public static void main(String[] args) {
        Random r=new Random();
        /* La primera dimensio de l'array bidimensional dadesGenerades, contindrà les etiquetes dels camps a generar, i 
         * la segona els registres a generar.
         * A sEntradaOriginal, guardem l'ordre d'entrada del fitxer original, a sEntradaOrdenat, els camps ordenats per ID
         */
        String dadesGenerades[][] = new String[1][1], sEntradaOrdenat[] = new String[1], sEntradaOriginal[]=new String[1]; 
        int nombreRegistresGenerar=0, campFinal=0, i=0;
        int[] idEntradaOriginal = new int [1], idEntradaOrdenat = new int [1];

        try {
            File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_amb_opcions.txt");
            FileReader fr = new FileReader(entrada);
            BufferedReader br = new BufferedReader(fr);
            boolean error=false, generat=false;
            int j=0, campsGenerar=0, nlinia=0,x=0;
            String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];
            linea1=br.readLine();
            if(linea1==null){
                System.out.println("Arxiu vuit");
                error=true;
            }else {
                //Separarem els camps per ";"
                linea1Separat=linea1.split(";");
            }
            br.close();
            fr.close();
            //Ordenarem el fitxer d'entrada per a seguir la nostra estrategia, tot i que despres al fitxer de sortida sortirà igual que a l'entrada
            FileReader fr1 = new FileReader(entrada);
            BufferedReader br1 = new BufferedReader(fr1);
            //Escriurem un arxiu amb l'entrada ordenada
            FileWriter fw1 = new FileWriter("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
            linea1=br1.readLine();
            //contem les linies de camps demanats, per saber els camps a generar
            while((linea=br1.readLine()) != null) {
                i++;
            }
            fr1.close();
            br1.close();

            //Reinicialitzem el fitxer
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);

            //Creem els arrays on desarem l'ordre original dels camps demanats, i els camps ordenats
            sEntradaOriginal = new String[i];
            sEntradaOrdenat = new String [i];
            idEntradaOrdenat = new int [i];
            idEntradaOriginal = new int [i];
            i=0;

            //Llegim la primera linea, per escriure-la al fitxer ordenat
            linea1=br1.readLine();
            fw1.write(linea1+"\n");
            fw1.flush();
            //Emplenem els arrays
            while((linea=br1.readLine()) != null) {
                lineaSeparat=linea.split(";");
                //copiem id de cada linea en un array
                sEntradaOriginal[i]=linea;
                idEntradaOriginal[i]=Integer.parseInt(lineaSeparat[0]);
                idEntradaOrdenat[i]=Integer.parseInt(lineaSeparat[0]);
                sEntradaOrdenat[i]=linea;
                i++;
            }
            fr1.close();
            br1.close();
            boolean ordenat=false;
            for (int k = 0; k < idEntradaOriginal.length-1; k++) {
                if((idEntradaOriginal[k]<idEntradaOriginal[k+1])) {
                    ordenat=true;
                }else {
                    ordenat=false;
                    break;
                }
            }
            //ordenem l'array
            int contaIntercambis=0;
            //Utilitzem un bucle niuat, que sortira quan estigui ordenat
            while(!ordenat){
                for(int l=0;l<idEntradaOrdenat.length-1;l++){
                    if (idEntradaOrdenat[l]>idEntradaOrdenat[l+1]){
                        //Intercambiem valors
                        int aux=idEntradaOrdenat[l];
                        String sAux=sEntradaOrdenat[l];
                        idEntradaOrdenat[l]=idEntradaOrdenat[l+1];
                        sEntradaOrdenat[l]=sEntradaOrdenat[l+1];
                        idEntradaOrdenat[l+1]=aux;
                        sEntradaOrdenat[l+1]=sAux;
                        //Indiquem que hi ha canvi
                        contaIntercambis++;
                    }
                }
                //Si no hi ha intercambis, es que esta ordenat.
                if (contaIntercambis==0){
                    ordenat=true;
                    fr1 = new FileReader(entrada);
                    br1 = new BufferedReader(fr1);
                    linea1=br1.readLine();
                    //Mostrem l'ordre per debug
                    for (int k = 0; k < sEntradaOrdenat.length; k++) {
                        fw1.write(sEntradaOrdenat[k]+"\n");
                        System.out.println(sEntradaOrdenat[k]);
                    }
                    fw1.flush();
                    entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
                    fr = new FileReader(entrada);
                    br = new BufferedReader(fr);
                }
                //Inicialitzem la variable de nou per a que començi a contar de nou
                contaIntercambis=0;
            }
            fr = new FileReader(entrada);
            br = new BufferedReader(fr);

            //SQL
            linea1=br.readLine();
            linea1Separat=linea1.split(";");
            while(br.ready() && error==false){ //mentres hi hagi lineas
                if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                    System.out.println("Primera linea invalida");
                    error=true;
                    break;
                }
                //Definim cuantes dades haurem de generar
                nombreRegistresGenerar=Integer.parseInt(linea1Separat[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();
                lineaSeparat=linea.split(";");
                if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                    error=true;
                    System.out.println("ID invalid o nom invalid");
                    break;
                }
                else if (lineaSeparat[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();

                    //Emplenem l'array de control amb les dades demanades
                    dadesGenerades[campFinal][0]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                    }
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("11")) {
                    Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("12")) {
                    if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Numeros");
                        error=true;
                        break;
                    }
                    error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("13")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Email");
                        error=true;
                        break;
                    }
                    Email(dadesGenerades, campFinal, lineaSeparat, idEntradaOrdenat, nombreRegistresGenerar);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("14")) {
                    IP4(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("15")) {
                    if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Password");
                        error=true;
                        break;
                    }
                    error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("16")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Dates");
                        error=true;
                        break;
                    }
                    error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("17")) {
                    IBAN(dadesGenerades, campFinal,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("18")) {
                    DNI(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("19")) {
                    if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Autonumeric");
                        error=true;
                        break;
                    }
                    Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                    campFinal++;
                }
            }

            if(error==true) {
                System.out.println("ERROR");
            }
            else {
                String aux[][]=new String[campsGenerar][nombreRegistresGenerar];
                int posicio=0;
                for (int k = 0; k < idEntradaOriginal.length; k++) {
                    for (int k2 = 0; k2 < idEntradaOriginal.length; k2++) {
                        if(idEntradaOriginal[k]==idEntradaOrdenat[k2]) {
                            posicio=k2;
                    }
                    aux[k][0]=dadesGenerades[posicio][0];
                        for (int l = 1; l < nombreRegistresGenerar; l++) {
                            aux[k][l]=dadesGenerades[posicio][l];
                        }
                    }
                }

                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        dadesGenerades[k][k2]=aux[k][k2];
                    }
                }   
                //Mostra els camps per test
                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        System.out.print(dadesGenerades[k][k2]+" ");
                    }
                    System.out.println();
                }   
                if (linea1Separat[0].equals("XML"))
                {
                    File sortida2 = new File(linea1Separat[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 (linea1Separat[0].equals("SQL"))
                {
                    //creem un fitxer de sortida
                    File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\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(idEntradaOrdenat, dadesGenerades);
                    //recollim el script de insercio de les dades a la taula
                    String sql2=sqlDades(dadesGenerades,idEntradaOrdenat);
                    //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());
                    }
                }
                System.out.println("Ha sortit tot be!!");
            }

            br.close(); //S'han de tencar
            fr.close();
        } catch (Exception pasanCosas) {
            pasanCosas.printStackTrace();}
    }

    //ID 11
    public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
        // TODO Auto-generated method stub
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        String aleatori; //variable on es guarda boolean
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
            if (numeroAleatori==0){ //si es 0, sortira boolean false
                aleatori="false";
            }
            else {
                aleatori="true"; //i si surt 1, sortira boolean true
            }
            dadesGenerades[campFinal][j]=aleatori;
        }
    }

    //ID 12
    public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
        int decimals=0, minim=0, maxim=1000;
        if(lineaSeparat.length>2) {
            if (lineaSeparat.length==3) {
                decimals=Integer.parseInt(lineaSeparat[2]);
            }else if (lineaSeparat.length==4) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
            }else if (lineaSeparat.length==5) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
                maxim=Integer.parseInt(lineaSeparat[4]);
            }
            if(Integer.parseInt(lineaSeparat[2])<0) {
                System.out.println("Error decimals (Numeros)");
                error=true;
            }
        }

        int maxim2 = maxim-minim;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(maxim<minim)
            {
                System.out.println("Error numero maxim mes petit que minim (Numeros)");
                error=true;
                break;
            }
            double generat=r.nextDouble(maxim2)+minim;
            BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
            dadesGenerades[campFinal][j]=redondeado.toString();
        }   
        return error;
    }

    //ID 13
    public static void Email(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, int idEntradaOrdenat[], int nombreRegistresGenerar) throws IOException {
        Random rnd= new Random();
        boolean bNoms=false, bCompanyies=false, nomsJaGenerats=false, companyiesJaGenerades=false;
        int lineasNom = 0, lineasCompanyia = 0, i=0, aleatori=0, total=nombreRegistresGenerar-1, posicioArrayCompanyies=0, posicioArrayNoms=0;
        String extensio=".com", dominiDemanat="", noms[], nomsCompanyia[];

        if (lineaSeparat.length==3) {
            dominiDemanat=lineaSeparat[2];
        }
        if (lineaSeparat.length==4) {
            dominiDemanat=lineaSeparat[2];
            extensio=lineaSeparat[3];
        }

        for (int j = 0; j < dadesGenerades.length; j++) {
            if (idEntradaOrdenat[j]==1) {
                posicioArrayNoms=j;
                bNoms=true;
            }
            if (idEntradaOrdenat[j]==10) {
                posicioArrayCompanyies=j;
                bCompanyies=true;
            }
        }
        if (!bNoms) {
            //aqui declarem i inicialitzem el fitxer de noms
            File filenom = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
            Scanner scnom = new Scanner(filenom);
            FileReader frnom = new FileReader(filenom);
            BufferedReader brnom = new BufferedReader(frnom);
            //contem les linies del fitxer de noms
            while(scnom.hasNextLine()) {
                scnom.nextLine();
                lineasNom++;
            }
            scnom.close();
            noms= new String[lineasNom];
            //inicialitzem i emplenem l'array des del fitxer de noms
            while(brnom.ready()) {
                String nom = brnom.readLine();
                noms[i]=nom;
                i++;
            }
            brnom.close();
            frnom.close();
            i=0;
        }else {
            noms=new String[total];
            for (int j = 1, k =0; k < noms.length; j++, k++) {
                noms[k]=dadesGenerades[posicioArrayNoms][j];
            }
            lineasNom=nombreRegistresGenerar;
            nomsJaGenerats=true;
        }
        if (!bCompanyies) {
            //aqui declarem i inicialitzem el fitxer de companyies
            File fileCompanyia = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
            Scanner scCompanyia = new Scanner(fileCompanyia);
            FileReader frCompanyia = new FileReader(fileCompanyia);
            BufferedReader brCompanyia = new BufferedReader(frCompanyia);
            //contem les linies del fitxer de companyies
            while(scCompanyia.hasNextLine()) {
                scCompanyia.nextLine();
                lineasCompanyia++;
            }
            scCompanyia.close();
            //declarem els arrays de string del fitxer de noms i del fitxer de companyies
            nomsCompanyia= new String[lineasCompanyia];

            //inicialitzem el array del fitxer de companyies
            while(brCompanyia.ready()) {
                String nom = brCompanyia.readLine();
                nomsCompanyia[i]=nom;
                i++;
            }
            brCompanyia.close();
            frCompanyia.close();
        }else {
            nomsCompanyia=new String[nombreRegistresGenerar-1];
            for (int j = 1, k =0; j < dadesGenerades[0].length; j++, k++) {
                nomsCompanyia[k]=dadesGenerades[posicioArrayCompanyies][j];
            }
            lineasCompanyia=nombreRegistresGenerar;
            companyiesJaGenerades=true;
        }
        //declarem els arrays per barrejar el fitxer de noms i de companyies, si es necessari
        String nomsAleatoris[]= new String[total], nomsRepetits[]= new String[total], NumerosNomsRepetits[]= new String[total], companyiesAleatoris[]= new String[total];
        //inicialitzem el array per barrejar el fitxer de noms

        if (!nomsJaGenerats) {
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasNom);
                nomsAleatoris[i]=noms[aleatori].toLowerCase();
                nomsRepetits[i]=nomsAleatoris[i];
            }           
        }else {
            for (int j = 0; j < noms.length; j++) {
                nomsAleatoris[j]=noms[j].toLowerCase();
            }           
        }

        //funcio per a poder canviar el nom dels que estan repetits
        for(i=0;i<total;i++) {
            for (int i2 = 0;i2<noms.length;i2++) {
                int fin=nomsRepetits.length-2;
                if (i2<fin&&nomsAleatoris[i].equals(nomsRepetits[i2+1])) {
                    aleatori=rnd.nextInt(lineasNom);
                    String temp=nomsAleatoris[i];
                    NumerosNomsRepetits[i]=NumerosNomsRepetits[i]+1;
                    nomsAleatoris[i]=temp+NumerosNomsRepetits[i];
                }
            }
        }
        if (!companyiesJaGenerades) {
            //inicialitzem el array per barrejar el fitxer de companyies si no demanen companyies
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasCompanyia);
                companyiesAleatoris[i]=nomsCompanyia[aleatori];
            }       
        }else {
            for (int j = 0; j < nomsCompanyia.length; j++) {
                companyiesAleatoris[j]=nomsCompanyia[j].toLowerCase();
            }
        }
        //inicialitzem el array de dominis per crear els dominis a partir de el nom de la companyia
        String dominis[]= new String[total];
        //inicialitzem el array que crea els dominis
        for (i=0;i<total;i++) {
            String[] parts = nomsCompanyia[i].split(" ");
            String domini="";
            for (int i2 = 0;i2<parts.length;i2++) {
                domini=domini+parts[i2];
            }
            dominis[i]=domini.toLowerCase();
        }
        //declarem el array per crear els emails
        String emails[]= new String[total];
        //inicialitzem el array per crear els emails
        //aquest if es per saver si no hi ha un domini solicitat
        if (dominiDemanat.isEmpty()) {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominis[i]+extensio;
            }
        }
        //aquest else es per saver si hi ha un domini solicitat
        else {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominiDemanat+extensio;
            }
        }
        //Emplenem amb els emails l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (i=0;i<emails.length;i++) {
            dadesGenerades[campFinal][i+1]=emails[i];
        }

    }

    //ID 14
    public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            String ipFinal="";
            part1=r.nextInt(256);
            part2=r.nextInt(256);
            part3=r.nextInt(256);
            part4=r.nextInt(256);
            ipFinal=part1+"."+part2+"."+part3+"."+part4;
            dadesGenerades[campFinal][j]=ipFinal;
        }
    }

    //ID 15
    public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
        String opcionsGeneracio[] = new String[1], majMin[] = new String[1], passw="";
        int i=0, selector=0, num=0, posicio=0;
        char lletra;
        boolean lletres = false, numeros = false, majuscules = false, minuscules = false, simbols = false;
        char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
        //emplenem el primer camp de l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];

        //Mirem les opcions demanades
        if (lineaSeparat[2].equals("Si")) {
            lletres = true;
            if (lineaSeparat[4].equals("Si")) {
                majuscules = true;
            }
            if (lineaSeparat[5].equals("Si")){
                minuscules = true;
            }
            if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No")) {
                majuscules = minuscules = true;
            }
        }else if (lineaSeparat[4].equals("Si") || lineaSeparat[5].equals("Si")){
            System.out.println("Error en el camp Password, lletres no seleccionades y maj o min si");
            error = true;
            return error;
        }
        if (lineaSeparat[3].equals("Si")) {
            numeros = true;
        }
        if (lineaSeparat[6].equals("Si")) {
            simbols = true;
        }

        //Segons les opcions demanades, generem diferents arrays de selecció
        if (lletres && numeros && simbols) {
            opcionsGeneracio = new String[]{"lletres", "numeros", "simbols"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros && simbols) {
            opcionsGeneracio = new String[]{"numeros", "simbols"};      
        }else if (lletres && simbols) {
            opcionsGeneracio = new String[]{"lletres", "simbols"};      
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres && numeros) {
            opcionsGeneracio = new String[]{"lletres", "numeros"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres) {
            opcionsGeneracio = new String[]{"lletres"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros) {
            opcionsGeneracio = new String[]{"numeros"};
        }else {
            opcionsGeneracio = new String[]{"simbols"};         
        }
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            passw="";
            i=0;
            while(i<Integer.parseInt(lineaSeparat[7])) {
                switch (opcionsGeneracio[r.nextInt(opcionsGeneracio.length)]) {
                case "lletres":
                    switch (majMin[r.nextInt(majMin.length)]) {
                    case "majuscules":
                        lletra=(char)(r.nextInt(26)+'A');
                        passw+=lletra;
                        i++;
                        break;
                    case "minuscules":
                        lletra=(char)(r.nextInt(26)+'a');
                        passw+=lletra;
                        i++;
                        break;
                    }
                case "numeros": 
                    num=r.nextInt(10); //El 10 no estarà inclos
                    passw=passw+num;
                    i++;
                    break;
                case "simbols":
                    posicio=r.nextInt(13);
                    passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                    i++;
                    break;
                }
            }
            dadesGenerades[campFinal][j]=passw;
        }
        return error;
    }

    //ID 16
    public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        int anyMax = 2023, anyMin = 1900, dia, mes, any;
        if (lineaSeparat.length==3) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            if(Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim)");
            }
        }else if (lineaSeparat.length==4) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            anyMax=Integer.parseInt(lineaSeparat[3]);
            if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim o Maxim)");
            }
        }
        //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
        int interval = anyMax-anyMin+1;
        //Si l'any minim es mes gran que l'any maxim, donarà un error

        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(anyMin>anyMax) {
                System.out.println("Error numero maxim mes petit que minim (Date)");
                error=true;
                break;
            }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=any+"-"+mes+"-"+dia;
        }
        return error;
    }

    //ID 17
    public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
        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]=lineaSeparat[1];
        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;  
        }
    }

    //ID 18
    public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        //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"};
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++){
            String dni="";
            int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
            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;
        }
    }

    //ID 19
    public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
        int inici=0;
        if(lineaSeparat.length==3) {
            inici=Integer.parseInt(lineaSeparat[2]);
        }
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
            dadesGenerades[campFinal][i]=String.valueOf(inici);
            inici++;
        }
    }

    //SQL Crear taula
    public static String sql(int[] linies, String[][] liniesNoms) {
        //declarem un array que contindra totes les linies del script de creacio de taula
        String[] sqlSeparat=new String[linies.length+2];
        //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
        int i=0;
        for (int j = 0;j<sqlSeparat.length;j++) {
            //comencem ha fer el inici de script
            if(j==0) {
                sqlSeparat[j]="CREATE TABLE dades (";
            }
            //fem el final del script
            else if(j==sqlSeparat.length-1) {
                sqlSeparat[j]=");";
            }
            //fem el contingut del mitg del script
            else {
                if (linies[i]==1){
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
                }
                else if(linies[i]==2) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
                }
                else if(linies[i]==3) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==4) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (200)" ;
                }
                else if(linies[i]==5) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==6) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==7) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (200)" ;
                }
                else if(linies[i]==8) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (50)" ;
                }
                else if(linies[i]==9) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;
                }
                else if(linies[i]==10) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (150)" ;
                }
                else if(linies[i]==11) {
                    sqlSeparat[j]=liniesNoms[i]+" Boolean" ;
                }
                else if(linies[i]==12) {
                    sqlSeparat[j]=liniesNoms[i]+" Double" ;
                }
                else if(linies[i]==13) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (150)" ;
                }
                else if(linies[i]==14) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (20)" ;           
                }
                else if(linies[i]==15) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (500)" ;
                }
                else if(linies[i]==16) {
                    sqlSeparat[j]=liniesNoms[i]+" Date" ;
                }
                else if(linies[i]==17) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (25)" ;
                }
                else if(linies[i]==18) {
                    sqlSeparat[j]=liniesNoms[i]+" Varchar (10)" ;
                }
                else if(linies[i]==19) {
                    sqlSeparat[j]=liniesNoms[i]+" integer (5)" ;
                }
                i++;
            }
        }
        //fem aquest bucle per inserir el contingut del script a una variable string
        for (
                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;
    }

    //SQL Insert into

    public static String sqlDades(String dadesGenerades[][], int[] 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=0;i<linies.length;i++) {
            if (i<linies.length-1) {
                sql=sql+dadesGenerades[i][0]+", ";
            }
            else if (i==linies.length-1){
                sql=sql+dadesGenerades[i][0];
            }
        }
        //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 (linies[k2]==1) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==2) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==3) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==4) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==5) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==6) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==7) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==8) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==9) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==10) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==13) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==14) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==15) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==16) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==17) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==18) {
                    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;
    }

}
Formeinstein13 commented 1 year ago
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.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
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.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class ProvesMain21 {
    public static void main(String[] args) {
        Random r=new Random();
        /* La primera dimensio de l'array bidimensional dadesGenerades, contindrà les etiquetes dels camps a generar, i 
         * la segona els registres a generar.
         * A sEntradaOriginal, guardem l'ordre d'entrada del fitxer original, a sEntradaOrdenat, els camps ordenats per ID
         */
        String dadesGenerades[][] = new String[1][1], sEntradaOrdenat[] = new String[1], sEntradaOriginal[]=new String[1]; 
        int nombreRegistresGenerar=0, campFinal=0, i=0;
        int[] idEntradaOriginal = new int [1], idEntradaOrdenat = new int [1];

        try {
            File entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_amb_opcions.txt");
            FileReader fr = new FileReader(entrada);
            BufferedReader br = new BufferedReader(fr);
            boolean error=false, generat=false;
            int j=0, campsGenerar=0, nlinia=0,x=0;
            String linea1="", linea="", linea1Separat[] = null, lineaSeparat[];
            linea1=br.readLine();
            if(linea1==null){
                System.out.println("Arxiu vuit");
                error=true;
            }else {
                //Separarem els camps per ";"
                linea1Separat=linea1.split(";");
            }
            br.close();
            fr.close();
            //Ordenarem el fitxer d'entrada per a seguir la nostra estrategia, tot i que despres al fitxer de sortida sortirà igual que a l'entrada
            FileReader fr1 = new FileReader(entrada);
            BufferedReader br1 = new BufferedReader(fr1);
            //Escriurem un arxiu amb l'entrada ordenada
            FileWriter fw1 = new FileWriter("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
            linea1=br1.readLine();
            //contem les linies de camps demanats, per saber els camps a generar
            while((linea=br1.readLine()) != null) {
                i++;
            }
            fr1.close();
            br1.close();

            //Reinicialitzem el fitxer
            fr1 = new FileReader(entrada);
            br1 = new BufferedReader(fr1);

            //Creem els arrays on desarem l'ordre original dels camps demanats, i els camps ordenats
            sEntradaOriginal = new String[i];
            sEntradaOrdenat = new String [i];
            idEntradaOrdenat = new int [i];
            idEntradaOriginal = new int [i];
            i=0;

            //Llegim la primera linea, per escriure-la al fitxer ordenat
            linea1=br1.readLine();
            fw1.write(linea1+"\n");
            fw1.flush();
            //Emplenem els arrays
            while((linea=br1.readLine()) != null) {
                lineaSeparat=linea.split(";");
                //copiem id de cada linea en un array
                sEntradaOriginal[i]=linea;
                idEntradaOriginal[i]=Integer.parseInt(lineaSeparat[0]);
                idEntradaOrdenat[i]=Integer.parseInt(lineaSeparat[0]);
                sEntradaOrdenat[i]=linea;
                i++;
            }
            fr1.close();
            br1.close();
            boolean ordenat=false;
            for (int k = 0; k < idEntradaOriginal.length-1; k++) {
                if((idEntradaOriginal[k]<idEntradaOriginal[k+1])) {
                    ordenat=true;
                }else {
                    ordenat=false;
                    break;
                }
            }
            //ordenem l'array
            int contaIntercambis=0;
            //Utilitzem un bucle niuat, que sortira quan estigui ordenat
            while(!ordenat){
                for(int l=0;l<idEntradaOrdenat.length-1;l++){
                    if (idEntradaOrdenat[l]>idEntradaOrdenat[l+1]){
                        //Intercambiem valors
                        int aux=idEntradaOrdenat[l];
                        String sAux=sEntradaOrdenat[l];
                        idEntradaOrdenat[l]=idEntradaOrdenat[l+1];
                        sEntradaOrdenat[l]=sEntradaOrdenat[l+1];
                        idEntradaOrdenat[l+1]=aux;
                        sEntradaOrdenat[l+1]=sAux;
                        //Indiquem que hi ha canvi
                        contaIntercambis++;
                    }
                }
                //Si no hi ha intercambis, es que esta ordenat.
                if (contaIntercambis==0){
                    ordenat=true;
                    fr1 = new FileReader(entrada);
                    br1 = new BufferedReader(fr1);
                    linea1=br1.readLine();
                    //Mostrem l'ordre per debug
                    for (int k = 0; k < sEntradaOrdenat.length; k++) {
                        fw1.write(sEntradaOrdenat[k]+"\n");
                        System.out.println(sEntradaOrdenat[k]);
                    }
                    fw1.flush();
                    entrada=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_e-s\\Fitxer_entrada_ordenat.txt");
                    fr = new FileReader(entrada);
                    br = new BufferedReader(fr);
                }
                //Inicialitzem la variable de nou per a que començi a contar de nou
                contaIntercambis=0;
            }
            fr = new FileReader(entrada);
            br = new BufferedReader(fr);

            //SQL
            linea1=br.readLine();
            linea1Separat=linea1.split(";");
            while(br.ready() && error==false){ //mentres hi hagi lineas
                if(linea1Separat.length != 3 || !(linea1Separat[0].equals("SQL") || linea1Separat[0].equals("XML"))|| Integer.parseInt(linea1Separat[2])<1) { //Si no estan tots els camps error
                    System.out.println("Primera linea invalida");
                    error=true;
                    break;
                }
                //Definim cuantes dades haurem de generar
                nombreRegistresGenerar=Integer.parseInt(linea1Separat[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();
                lineaSeparat=linea.split(";");
                if(Integer.parseInt(lineaSeparat[0])>19 || Integer.parseInt(lineaSeparat[0])<1 || lineaSeparat.length<2) {//Si hi ha un ID que no sigui cap dels anteriors, donarà error
                    error=true;
                    System.out.println("ID invalid o nom invalid");
                    break;
                }
                else if (lineaSeparat[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();

                    //Emplenem l'array de control amb les dades demanades
                    dadesGenerades[campFinal][0]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=noms[r.nextInt(noms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=cognoms[r.nextInt(cognoms.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=ciutats[r.nextInt(ciutats.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=adreces[r.nextInt(adreces.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=professions[r.nextInt(professions.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=pais[r.nextInt(pais.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=estudis[r.nextInt(estudis.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=colors[r.nextInt(colors.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=url[r.nextInt(url.length)];
                    }
                    campFinal++;
                }
                else if (lineaSeparat[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]=lineaSeparat[1];
                    for (int k = 1; k < nombreRegistresGenerar; k++) {
                        dadesGenerades[campFinal][k]=companyia[r.nextInt(companyia.length)];
                    }
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("11")) {
                    Boolean(lineaSeparat, r, dadesGenerades, campFinal);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("12")) {
                    if (lineaSeparat.length>5){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Numeros");
                        error=true;
                        break;
                    }
                    error=Numeros(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("13")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Email");
                        error=true;
                        break;
                    }
                    Email(dadesGenerades, campFinal, lineaSeparat, idEntradaOrdenat, nombreRegistresGenerar);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("14")) {
                    IP4(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if(lineaSeparat[0].equals("15")) {
                    if (lineaSeparat.length!=8 || Integer.parseInt(lineaSeparat[7])<0){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Password");
                        error=true;
                        break;
                    }
                    error=Password(dadesGenerades, campFinal, lineaSeparat, r, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("16")) {
                    if (lineaSeparat.length>4){ //Si no hi han totes les opcions donarà error
                        System.out.println("Error numero de camps Dates");
                        error=true;
                        break;
                    }
                    error=Dates(dadesGenerades, campFinal, r,lineaSeparat, error);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("17")) {
                    IBAN(dadesGenerades, campFinal,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("18")) {
                    DNI(dadesGenerades, campFinal, r,lineaSeparat);
                    campFinal++;
                }
                else if (lineaSeparat[0].equals("19")) {
                    if (lineaSeparat.length>3){ //Si no hi han totes les opcions a password donarà error
                        System.out.println("Error numero de camps Autonumeric");
                        error=true;
                        break;
                    }
                    Autonumeric(dadesGenerades, campFinal, lineaSeparat);
                    campFinal++;
                }
            }

            if(error==true) {
                System.out.println("ERROR");
            }
            else {
                String aux[][]=new String[campsGenerar][nombreRegistresGenerar];
                int posicio=0;
                for (int k = 0; k < idEntradaOriginal.length; k++) {
                    for (int k2 = 0; k2 < idEntradaOriginal.length; k2++) {
                        if(idEntradaOriginal[k]==idEntradaOrdenat[k2]) {
                            posicio=k2;
                    }
                    aux[k][0]=dadesGenerades[posicio][0];
                        for (int l = 1; l < nombreRegistresGenerar; l++) {
                            aux[k][l]=dadesGenerades[posicio][l];
                        }
                    }
                }

                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        dadesGenerades[k][k2]=aux[k][k2];
                    }
                }   
                //Mostra els camps per test
                for (int k = 0; k < campsGenerar; k++) {
                    for (int k2 = 0; k2 < nombreRegistresGenerar; k2++) {
                        System.out.print(dadesGenerades[k][k2]+" ");
                    }
                    System.out.println();
                }   
                if (linea1Separat[0].equals("XML"))
                {
                    //si el firxer de sortida es XML executarem aquesta funcio per crear el archiu XML corresponent
                    //aquesta bariable agafa tot el fitxer del xml
                    String XML="";
                    //aquesta agafa tot el fitxer xml per afegir un tros de codi
                    String XMLPle="";
                    //executem la funcio que genera el XML
                    xml(dadesGenerades,nombreRegistresGenerar);
                    //senyalem l'entrada i la sortida
                    File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xsd");
                    File entrada2=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xml");
                    FileReader frx = new FileReader(entrada2);
                    BufferedReader brx = new BufferedReader(frx);
                    File sortida2=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xml");
                    //aquest bucle agafa tot el fitxer XML i el posa en un string
                    while(brx.ready()) {
                        XML = brx.readLine();
                    }
                    //separem el artxiu xml per ">"
                    String[] Xml=XML.split(">");
                    //fem aquest bucle per implementar la linea de codi que li falta
                    for(i=0;i<Xml.length;i++) {
                        if (i==1) {
                            XMLPle=XMLPle+"<?xml-stylesheet type=\"text/xsl\" href=\"Fitxer_sortida.xsl\"?>"+Xml[i]+" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"file:///C:/DAM2/PROJECTE_1/Fitxers_sortida/Fitxer_sortida.xsd\">";
                        }
                        else {
                            XMLPle=XMLPle+Xml[i]+">";
                        }
                    }
                    //reescribim el fitxer XML
                    try (FileWriter escriptor1 =new FileWriter(sortida2);) {
                        escriptor1.append(XMLPle).write('\n');
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                    //executem la funcio per generar el XSD i passem el XSD a un String
                    String text=xsd(dadesGenerades);
                    //Creem el artxiu XSD amb el String fet anteriorment
                    try (FileWriter escriptor2 =new FileWriter(sortida);) {
                        escriptor2.append(text).write('\n');
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                    //creem un arxiu de sortida per el xslt
                    File sortida3=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xsl");
                    //agafem el contingut del que tindra el fitxer xslt i el bolquem al fitxer de sortida
                    String xslt=xslt(dadesGenerades);
                    try (FileWriter escriptor3 =new FileWriter(sortida3);) {
                        escriptor3.append(xslt).write('\n');
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                }
                else if (linea1Separat[0].equals("SQL"))
                {
                    //creem un fitxer de sortida
                    File sortida=new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\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(idEntradaOrdenat, dadesGenerades);
                    //recollim el script de insercio de les dades a la taula
                    String sql2=sqlDades(dadesGenerades,idEntradaOrdenat);
                    //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());
                    }
                }
                System.out.println("Ha sortit tot be!!");
            }

            br.close(); //S'han de tencar
            fr.close();
        } catch (Exception pasanCosas) {
            pasanCosas.printStackTrace();}
    }

    //ID 11
    public static void Boolean(String[] lineaSeparat, Random r, String[][] dadesGenerades, int campFinal) {
        // TODO Auto-generated method stub
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        String aleatori; //variable on es guarda boolean
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            int numeroAleatori=r.nextInt(2); //numeros aleatoris de 2 digits
            if (numeroAleatori==0){ //si es 0, sortira boolean false
                aleatori="false";
            }
            else {
                aleatori="true"; //i si surt 1, sortira boolean true
            }
            dadesGenerades[campFinal][j]=aleatori;
        }
    }

    //ID 12
    public static boolean Numeros(String[][] dadesGenerades, int campFinal, String lineaSeparat[], Random r, boolean error) {
        int decimals=0, minim=0, maxim=1000;
        if(lineaSeparat.length>2) {
            if (lineaSeparat.length==3) {
                decimals=Integer.parseInt(lineaSeparat[2]);
            }else if (lineaSeparat.length==4) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
            }else if (lineaSeparat.length==5) {
                decimals=Integer.parseInt(lineaSeparat[2]);
                minim=Integer.parseInt(lineaSeparat[3]);
                maxim=Integer.parseInt(lineaSeparat[4]);
            }
            if(Integer.parseInt(lineaSeparat[2])<0) {
                System.out.println("Error decimals (Numeros)");
                error=true;
            }
        }

        int maxim2 = maxim-minim;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for(int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(maxim<minim)
            {
                System.out.println("Error numero maxim mes petit que minim (Numeros)");
                error=true;
                break;
            }
            double generat=r.nextDouble(maxim2)+minim;
            BigDecimal redondeado = new BigDecimal(generat).setScale(decimals, RoundingMode.HALF_EVEN);
            dadesGenerades[campFinal][j]=redondeado.toString();
        }   
        return error;
    }

    //ID 13
    public static void Email(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, int idEntradaOrdenat[], int nombreRegistresGenerar) throws IOException {
        Random rnd= new Random();
        boolean bNoms=false, bCompanyies=false, nomsJaGenerats=false, companyiesJaGenerades=false;
        int lineasNom = 0, lineasCompanyia = 0, i=0, aleatori=0, total=nombreRegistresGenerar-1, posicioArrayCompanyies=0, posicioArrayNoms=0;
        String extensio=".com", dominiDemanat="", noms[], nomsCompanyia[];

        if (lineaSeparat.length==3) {
            dominiDemanat=lineaSeparat[2];
        }
        if (lineaSeparat.length==4) {
            dominiDemanat=lineaSeparat[2];
            extensio=lineaSeparat[3];
        }

        for (int j = 0; j < dadesGenerades.length; j++) {
            if (idEntradaOrdenat[j]==1) {
                posicioArrayNoms=j;
                bNoms=true;
            }
            if (idEntradaOrdenat[j]==10) {
                posicioArrayCompanyies=j;
                bCompanyies=true;
            }
        }
        if (!bNoms) {
            //aqui declarem i inicialitzem el fitxer de noms
            File filenom = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS.txt");
            Scanner scnom = new Scanner(filenom);
            FileReader frnom = new FileReader(filenom);
            BufferedReader brnom = new BufferedReader(frnom);
            //contem les linies del fitxer de noms
            while(scnom.hasNextLine()) {
                scnom.nextLine();
                lineasNom++;
            }
            scnom.close();
            noms= new String[lineasNom];
            //inicialitzem i emplenem l'array des del fitxer de noms
            while(brnom.ready()) {
                String nom = brnom.readLine();
                noms[i]=nom;
                i++;
            }
            brnom.close();
            frnom.close();
            i=0;
        }else {
            noms=new String[total];
            for (int j = 1, k =0; k < noms.length; j++, k++) {
                noms[k]=dadesGenerades[posicioArrayNoms][j];
            }
            lineasNom=nombreRegistresGenerar;
            nomsJaGenerats=true;
        }
        if (!bCompanyies) {
            //aqui declarem i inicialitzem el fitxer de companyies
            File fileCompanyia = new File("C:\\DAM2\\PROJECTE_1\\Fitxers_de_dades\\NOMS_DE_COMPANYIES.txt");
            Scanner scCompanyia = new Scanner(fileCompanyia);
            FileReader frCompanyia = new FileReader(fileCompanyia);
            BufferedReader brCompanyia = new BufferedReader(frCompanyia);
            //contem les linies del fitxer de companyies
            while(scCompanyia.hasNextLine()) {
                scCompanyia.nextLine();
                lineasCompanyia++;
            }
            scCompanyia.close();
            //declarem els arrays de string del fitxer de noms i del fitxer de companyies
            nomsCompanyia= new String[lineasCompanyia];

            //inicialitzem el array del fitxer de companyies
            while(brCompanyia.ready()) {
                String nom = brCompanyia.readLine();
                nomsCompanyia[i]=nom;
                i++;
            }
            brCompanyia.close();
            frCompanyia.close();
        }else {
            nomsCompanyia=new String[nombreRegistresGenerar-1];
            for (int j = 1, k =0; j < dadesGenerades[0].length; j++, k++) {
                nomsCompanyia[k]=dadesGenerades[posicioArrayCompanyies][j];
            }
            lineasCompanyia=nombreRegistresGenerar;
            companyiesJaGenerades=true;
        }
        //declarem els arrays per barrejar el fitxer de noms i de companyies, si es necessari
        String nomsAleatoris[]= new String[total], nomsRepetits[]= new String[total], NumerosNomsRepetits[]= new String[total], companyiesAleatoris[]= new String[total];
        //inicialitzem el array per barrejar el fitxer de noms

        if (!nomsJaGenerats) {
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasNom);
                nomsAleatoris[i]=noms[aleatori].toLowerCase();
                nomsRepetits[i]=nomsAleatoris[i];
            }           
        }else {
            for (int j = 0; j < noms.length; j++) {
                nomsAleatoris[j]=noms[j].toLowerCase();
            }           
        }

        //funcio per a poder canviar el nom dels que estan repetits
        for(i=0;i<total;i++) {
            for (int i2 = 0;i2<noms.length;i2++) {
                int fin=nomsRepetits.length-2;
                if (i2<fin&&nomsAleatoris[i].equals(nomsRepetits[i2+1])) {
                    aleatori=rnd.nextInt(lineasNom);
                    String temp=nomsAleatoris[i];
                    NumerosNomsRepetits[i]=NumerosNomsRepetits[i]+1;
                    nomsAleatoris[i]=temp+NumerosNomsRepetits[i];
                }
            }
        }
        if (!companyiesJaGenerades) {
            //inicialitzem el array per barrejar el fitxer de companyies si no demanen companyies
            for(i=0;i<total;i++) {
                aleatori=rnd.nextInt(lineasCompanyia);
                companyiesAleatoris[i]=nomsCompanyia[aleatori];
            }       
        }else {
            for (int j = 0; j < nomsCompanyia.length; j++) {
                companyiesAleatoris[j]=nomsCompanyia[j].toLowerCase();
            }
        }
        //inicialitzem el array de dominis per crear els dominis a partir de el nom de la companyia
        String dominis[]= new String[total];
        //inicialitzem el array que crea els dominis
        for (i=0;i<total;i++) {
            String[] parts = nomsCompanyia[i].split(" ");
            String domini="";
            for (int i2 = 0;i2<parts.length;i2++) {
                domini=domini+parts[i2];
            }
            dominis[i]=domini.toLowerCase();
        }
        //declarem el array per crear els emails
        String emails[]= new String[total];
        //inicialitzem el array per crear els emails
        //aquest if es per saver si no hi ha un domini solicitat
        if (dominiDemanat.isEmpty()) {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominis[i]+extensio;
            }
        }
        //aquest else es per saver si hi ha un domini solicitat
        else {
            for (i=0;i<total;i++) {
                emails[i]=nomsAleatoris[i]+"@"+dominiDemanat+extensio;
            }
        }
        //Emplenem amb els emails l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (i=0;i<emails.length;i++) {
            dadesGenerades[campFinal][i+1]=emails[i];
        }

    }

    //ID 14
    public static void IP4(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        int part1, part2, part3, part4; //Definire les 4  parts que te una ip, per generar a cada part un numero entre 1 y 255;
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            String ipFinal="";
            part1=r.nextInt(256);
            part2=r.nextInt(256);
            part3=r.nextInt(256);
            part4=r.nextInt(256);
            ipFinal=part1+"."+part2+"."+part3+"."+part4;
            dadesGenerades[campFinal][j]=ipFinal;
        }
    }

    //ID 15
    public static boolean Password(String[][] dadesGenerades, int campFinal, String[] lineaSeparat, Random r, boolean error) {
        String opcionsGeneracio[] = new String[1], majMin[] = new String[1], passw="";
        int i=0, selector=0, num=0, posicio=0;
        char lletra;
        boolean lletres = false, numeros = false, majuscules = false, minuscules = false, simbols = false;
        char sim[]= {'~','@','#','_','^','*','%','/','.','+',':',';','='}; //Declarem un array per als simbols que es permeten a les contrassenyes
        //emplenem el primer camp de l'array de control
        dadesGenerades[campFinal][0]=lineaSeparat[1];

        //Mirem les opcions demanades
        if (lineaSeparat[2].equals("Si")) {
            lletres = true;
            if (lineaSeparat[4].equals("Si")) {
                majuscules = true;
            }
            if (lineaSeparat[5].equals("Si")){
                minuscules = true;
            }
            if (lineaSeparat[4].equals("No") && lineaSeparat[5].equals("No")) {
                majuscules = minuscules = true;
            }
        }else if (lineaSeparat[4].equals("Si") || lineaSeparat[5].equals("Si")){
            System.out.println("Error en el camp Password, lletres no seleccionades y maj o min si");
            error = true;
            return error;
        }
        if (lineaSeparat[3].equals("Si")) {
            numeros = true;
        }
        if (lineaSeparat[6].equals("Si")) {
            simbols = true;
        }

        //Segons les opcions demanades, generem diferents arrays de selecció
        if (lletres && numeros && simbols) {
            opcionsGeneracio = new String[]{"lletres", "numeros", "simbols"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros && simbols) {
            opcionsGeneracio = new String[]{"numeros", "simbols"};      
        }else if (lletres && simbols) {
            opcionsGeneracio = new String[]{"lletres", "simbols"};      
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres && numeros) {
            opcionsGeneracio = new String[]{"lletres", "numeros"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (lletres) {
            opcionsGeneracio = new String[]{"lletres"};
            if (majuscules && minuscules) {
                majMin = new String[]{"majuscules", "minuscules"};
            }else if (majuscules) {
                majMin = new String[]{"majuscules"};
            }else {
                majMin = new String[]{"minuscules"};
            }
        }else if (numeros) {
            opcionsGeneracio = new String[]{"numeros"};
        }else {
            opcionsGeneracio = new String[]{"simbols"};         
        }
        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            passw="";
            i=0;
            while(i<Integer.parseInt(lineaSeparat[7])) {
                switch (opcionsGeneracio[r.nextInt(opcionsGeneracio.length)]) {
                case "lletres":
                    switch (majMin[r.nextInt(majMin.length)]) {
                    case "majuscules":
                        lletra=(char)(r.nextInt(26)+'A');
                        passw+=lletra;
                        i++;
                        break;
                    case "minuscules":
                        lletra=(char)(r.nextInt(26)+'a');
                        passw+=lletra;
                        i++;
                        break;
                    }
                case "numeros": 
                    num=r.nextInt(10); //El 10 no estarà inclos
                    passw=passw+num;
                    i++;
                    break;
                case "simbols":
                    posicio=r.nextInt(13);
                    passw=passw+sim[posicio]; //Agafarem una posició aleatoria del array per agafar un simbol aleatori
                    i++;
                    break;
                }
            }
            dadesGenerades[campFinal][j]=passw;
        }
        return error;
    }

    //ID 16
    public static boolean Dates(String[][] dadesGenerades, int campFinal, Random r, String[] lineaSeparat, boolean error) {
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        int anyMax = 2023, anyMin = 1900, dia, mes, any;
        if (lineaSeparat.length==3) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            if(Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim)");
            }
        }else if (lineaSeparat.length==4) {
            anyMin=Integer.parseInt(lineaSeparat[2]);
            anyMax=Integer.parseInt(lineaSeparat[3]);
            if(Integer.parseInt(lineaSeparat[3])<0 || Integer.parseInt(lineaSeparat[2])<0)
            {
                error=true;
                System.out.println("Error numero de camps Dates (Minim o Maxim)");
            }
        }
        //Calculem el interval per a generar els anys aleatoris dins del rang que ens indiquen
        int interval = anyMax-anyMin+1;
        //Si l'any minim es mes gran que l'any maxim, donarà un error

        for (int j = 1; j < dadesGenerades[campFinal].length; j++) {
            if(anyMin>anyMax) {
                System.out.println("Error numero maxim mes petit que minim (Date)");
                error=true;
                break;
            }
            mes = 1+r.nextInt(12); //Generem els mesos aleatoris
            any = anyMin+r.nextInt(interval); //Generem els anys aleatoris

            if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) {
                dia=1+r.nextInt(31); //Si els mesos son els indicats generarem un dia entre el 1 i el 31
            }
            else if (mes==2) { //Si el mes generat es el dos haurem de controlar els anys bisiestos
                if(any%4==0) { //Ho comprovarem amb les regles que ha de complir un any per ser bde traspas
                    if(any%100==0) {
                        if(any%400==0) {
                            dia=1+r.nextInt(29); //Si es bisiesto generarem entre 1 i 29 dies
                        }
                        else {
                            dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                        }
                    }
                    else {
                        dia=1+r.nextInt(29);//Si es bisiesto generarem entre 1 i 29 dies
                    }
                }
                else {
                    dia=1+r.nextInt(28);//Si no es bisiesto generarem entre 1 i 28 dies
                }
            }
            else {
                dia=1+r.nextInt(30); //Si no es els mesos de 31 dies ni febrer, tindra 30 dies
            }
            dadesGenerades[campFinal][j]=any+"-"+mes+"-"+dia;
        }
        return error;
    }

    //ID 17
    public static void IBAN (String dadesGenerades[][], int campFinal, String[] lineaSeparat) {
        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]=lineaSeparat[1];
        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;  
        }
    }

    //ID 18
    public static void DNI(String[][] dadesGenerades, int campFinal,Random r, String[] lineaSeparat) {
        // TODO Auto-generated method stub
        //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"};
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int j = 1; j < dadesGenerades[campFinal].length; j++){
            String dni="";
            int i=0,posicionLetra; //creem un contador y una variable per calcular la posició de la lletra
            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;
        }
    }

    //ID 19
    public static void Autonumeric (String dadesGenerades[][], int campFinal, String lineaSeparat[]) {
        int inici=0;
        if(lineaSeparat.length==3) {
            inici=Integer.parseInt(lineaSeparat[2]);
        }
        dadesGenerades[campFinal][0]=lineaSeparat[1];
        for (int i = 1; i < dadesGenerades[campFinal].length; i++) {
            dadesGenerades[campFinal][i]=String.valueOf(inici);
            inici++;
        }
    }
    private static void xml(String[][] dadesGenerades, int nombreRegistresGenerar)  {
        try {
            // Creo una instancia de DocumentBuilderFactory
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // Creo un documentBuilder
            DocumentBuilder builder = factory.newDocumentBuilder();;
            // Creo un DOMImplementation
            DOMImplementation implementation = builder.getDOMImplementation();
            // Creo un document amb un element root
            Document documento = implementation.createDocument(null, "dadesGenerades", null);
            documento.setXmlVersion("1.0");
            // Creo el element principal
            Element dades = documento.createElement("dades");
            // instancio el element principal com el fill del element root
            documento.getDocumentElement().appendChild(dades);
            //fem aquest bucle per crear el registres neccesaris
            for (int x=1;x<nombreRegistresGenerar;x++) {
            //creo el element de registres
            Element registre = documento.createElement("Registre");
            dades.appendChild(registre);
            //fem aquest bucle per emplenar els element fills de l'elementde registres
            for (int i=0; i<dadesGenerades.length; i++) {   
            //agafem el tipus de element
            Element tipus = documento.createElement(dadesGenerades[i][0]);
            //agafem el contingut de l'element
            Text contingut = documento.createTextNode(dadesGenerades[i][x]);
            tipus.appendChild(contingut);
            registre.appendChild(tipus);
            }
            }
            // Asocio el source amb el Document
            Source source = new DOMSource(documento);
            // Creo el Result, indicant quin ficher es creara
            Result result = new StreamResult(new File("C:\\DAM2\\PROJECTE_1\\Fitxers_sortida\\Fitxer_sortida.xml"));
            // Creo un transformer, que crea el ficher XML
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(source, result);

            } catch (ParserConfigurationException | TransformerException ex) {
                System.out.println(ex.getMessage());
            }
    }
    public static String xsd(String[][] dadesGenerades) {
        //Hem fet la capsalera del xsd
        String xsd="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
                + "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\">\r\n"
                + "  <xs:element name=\"dadesGenerades\">\r\n"
                + "    <xs:complexType>\r\n"
                + "      <xs:sequence>\r\n"
                + "        <xs:element ref=\"dades\"/>\r\n"
                + "      </xs:sequence>\r\n"
                + "    </xs:complexType>\r\n"
                + "  </xs:element>\n"
                + "  <xs:element name=\"dades\">\r\n"
                + "    <xs:complexType>\r\n"
                + "      <xs:sequence>\r\n"
                + "        <xs:element ref=\"Registre\" maxOccurs=\"unbounded\"/>\r\n"
                + "      </xs:sequence>\r\n"
                + "    </xs:complexType>\r\n"
                + "  </xs:element>\r\n"
                + "  <xs:element name=\"Registre\">\r\n"
                + "    <xs:complexType>\r\n"
                + "      <xs:sequence>\n";
        //fem aquest bucle per agafar els noms dels camps per ordre
        for (int i=0;i<dadesGenerades.length;i++) {
            xsd=xsd+"        <xs:element name=\""+dadesGenerades[i][0]+"\" type=\"xs:string\"/>\n";
        }
        //fem el tancaments finals
        xsd=xsd+"      </xs:sequence>\r\n"
                + "    </xs:complexType>\r\n"
                + "  </xs:element>\r\n"
                + "</xs:schema>\r";
        return xsd;
    }
    //funcio per crear el fitxer xslt
    public static String xslt(String[][] dadesGenerades) {
        //declarem la capsalera del fitxer
        String xslt = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
                + "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\r\n"
                + "<xsl:template match=\"/\">\r\n"
                + " <html>\r\n"
                + " <body>\r\n"
                + "  <h2>dadesGenerades</h2>\r\n"
                + "  <table border=\"1\">\r\n"
                + "   <tr>\r\n";
                //agafem les dades en ordre de generacio per implementar la capsalera de la taula
                for (int i=0;i<dadesGenerades.length;i++) {
                    xslt =xslt+ "    <th>"+dadesGenerades[i][0]+"</th>\r\n";
                }
                //declarem els tancaments de la capsalera
                xslt =xslt+ "   </tr>\r\n"
                + "   <xsl:for-each select=\"//Registre\">\r\n"
                + "   <tr>\r\n";
                //agafem les etiquetes dels noms per generar les dades de cada etiqueta  
                for (int i=0;i<dadesGenerades.length;i++) {
                    xslt =xslt+ "    <td><xsl:value-of select=\""+dadesGenerades[i][0]+"\"/></td>\r\n";
                }
                //declarem els tancaments del fitxer
                xslt =xslt+ "   </tr>\r\n"
                + "   </xsl:for-each>\r\n"
                + "  </table>\r\n"
                + " </body>\r\n"
                + " </html>>\r\n"
                + "</xsl:template>\r\n"
                + "</xsl:stylesheet>";
        return xslt;
    }
    //SQL Crear taula
    public static String sql(int[] linies, String[][] liniesNoms) {
        //declarem un array que contindra totes les linies del script de creacio de taula
        String[] sqlSeparat=new String[linies.length+2];
        //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
        int i=0;
        for (int j = 0;j<sqlSeparat.length;j++) {
            //comencem ha fer el inici de script
            if(j==0) {
                sqlSeparat[j]="CREATE TABLE dades (";
            }
            //fem el final del script
            else if(j==sqlSeparat.length-1) {
                sqlSeparat[j]=");";
            }
            //fem el contingut del mitg del script
            else {
                if (linies[i]==1){
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;
                }
                else if(linies[i]==2) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;
                }
                else if(linies[i]==3) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==4) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (200)" ;
                }
                else if(linies[i]==5) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==6) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==7) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (200)" ;
                }
                else if(linies[i]==8) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (50)" ;
                }
                else if(linies[i]==9) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;
                }
                else if(linies[i]==10) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (150)" ;
                }
                else if(linies[i]==11) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Boolean" ;
                }
                else if(linies[i]==12) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Double" ;
                }
                else if(linies[i]==13) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (150)" ;
                }
                else if(linies[i]==14) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (20)" ;            
                }
                else if(linies[i]==15) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (500)" ;
                }
                else if(linies[i]==16) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Date" ;
                }
                else if(linies[i]==17) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (25)" ;
                }
                else if(linies[i]==18) {
                    sqlSeparat[j]=liniesNoms[i][0]+" Varchar (10)" ;
                }
                else if(linies[i]==19) {
                    sqlSeparat[j]=liniesNoms[i][0]+" integer (5)" ;
                }
                i++;
            }
        }
        //fem aquest bucle per inserir el contingut del script a una variable string
        for (
                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;
    }

    //SQL Insert into

    public static String sqlDades(String dadesGenerades[][], int[] 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=0;i<linies.length;i++) {
            if (i<linies.length-1) {
                sql=sql+dadesGenerades[i][0]+", ";
            }
            else if (i==linies.length-1){
                sql=sql+dadesGenerades[i][0];
            }
        }
        //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 (linies[k2]==1) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==2) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==3) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==4) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==5) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==6) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==7) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==8) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==9) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==10) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==13) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==14) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==15) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==16) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==17) {
                    sql=sql+"\""+dadesGenerades[k2][k]+"\"";
                }
                else if (linies[k2]==18) {
                    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;
    }

}
eliasporter commented 1 year ago

Ja tenim la primera versió beta totalment funcional del main, així que tanco aquesta issue.