2010-06-24 21 views
8

Ho un file CSV incompleta che deve essere accuratamente aggiornato, quindi non c'è file CSV in questo modo:qual è il modo migliore per modificare file CSV

one,two,three,four,five,six,seven,eight,nine,ten //This is a line(String) 

Naturalmente il file è molto più complesso, ma in questo formato, ecco cosa voglio fare inserire new-word,new-word1, new-word3 o n parole tra sette e otto (o qualsiasi intervallo). Come lo posso fare?

Pseudo-codice, codice o esempio sarebbe fantastico, non ho la minima idea di come iniziare.

UPDATE:

Forse dovrei convertire questo array o un qualche tipo di datastructure. Quindi inserisci un nuovo elemento in una determinata posizione, sposta il resto del contenuto a destra e fallo per ogni inserimento.

Non so se è strada giusta da percorrere o il modo di iniziare la programmazione è

UPDATE II:

Forse letto in csv nella lista, lista divisa in due elenchi, primo che termina con sette. Quindi aggiungere n parole alla prima lista e unire due liste alla fine? Inoltre, non so come programmare questo

risposta

5

Dai un'occhiata a OpenCSV.

UPDATE: Ecco alcuni (a malapena) pseudocodice per dare un'idea generale di come si usa OpenCSV per questo:

CSVReader reader = new CSVReader(new FileReader("old.csv")); 
CSVWriter writer = new CSVWriter(new FileWriter("new.csv")); 
String [] nextLine; 
while ((nextLine = reader.readNext()) != null) { 
    List<String> lineAsList = new ArrayList<String>(Arrays.asList(nextLine)); 
    // Add stuff using linesAsList.add(index, newValue) as many times as you need. 
    writer.writeNext(lineAsList.toArray()); 
} 

cappello-punta: @ Mark Peters, che sottolinea che non è possibile aggiornare il risultati di Arrays.asList

+0

@Hank Gay io o non capisco quello che hai pubblicato o questo scrive le voci esistenti in un nuovo file, non vedo da nessuna parte qui come posso scrivere tra gli articoli –

+0

Will OpenCSV sfuggire correttamente le virgolette doppie? –

+0

@Joe Phillips Immagino che dipenda dalla tua definizione di correttamente, poiché non ci sono specifiche. È una lib semplice; Vi consiglio di sperimentarlo e leggere le [FAQ sulla sua homepage] (http://opencsv.sourceforge.net/). –

0

Lo analizzerei in una raccolta, aggiungo i tuoi articoli, quindi lo restituisco a un csv.

+0

sì, come inseriresti n elementi in una raccolta qualsiasi: elenco di array tra due elementi che sono già all'interno di –

+1

L'oggetto prima di voler inserire, ottenere l'indice e quindi inserire le tre cose proprio lì? –

+0

Per ArrayList, utilizzare il metodo 'add (int, object)'. –

1

Questo codice pseudo-come potrebbe aiutare:

List values = Arrays.asList(line.split(",\s*")); 
List newWords = Arrays.aList(newWordsLine.split(",\s*")); 

values.addAll(7,newWords); 

StringBuffer buf = new StringBuffer(values.get(0)); 
for(v : values.subList(1,values.size()) { 
    buf.append(",",v); 
} 
return buf.toString(); 

Questo inserirà i newWords dopo il 7 ° punto sulla linea

Problemi correlati