Java - matriz archivo csv

 
Vista:
sin imagen de perfil
Val: 25
Ha aumentado su posición en 1146 puestos en Java (en relación al último mes)
Gráfica de Java

matriz archivo csv

Publicado por ander (15 intervenciones) el 23/06/2021 19:55:52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//tengo este código  como  puedo mostrar  la información del archivo en una matriz de 30 por 7  y al mismo  ejercicio como puedo hacer para que me imprima el nombre y el numero de la asignación en la que tenga 0
 
adjunto el archivo en el siguiente link
https://drive.google.com/file/d/1DpecgZ5O_rZaOyEWAdtZ97w2u6WfFHao/view?usp=sharing
 
 
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
 
public class Students {
 
	public static void main(String[] args) {
		Scanner s;
 
		try{
			File f = new File("files/est.csv");
			 s = new Scanner(f);
			 String line = s.nextLine();
			 String[] parts1 = line.split(",");
			 System.out.println(parts1[0]+" "+parts1[1]+" "+parts1[2]+" "+parts1[3]+" "+parts1[4]+" "+parts1[5]+" "+parts1[6]);
			 System.out.println("------------------------------");
 
 
 
 
			while(s.hasNextLine()){
				 line = s.nextLine();
				 String[] parts = line.split(",");
 
				String[][] matriZ = new String[10][7];
				 System.out.println(parts[0]+" "+parts[1]+" "+parts[2]+" "+parts[3]+" "+parts[4]+" "+parts[5]+" "+parts[6]);
 
			}
 
			}catch(FileNotFoundException e){
			System.out.println("el archivo no existe");
			}
	}
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

matriz archivo csv

Publicado por Kabuto (1381 intervenciones) el 24/06/2021 21:31:21
Recomiendo modular el código en métodos separados.
Este ejercicio cumple dos funciones principales:
- convertir los datos del archivo CSV en una matriz
- mostrar nombres y asignaciones que tengan valor 0

Ambas cosas se deberían hacer en métodos separados.

Luego, el enunciado pide hacer una matriz de 30 filas, pero el archivo CSV solo tiene 23.
Esto significa que la matriz, sus últimas 7 filas no contendrán datos, serán valores null.

No pasa nada, pero hay que tenerlo en cuenta a la hora de mostrar los datos en pantalla y buscar valores. Tendremos que detectar que filas han quedado como null para NO trabajar con ellas.

Te dejo una solución rápida.
Mediante un método, leemos los datos del archivo CSV y retornamos una matriz con dichos datos.

En el main recogemos esa matriz y la mostramos en pantalla.

Luego, pasamos esa matriz a otro método que se encarga de recorrerla para buscar estudiantes con asignaciones en valor 0.

He puesto varios comentarios explicando, en cualquier caso pregunta lo que no entiendas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class LeerCSV {
 
	public static void main(String[] args) {
 
		String[][] datosCSV = deCSVaMatriz("d:/est.csv");
 
		if (datosCSV != null) { //Archivo CSV se ha leído correctamente
 
			//Mostramos datos leídos en pantalla
			System.out.println("\t\tDATOS LEIDOS\n");
			for (int fila = 0; fila < datosCSV.length; fila++) {
				//No hay suficientes lineas para llenar la matriz, así que algunas filas son null
				if (datosCSV[fila][0] != null) { //Evitamos imprimir las lineas null
					for (int col = 0; col < datosCSV[fila].length; col++) {
						System.out.print(datosCSV[fila][col] + " ");
					}
					System.out.println();
				}
			}
 
			//Ahora mostramos asignaciones valor 0
			System.out.println("\n\n\t\tASIGNACIONES CON VALOR 0\n");
			mostrarAsignaciones0(datosCSV);
		}
		else
			System.out.println("No se han podido obtener los datos del CSV.");
 
		System.out.println("\n\n\t\tFIN DE PROGRAMA");
 
	}
 
	private static String[][] deCSVaMatriz(String rutaCSV) {
		try {
			Scanner lector = new Scanner(new File(rutaCSV));
			String[][] matriz = new String[30][7];
			int fila = 0; //Para recorrer filas de la matriz
 
			String linea = lector.nextLine();
 
			while (lector.hasNextLine()) {
				matriz[fila] = linea.split(","); //Separamos datos de la linea CSV leida e insertamos en matriz
				fila++; //APuntamos a la siguiente fila
				linea = lector.nextLine(); //Leemos siguiente línea
			}
			lector.close();
			//Finalizada la lectura de archivo CSV, retornamos la matriz con los datos
			return matriz;
		} catch (FileNotFoundException e) {
			System.out.println("No se encuentra fichero: " + rutaCSV);
			return null;
		}
	}
 
	private static void mostrarAsignaciones0(String[][] matriz) {
 
		//Empezamos a recorrer matriz desde fila 1, la fila 0 es cabecera, no contiene datos
		for (int fila = 1; fila < matriz.length; fila++) {
			String nombre = matriz[fila][0]; //Recogemos nombre del estudiante de esta fila
 
			if (nombre != null) //Si no es null, es que en esta fila de la matriz hay datos con los que trabajar
				//Ahora recorremos columnas, si encontramos valor "0", mostramos nombre y número de asignacion
				for (int col = 0; col < matriz[fila].length; col++)
					if (matriz[fila][col].equals("0"))
						System.out.println(nombre + " --> " + matriz[0][col]); //Nombre asignacion lo obtenemos de la cabecera(fila 0)
		}
	}
 
}

Resultado en pantalla:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
DATOS LEIDOS
 
Student Asn 1 Asn 2 Asn 3 Asn 4 Asn 5 Asn 6
Kate Mulgrew 92 98 91 96 97 99
Garrett Wang 86 0 89 78 0 99
Ethan Phillips 0 56 68 88 78 77
Jeri Ryan 100 98 100 100 100 100
Roxann Dawson 87 93 92 87 93 0
Robert Picardo 100 100 100 100 100 100
Robert Beltran 87 0 68 98 0 78
Robert McNeil 87 76 86 0 88 96
Tim Russ 97 96 98 99 100 98
Nana Visitor 98 76 85 88 78 96
Avery Brooks 98 96 94 99 82 96
Alex Siddig 78 86 95 87 76 88
Rene Auberjonois 89 88 98 94 89 96
Armin Shimerman 78 0 65 88 72 76
Terry Farrell 86 94 87 96 88 87
Jolene Blalock 98 99 97 96 99 100
Scott Bakula 97 98 100 96 100 100
Conner Trinneer 98 92 98 96 99 100
Dominic Keating 92 94 0 87 98 96
Linda Park 89 92 96 87 98 94
John Billings 0 98 0 0 99 0
 
 
		ASIGNACIONES CON VALOR 0
 
Garrett Wang --> Asn 2
Garrett Wang --> Asn 5
Ethan Phillips --> Asn 1
Roxann Dawson --> Asn 6
Robert Beltran --> Asn 2
Robert Beltran --> Asn 5
Robert McNeil --> Asn 4
Armin Shimerman --> Asn 2
Dominic Keating --> Asn 3
John Billings --> Asn 1
John Billings --> Asn 3
John Billings --> Asn 4
John Billings --> Asn 6
 
 
		FIN DE PROGRAMA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 25
Ha aumentado su posición en 1146 puestos en Java (en relación al último mes)
Gráfica de Java

matriz archivo csv

Publicado por andre (15 intervenciones) el 24/06/2021 23:36:43
mil gracias

a este mismo ejercicio como puedo hacer que me convierta las calificaciones en letras basándome en estos parámetros

>94 = A
>90 = A-
>87 = B+
>84 = B
>80 = B-
>77 = C+
>74 = C
>70 = C-
>67 = D+
>64 = D
>60 = D-
OTRO= mi


y hacer que me imprima el nombre del estudiante junto con las letras en vez de los números
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

matriz archivo csv

Publicado por Kabuto (1381 intervenciones) el 25/06/2021 12:56:43
Con varios IF.
Puedes hacer un método que reciba la calificación, la evalúe con varios if y retorne la letra correspondiente.
Las calificaciones al leerlas del archivo CSV, las tenemos como cadenas String. Habrá que convertirlas a int para poder evaluarlas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private static String evaluaCalif(String calif) {
    int nota = Integer.parseInt(calif);
 
    if (nota > 94)
        return "A";
    if (nota > 90)
        return "A-";
    if (nota > 87)
        return "B+";
    if (nota > 84)
        return "B";
    if (nota > 80)
        return "B-";
    if (nota > 77)
        return "C+";
    if (nota > 74)
        return "C";
    if (nota > 70)
        return "C-";
    if (nota > 67)
        return "D+";
    if (nota > 64)
        return "D";
    if (nota > 60)
        return "D-";
    //Resto de calificaciones
    return "mi";
}



Luego al mostrar los datos en pantalla, invocas este método para que muestre la letra según la calificación.
Antes por cada fila, mostrábamos todas las columnas (nombre y calificaciones) con un bucle.

Ahora imprimiremos la primera columna (posición 0) por separado, que es el nombre.
Las siguientes columnas (posiciones de 1 a 6) que son las calificaciones, sí las haremos con bucle y será aquí donde llamaremos al método que transforma las calificaciones en letras.

También mostraremos la primera fila, la cabecera, por separado, para evitar que esta fila le llegue al método que transforma calificaciones.
Hay que evitarlo porque la cabecera no tiene calificaciones, tiene nombres de columnas de cabecera, y entonces el método no sabría que hacer con ellos.

Marco en negrita la parte del código que cambia respecto al mensaje anterior.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public static void main(String[] args) {
 
    String[][] datosCSV = deCSVaMatriz("d:/est.csv");
 
    if (datosCSV != null) { //Archivo CSV se ha leído correctamente
 
        //Mostramos datos leídos en pantalla
        System.out.println("\t\tDATOS LEIDOS\n");
 
        //Imprimimos cabecera (fila 0)
        for (int col = 0; col < datosCSV[0].length; col++)
            System.out.print(datosCSV[0][col] + " ");
 
        System.out.println("\n--------------------------------------------");
 
        //Y ahora los datos: nombres y calificaciones
        for (int fila = 1; fila < datosCSV.length; fila++) {
            //No hay suficientes lineas para llenar la matriz, así que algunas filas son null
            if (datosCSV[fila][0] != null) { //Evitamos imprimir las lineas null
                //Imprimimos primera columna, que es el nombre
                System.out.print(datosCSV[fila][0] + " ");
                //Las siguientes columnas, son las calificaciones, usamos un método para cambiarlas por letras
                for (int col = 1; col < datosCSV[fila].length; col++) {
                    System.out.print(evaluaCalif(datosCSV[fila][col]) + " ");
                }
                System.out.println();
            }
        }
 
        //Ahora mostramos asignaciones valor 0
        System.out.println("\n\n\t\tASIGNACIONES CON VALOR 0\n");
        mostrarAsignaciones0(datosCSV);
    }
    else
        System.out.println("No se han podido obtener los datos del CSV.");
 
    System.out.println("\n\n\t\tFIN DE PROGRAMA");
 
}

Ahora en pantalla salen la calificaciones transformadas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DATOS LEIDOS
 
Student Asn 1 Asn 2 Asn 3 Asn 4 Asn 5 Asn 6
--------------------------------------------
Kate Mulgrew A- A A- A A A
Garrett Wang B mi B+ C+ mi A
Ethan Phillips mi mi D+ B+ C+ C
Jeri Ryan A A A A A A
Roxann Dawson B A- A- B A- mi
Robert Picardo A A A A A A
Robert Beltran B mi D+ A mi C+
Robert McNeil B C B mi B+ A
Tim Russ A A A A A A
Nana Visitor A C B B+ C+ A
Avery Brooks A A A- A B- A
Alex Siddig C+ B A B C B+
Rene Auberjonois B+ B+ A A- B+ A
Armin Shimerman C+ mi D B+ C- C
Terry Farrell B A- B A B+ B
Jolene Blalock A A A A A A
Scott Bakula A A A A A A
Conner Trinneer A A- A A A A
Dominic Keating A- A- mi B A A
Linda Park B+ A- A B A A-
John Billings mi A mi mi A mi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

matriz archivo csv

Publicado por Noelia (1 intervención) el 15/06/2023 20:55:12
Hola, como haría para hacer este mismo ejercicio pero en vez de con una matriz de String, con una matriz de clase?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

matriz archivo csv

Publicado por Kabuto (1381 intervenciones) el 18/06/2023 00:08:17
¿Matriz de clase? ¿Qué clase?

Un archivo CSV son cadenas(strings) texto, y por lo tanto al leerlo nos va a dar datos de clase String, sí o sí.

Ahora bien, si la matriz proviene de otro tipo de fuente, pues quizás podamos obtener algo distinto de Strings.


Tal vez podamos ayudarte mejor si nos muestras el enunciado de tu ejercicio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar