Hice un programa que genera un archivo csv como este:

9,rule
18,dont
19,Ive
19,advice
19,foundations
26,Sigh
29,nothing
29,nothing
33,name

Quiero hacer 2 cosas:

Primero, quiero crear un nuevo csv que llene las filas "faltantes" en la primera. Esto significa, por ejemplo, agregar 8 líneas antes de 9,rule que debería verse así:

1,no value
2,no value
3,no value
4,no value
5,no value
6,no value
7,no value
8,no value

Entonces debería tener 9,rule seguido de otras 8 líneas "sin valor" antes de 18,dont.

Además, como puede ver, a veces hay dos o más valores con la misma identificación numérica, p. líneas con 19. Quiero solo el primero de ellos.

Desafortunadamente no pude encontrar ninguna solución de trabajo.

Estoy usando CommonsCSV para leer el archivo, así que un buen comienzo es este:

    Reader in = new FileReader("path-to-csv-file");
    Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);

    String id = new String(); 
    String target = new String(); 

    for (CSVRecord record : records) {

        id = record.get(0); // gets the id
        target = record.get(1); // gets the string after ,

       // WHAT NOW???

Cualquier ayuda sería muy apreciada. ¡Estoy atascado!

-2
NoobNe0 18 mar. 2017 a las 14:59

2 respuestas

La mejor respuesta

Prueba esto:

int prevId = 0;
for (CSVRecord record : records) {
    id = record.get(0);
    target = record.get(1);
    if(id == preId+1){
        System.out.println(id + " " + target);
        prevId = id;
    }else if(id > prevId+1){
        prevId++;
        for(; prevId < id; prevId++){
            System.out.println(prevId + " no target");
        }
        System.out.println(id + " " + target);
        prevId = id;
    }
}
1
Titus 18 mar. 2017 a las 12:37

Use una variable para trabajar como una variable de contador, imprima el valor si la id coincide, de lo contrario imprima todos los valores hasta que alcancemos la id equivalente.

int _id = 1;

    for (CSVRecord record : records) {

        id = record.get(0);
        target = record.get(1);

        while (_id != id) {
          // Print _id,no value
          _id++;
        }
        // Print _id,target
        _id++;
    }
0
Dilip Ati 18 mar. 2017 a las 12:30