M3 - Programació estructurada / Activitats UF3: Fitxers de text

De wikiserver
Dreceres ràpides: navegació, cerca

1. Feu un programa anomenat ComptaParaulesFitxer que llegeixi un fitxer orientat a caràcter on hi ha tot de frases escrites en línies diferents. Per indicar el final del fitxer, hi ha una frase on només posa “fi”. Aquest programa ha de mostrar per pantalla el nombre de paraules que té cada frase, sense comptar la de “fi”. Les contraccions (l’, d’, etc.) compten com a part de la paraula associada. Fes servir com a entrada el fitxer “LoremIpsum.txt.

Lorem ipsum dolor sit amet
consectetur adipiscing elit
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
Ut enim ad minim veniam
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
Excepteur sint occaecat cupidatat non proident
sunt in culpa qui officia deserunt mollit anim id est laborum
  La línia 1 té 5 paraules.
  La línia 2 té 3 paraules.
  La línia 3 té 11 paraules.
  La línia 4 té 5 paraules.
  La línia 5 té 12 paraules.
  La línia 6 té 16 paraules.
  La línia 7 té 6 paraules.
  La línia 8 té 11 paraules.
package m3.text.exercicis;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class LecturaLoremIpsum {

    public static void main(String[] args) throws FileNotFoundException {

        Scanner lector = new Scanner(new File("LoremIpsum.txt"));
        String text = "";
        int numLinia=1;
        if (lector.hasNextLine()) {
            text = lector.nextLine();
        }
        while (!text.equals("fi")) {
            String[] paraules = text.split(" ");
            System.out.println("La línia " + numLinia + " té " + paraules.length + " paraules.");
            numLinia++;
            text = lector.nextLine();
        }
        lector.close();
        
        
    }

}

2. Treure els comentaris d’un arxiu font .java

Escriu un programa que llegeixi un arxiu java i creï un de nou amb l’extensió .txt on les línies de comentari siguin eliminades. Per a no complicar-ho considerarem comentaris només o bé quan la línia comença amb // o bé quan una línia comença amb /* fins que una altra línia comença amb */


3. Encriptació d'un correu

En Pere vol codificar els correus electrònics que envia als seus amics. Per aquest motiu va escriure un programa Java per codificar-los i un altre per descodificar-los. Un cop comprovat el seu funcionament, va fer arribar a la resta d’amics el programa executable per poder llegir els missatges que ell els envia .

En Pere fa arribar els missatges a traves d’un fitxer anomenat correu.txt i el seu contingut és un seguit de zeros (0) i uns (1). Per llegir el correu, cal agrupar-los de 8 en 8 i transformar aquest nombre binari en un nombre decimal. El seu corresponent codi ASCII és el caràcter que ens envia. El conjunt de caràcters a utilitzar corresponen als de la taula ASCII ( del 0 al 127 ). Exemple de les tres primeres lletres que trobaràs en el fitxer correu.txt:

             caràcter      Binari      decimal
             E             01000101    69
             l             01101100    108
             n             01101110    110

Es demana que escriguis un programa que et permeti llegir els correus que s’envien codificats amb aquest mètode i mostri el missatge en el monitor.

A l'arxiu correu.txt tens un missatge de prova. Si el teu programa funciona correctament hauràs de llegir en la pantalla la següent dita:

El negoci d'en Robert amb les cabres, que en donava dues negres per una de blanca.

NOTA: Investiga els mètodes estàtics Character.toChars, Integer.valueOf;

correu.txt

01000101011011000010000001101110011001010110011101101111011000110110100100100000011001000010011101100101011011100010000001010010011011110110001001100101011100100111010000100000011000010110110101100010001000000110110001100101011100110010000001100011011000010110001001110010011001010111001100101100001000000111000101110101011001010010000001100101011011100010000001100100011011110110111001100001011101100110000100100000011001000111010101100101011100110010000001101110011001010110011101110010011001010111001100100000011100000110010101110010001000000111010101101110011000010010000001100100011001010010000001100010011011000110000101101110011000110110000100101110

4. Ordenació

Tenim dos fitxers A.txt i B.txt. Cada un d’ells conté un número indeterminat de números enters de forma ordenada. Escriviu un programa que escrigui a un fitxer C.txt tots els enters que hi ha en els dos fitxers de forma ordenada. Si algun valor surt repetit només cal ficar-ho una vegada. Per a simplificar-ho posarem el valor -1 com a indicador de final de fitxer.


5. Genereu un programa que, en iniciar-se, pregunti el nom d’un fitxer a l’usuari. El programa ha de comprovar que existeix. Aquest fitxer ha de contenir una seqüència de valors reals, entre 0 i 10, que representen un seguit de notes d’estudiants d’una aula. Per indicar el final de la seqüència, s’usa el valor -1 com a marca de fi. El programa ha de llegir el contingut del fitxer i generar-ne un de nou anomenat “Histograma-nom del fitxer llegit”. Per exemple, si el fitxer amb les notes es diu, “notesReals.txt”, el fitxer resultat s’anomenarà “Histograma-notesReals.txt”. El contingut d’aquest fitxer ha de ser un histograma de les notes, comptant que:

Excel·lent = nota entre 10 i 9 
Notable = nota entre 9 i 6.5 
Aprovat = nota entre 6.5 i 5 
Suspès = nota inferior a 5 

Per exemple donat el fitxer “notesReals.txt” el fitxer resultant (“Histograma-notesReals.txt”) seria:

     Histograma del fitxer notesReals.txt
     ------------------------------------
     Suspès:        ********
     Aprovat:       ***
     Notable:       ********
     Excel·lent:    *

notasReals.txt

