Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.uniwue.jpp.logbook.io;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.LineNumberReader;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.text.DecimalFormat;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import de.uniwue.jpp.logbook.model.Car;
- import de.uniwue.jpp.logbook.model.Entry;
- import de.uniwue.jpp.logbook.model.FuelType;
- import de.uniwue.jpp.logbook.model.Logbook;
- public class CsvImportExport implements ImportExport {
- DecimalFormat f = new DecimalFormat("#0.00");
- DateTimeFormatter dformat = DateTimeFormatter.ofPattern("dd.MM.yyyy");
- public void save(Logbook logbook, OutputStream out) throws IOException,
- NullPointerException {
- PrintWriter test = new PrintWriter(out);
- test.print("CAR;DATE;DISTANCE;PRICE;FUEL;COMMENT");
- if (logbook == null) {
- throw new NullPointerException("Logbook existiert nicht");
- } else {
- boolean first = true;
- StringBuffer buf = new StringBuffer();
- Iterator<Car> itrc = logbook.getCars().iterator();
- while (itrc.hasNext()) {
- Car c = itrc.next();
- if (first == true) {
- buf.append("\n");
- }
- first = false;
- if (!(logbook.getEntries(c).isEmpty())) {
- Collection<Entry> entries = new ArrayList<Entry>();
- entries = logbook.getEntries(c);
- Iterator<Entry> itre = entries.iterator();
- while (itre.hasNext()) {
- Entry e = itre.next();
- if (!(itrc.hasNext()) && !(itre.hasNext())) {
- buf.append(c.toString() + ";"
- + dformat.format(e.getDate()) + ";"
- + f.format(e.getDistance()) + ";"
- + f.format(e.getPrice()) + ";"
- + f.format(e.getFuel()) + ";"
- + e.getComment());
- } else {
- buf.append(c.toString() + ";"
- + dformat.format(e.getDate()) + ";"
- + f.format(e.getDistance()) + ";"
- + f.format(e.getPrice()) + ";"
- + f.format(e.getFuel()) + ";"
- + e.getComment() + "\n");
- }
- }
- }
- }
- test.print(buf.toString());
- }
- out.close();
- test.close();
- }
- @Override
- public Logbook load(InputStream is) throws IOException {
- Logbook logbook = new Logbook();
- InputStreamReader a = new InputStreamReader(is);
- LineNumberReader test = new LineNumberReader(a);
- String eingabe = test.readLine();
- if (is == null) {
- throw new IOException("Gueltiger Input noetig.");
- } else {
- if (eingabe == null
- || (eingabe.equals("CAR;DATE;DISTANCE;PRICE;FUEL;COMMENT")) == false) {
- throw new IOException("Header ist falsch bzw. leer");
- } else {
- while ((eingabe = test.readLine()) != null) {
- // Pattern c = Pattern.compile("");
- // Matcher cm = c.matcher(eingabe);
- Pattern p = Pattern
- .compile("([^\\(\\)]+)\\[([^\\(\\)]+)\\];([0-9]{2}\\.[0-9]{2}\\.[0-9][0-9][0-9][0-9]);([0-9]+\\.[0-9][0-9]);([0-9]+\\.[0-9][0-9]);([0-9]+\\.[0-9][0-9]);([^\\(\\)]+)");
- // Pattern p = Pattern
- // .compile("\\d{2}}\\.\\d{2}\\.\\d{4}) (\\d+\\.\\d{2}\u20ac)), (\\d+\\.\\d{2})), (\\d+\\.\\d{2}k)), \\d+\\.\\d{2}\u20ac/km (\\([^\\(\\)]+\\))");
- Matcher m = p.matcher(eingabe);
- if (m.matches()) {
- LocalDate date = LocalDate.parse(m.group(3));
- Double fuel = Double.parseDouble(m.group(5));
- Double distance = Double.parseDouble(m.group(6));
- Double price = Double.parseDouble(m.group(4));
- if (m.group(2).equals("DIESEL")) {
- Car auto = new Car(m.group(1), FuelType.Diesel);
- Entry blubb = new Entry(auto, distance, price,
- fuel, date, m.group(5));
- logbook.addCar(auto);
- logbook.addEntry(blubb);
- } else if (m.group(2).equals("GASOLINE")) {
- Car auto = new Car(m.group(1), FuelType.Gasoline);
- Entry blubb = new Entry(auto, distance, price,
- fuel, date, m.group(5));
- logbook.addCar(auto);
- logbook.addEntry(blubb);
- } else {
- throw new IOException(
- "Bitte gueltigen Benzintyp eingeben.");
- }
- // Eine Zeile verarbeiten (Car-Objekt erzeugen,
- // Entry-Objekt
- // erzeugen)
- } else {
- throw new IOException(
- "Es wurde kein passender Eintrag gefunden.");
- }
- }
- }
- }
- is.close();
- return logbook;
- }
- public static void main(String[] args) {
- // bei load mit regulaeren ausdruecken arbeiten und match und pattern
- // und wenn ich etwas bei dem compile in klammern nehm dann zaehlt des
- // als gruppe
- // wenn ich aber mache (?:....) dann zaehlt es nicht als gruppe
- // ist hilfreich wenn man z.b. tier: (?:Katze|Hund) die klammer setzt
- // damit des oder richtig funktioniert.
- // Pattern p = Pattern
- // .compile("(\\d{2}\\.\\d{2}\\.\\d{4}) (\\d+\\.\\d{2}\u20ac), \\d+\\.\\d{2}l, \\d+\\.\\d{2}km, \\d+\\.\\d{2}\u20ac/km \\([^\\(\\)]+\\)");
- // Matcher m = p
- // .matcher("21.05.2014 56.53\u20ac, 37.38l, 560.30km, 0.10\u20ac/km (Ausflug)");
- //
- // System.out.println(m.matches());
- // if (m.matches()) {
- // System.out.println(m.group(1));
- // System.out.println(m.group(2));
- // }
- Pattern p = Pattern
- .compile("([0-9][0-9]\\.[0-9][0-9]\\.[0-9][0-9][0-9][0-9]);([0-9]+\\.[0-9][0-9]);([0-9]+\\.[0-9][0-9]);([0-9]+\\.[0-9][0-9]);([^\\(\\)]+)");
- Matcher m = p.matcher("03.06.2014;627.30;58.50;43.33;Festival");
- Pattern c = Pattern.compile("([^\\(\\)]+)\\[([^\\(\\)]+)\\]");
- Matcher cm = c.matcher("Audi [Diesel]");
- if (cm.matches()) {
- System.out.println(cm.group(2));
- }
- System.out.println(m.matches());
- if (m.matches()) {
- System.out.println(m.group(2));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement