Parsowanie pliku CSV

0

Witam, piszę klasę która ma czytać plik CSV z dysku i parsować jego kolumny to tablicy Stringów. Z czterech potrzebnych medtod udało mi się napisać jedną, brakuję mi metod setInvoicesTypes, setIssueDate, setDueDate. Proszę o podsunięcie jakiegoś pomysłu na rozwiązanie.

@Component
@Qualifier("csvBFPReader")
public class CSVBatchFacturationParamsReader implements BatchFacturationParamsReader, CSVReader<BatchFacturationParameters> {

@SuppressWarnings("null")
public List<BatchFacturationParameters> read(InputStream is) throws FileUploadException {


try {
    List<BatchFacturationParameters> result = new ArrayList<BatchFacturationParameters>();

    
    BufferedReader reader = new BufferedReader(new FileReader("c:/programy/partial1.csv"), '|');
    String[] nextLine;
    BatchFacturationParameters b = new BatchFacturationParameters();

    while ((nextLine = reader.readNext()) != null) {
	if (nextLine != null) {
	    
	    b.setInvoicesTypes(invoicesTypes);
	    b.setIssueDate(issueDate);
	    b.setDueDate();
	    
		
	    
	    
	    if (nextLine[0] != null && !nextLine[0].isEmpty()) {
		b.setSubject(new Subject(nextLine[0], Type.CLIENT));
	    } else {
		b.setSubject(new Subject(nextLine[1], Type.CONTRACT));
	    }
	    System.out.println(Arrays.toString(nextLine));
	    result.add(b);

	}
    }

} catch (FileNotFoundException ex) {
    java.util.logging.Logger.getLogger(CSVBatchFacturationParamsReader.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

}

0

Czemu nie użyjesz biblioteki?

0

Jakiej biblioteki?

0

Programuję od niedawna, będę wdzięczny za każdą opisową odpowiedź.

0
Karol Malodzawowy napisał(a):

Programuję od niedawna, będę wdzięczny za każdą opisową odpowiedź.

http://stackoverflow.com/questions/101100/csv-api-for-java

0

Od niedawna i juz springa uzywasz? W dodatku nie zalaczyles klasy BatchFacturationParameters, nie opsailes tych metod, ani nie zalaczyles przykladowych danych.

0
public class BatchFacturationParameters implements FacturationParameters {

    private Subject subject; // null for BIG invoicing
 
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date issueDate;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date dueDate;
    private String rules; // nullable
    private EnumSet<InvoicesType> invoicesTypes;

    public Subject getSubject() {
	return subject;
    }

    public void setSubject(Subject subject) {
	this.subject = subject;
    }

    public Date getIssueDate() {
	return issueDate;
    }

    public void setIssueDate(Date issueDate) {
	this.issueDate = issueDate;
    }

    public Date getDueDate() {
	return dueDate;
    }

    public void setDueDate(Date dueDate) {
	this.dueDate = dueDate;
    }

    public String getRules() {
	return rules;
    }

    public void setRules(String rules) {
	this.rules = rules;
    }

    public EnumSet<InvoicesType> getInvoicesTypes() {
	return invoicesTypes;
    }

    public void setInvoicesTypes(EnumSet<InvoicesType> invoicesTypes) {
	this.invoicesTypes = invoicesTypes;
    }
}

Programuje od 3 miesięcy i cały czas się uczę , używam spring mvc bo cały projekt jest w nim napisany.

0

no i jaki masz problem z tymi 3 metodami o ktorych wspomniales? musisz odczytac plik CSV i przerzytowac to co odczytasz na to co musisz wstawic do tego obiektu.

Na stazu jestes? Albo uzywwasz jakiegos projektu sciagnietego z neta?

0

Mam do użycia 4 metody na cztery kolumny w pliku csv , jedną metodę udało mi się parsować :

if (nextLine[0] != null && !nextLine[0].isEmpty()) {
			b.setSubject(new Subject(nextLine[0], Type.CLIENT));
		    } else {
			b.setSubject(new Subject(nextLine[1], Type.CONTRACT));
		    }

Nie mogę tego rzutować bo to nie są typ prymitywne jak np. (long)( int i);
A nigdzie mogę znaleźć podpowiedzi jak parsować te trzy metody.

0

Co to jest "facturation"? Nie oglądałeś reklamy z Chuckiem Norrisem? ;)

0

Do formatowania stringa do daty:

SimpleDateFormat formatter = new SimpleDateFormat(tutaj format daty ktorego uzywasz, prawdopodobnie "yyyy-MM-dd");
String formattedDate = formatter.format(todaysDate);

Natomiast

private EnumSet<InvoicesType> invoicesTypes;

mówi, że w CVS siedza jakies stringi mówiące o type faktury, bez enuma i bez CSV przykladowego ciezko powiedziec ;] Konwersja stringa do enuma moze wygladac jak zwykle InvoicesType.valueOf("string") ale nie musi - zaleznie jakie wartosci siedza w CSV i czy nie jest nadpisana metoda valueOf

0

Dzięki właśnie o to mi chodziło, tak wygląda plik csv.

|DOSNUM|ISSUE DATE|DUE DATE|INVOICE TYPES|RULES
|159542|20151217|20161030|NRB|
|159543|20151217|20161030|NRIB|10 3172
|162024|20151217|20161030|I|
|169664|20151217|20161030|NRB|
|170184|20151217|20161030|I|3172
|170405|20151217|20161030|NRIB|
|160983|20151217|20161030|NRB|
|160984|20151217|20161030|NRIB|
|161057|20151217|20161030|I|
|160436|20151217|20161030|NRB|
|160646|20151217|20161030|I|
|160647|20151217|20161030|NRIB|
|160648|20151217|20161030|NRB|
|160649|20151217|20161030|NRIB|
|162353|20151217|20161030|I|
|162067|20151217|20161030|NRB|
|162186|20151217|20161030|I|
|162234|20151217|20161030|NRIB|
|162430|20151217|20161030|NRB|
|170595|20151217|20161030|NRIB|
|158305|20151217|20161030|I|
|170612|20151217|20161030|NRB|
|163023|20151217|20161030|I|
|171979|20151217|20161030|NRIB|

1 użytkowników online, w tym zalogowanych: 0, gości: 1