8,24 5,72 3,94 3,82 0,98 7,65 8,09 8,89 6,17 6,36 4,37 7,32 8,01 4,87 0,20 8,65 8,04 0,24 9,79 0,61 -1
package m3.text.exercicis;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;

public class LecturaNotesReals {

    public static void main(String[] args) throws FileNotFoundException  {
        LecturaNotesReals lN = new LecturaNotesReals();
        File fitxerEntrada = lN.preguntarFitxer();
            int quants[]=lN.crearHistograma(fitxerEntrada);
        lN.escriureHistograma(fitxerEntrada.getName(), quants);
        
      

    }

    public File preguntarFitxer() {
        Scanner lector = new Scanner(System.in);
        boolean preguntar = true;
        File f = null;
        while (preguntar) {
            System.out.print("Escriu el nom del fitxer amb les dades: ");
            String nomFitxer = lector.nextLine();
            f = new File(nomFitxer);
            if (f.isFile()) {
                preguntar = false;
            } else {
                System.out.println("Aquest fitxer no existeix.");
            }
        }
        lector.close();
        return f;
    }

    public int[] crearHistograma(File f) throws FileNotFoundException {
        Scanner lector = new Scanner(f);
        final int SUSPES = 0;
        final int APROVAT = 1;
        final int NOTABLE = 2;
        final int EXCELENT = 3;
        int quants[] = new int[4];
        double valor = lector.nextDouble();
        while (valor != -1) {

            if ((valor >= 9) && (valor <= 10)) {
                quants[EXCELENT]++;
            } else if ((valor >= 6.5) && (valor < 9)) {
                quants[NOTABLE]++;
            } else if ((valor >= 5) && (valor < 6.5)) {
                quants[APROVAT]++;
            } else if ((valor >= 0) && (valor < 5)) {
                quants[SUSPES]++;
            }
            valor = lector.nextDouble();
        }
         lector.close();
        return quants;

    }
    public void escriureHistograma(String fitxer, int [] dades) throws FileNotFoundException{
        final String[] textHistograma = {"Suspès ", "Aprovat", "Notable",
            "Excel·lent"};
        Formatter f = new Formatter("Histograma-"+fitxer);
        

        f.format("Histograma del fitxer " + fitxer+ "\n");
        f.format("------------------------------------\n");

        for (int i = 0; i < dades.length; i++) {
            f.format("%-15s", textHistograma[i] + ": ");

            for (int j = 0; j < dades[i]; j++) {
                f.format("*");

            }
            f.format("\n");

        }
        f.close();
    }

}


6. Segons les dades que tens a les taules de dades productes de la Uf1-Pt2 crea un fitxer anomenat vendes.txt que mostri la informació de la següent forma:

   Producte                              1r Trim   2n Trim   3r Trim   4t Trim
   4LIFE TRANSFER FACTOR PLUS 90 TBS       290       316       877       924  
............. 
package m3.text.exercicis;

import java.io.FileNotFoundException;
import java.util.Formatter;

public class Productes {
     static String productes[]={
"4LIFE TRANSFER FACTOR PLUS 90 TBS",
"AB SOLUTION PLUS 240ml",
"ABRASONE RECTAL crema 30 gr.",
"ABRAXANE 100mg 1vial 50ml",
"ACID HYALURONIC 20MG 30CAPS",
"ACID HYALURONIC 60MG 30CAPS TRIPLE STRENGTH",
"ACIDOPHILUS PLUS 60caps",
"ACOMPLIA 20mg 28 tabs",
"ACT eau dentaire fluor classic cinnamon fl 400 ml",
"ACTOVEGIN 10 ML 5 AMP",
"ACTOVEGIN FORTE 200 mg 100 dragees",
"ACTOVEGIN INJ. 5 X 5 ML",
"ADRENALIN 1:1000 ( 1mg/ ml ) 10x1 ml",
"AETHOXYSKLEROL 0.25% 5Ampo 2ml",
"AETHOXYSKLEROL 0.5% 5 Ampo 2ml",
"AETHOXYSKLEROL 1% 30 ml VIAL",
"AETHOXYSKLEROL 1% 5x2ml",
"AETHOXYSKLEROL 2% 5x2ml",
"AETHOXYSKLEROL 3% 5 Amp 2ml",
"AETHOXYSKLEROL 4% 5x2ml",
"AGGRENOX  200/25mg 60 caps",
"AGIOCUR Granulat 250g",
"AGIOLAX MITE 1000gr",
"AHAVA CREMA CORPORAL VAINILLA 300 GR.",
"AHAVA DERMUD BODY MILK 250 ml.",
"AHAVA DERMUD CR.HUMECTANT CALMANT 50 ML SPF15",
"AHAVA DERMUD CREMA COLZES I GENOLLS 75 ml.",
"AHAVA DERMUD CREMA CORPORAL 200 ML.",
"AHAVA DERMUD CREMA MANS 125 ML",
"AHAVA DERMUD CREMA NUTRITIVA 50 ML"};


  
 static int vendesTrim [][]= {
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {485,754,80,38},
     {490,358,628,330}};

    public static void main(String[] args) throws FileNotFoundException {
        Formatter prod= new Formatter("vendes.txt");
        prod.format("%-50s%-12s%-12s%-12s%-12s\n","Producte","1 Trim","2 Trim","3 Trim","4 Trim");
        prod.format("%-50s%-12s%-12s%-12s%-12s\n","--------","------","------","------","------");
        for (int i = 0; i < productes.length; i++) {
          prod.format("%-50s%-12d%-12d%-12d%-12d\n",productes[i],
                  vendesTrim[i][0],vendesTrim[i][1],vendesTrim[i][2],vendesTrim[i][3]);
             
        }
        prod.close();
        
        
    }

}