CSV in Java einbinden und Rechnung

blueman189

Mitglied
Hallo,
habe eine Frage und zwar soll ich mit der Tabelle( siehe Anhang) eine csv erstellen welche in java ausgelesen werden soll. Dabei interessieren hier die Gesamterträge pro Sorte und die Erträge pro Sorte in den ersten 10 Jahren jeweils in den Angaben pro Baum (avg werte). Jetzt meine Frage wie ich das in java am klügsten programmieren kann. Ich würde die csv mit einem buffered reader auslesen, weiß leider nicht wie ich dies am besten machen kann um die verechnungen gut hinzubekommen. Die Daten in der Tabelle sind 2 apfelsorten und die anzahl meint die bäume.

code:
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class Apple{

private List<String> AppleData;

public static void main(String[] args) {

try {
List<String> AppleData = Files.readAllLines(Paths.get("D:\\Apples\\apple.csv"));
for(String line : AppleData) {
System.out.println(line);
String[] vals = line.split(",");
}
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
 

Anhänge

  • upload_2018-9-25_13-10-12.png
    upload_2018-9-25_13-10-12.png
    30,8 KB · Aufrufe: 36

Dimax

Top Contributor
In deinem string [] vals sind alle daten schon gespeichert .Also
Java:
int gesamtErtragBrauburn=0;
int gesamtErtragVonLady=0;
for(int i=0;i<vals.length;i++){
if(vals[i].equals("Brauburn"){
gesamtErtragBrauburn=gesamtErtragBrauburn+Integer.valueOf(vals[i+3]);
}
else if(vals[i].equals("Pink Lady"){......... usw
so ungefähr,sonst testen
 

Robat

Top Contributor
Ich würde wohl eher eine eigene Klasse dafür erstellen.
Java:
public class Variety {
    private String name;
    private int amount;
    private int age;
    private int totalAmount;

    public Variety(String name, int amount, int age, int totalAmount) {
        this.name = name;
        this.amount = amount;
        this.age = age;
        this.totalAmount = totalAmount;
    }

    ....
}
Dann hast du am Ende eine List<Variety> und kannst dir zB. mit der Java8 Stream-API relativ einfach den Gesamtertrag pro Sorte errechnen lassen
Java:
long totalBraunburn = varieties.stream().filter(variety -> variety.getName().equals("Braunburn")).mapToInt(Variety::getTotalAmount).sum();
Ggf könnte man für den Namen (was ja der Typ ist) auch ein eigenes Enum erstellen um nicht alle möglichen String-Werte zuzulassen.
 

mihe7

Top Contributor
Java:
import java.util.*;
import java.nio.file.*;
import java.util.stream.*;

public class Test {
    public static class Apple {
        public final String species;
        public final int count;
        public final int age;
        public final int yield;

        public Apple(String species, int count, int age, int yield) {
            this.species = species;
            this.count = count;
            this.age = age;
            this.yield = yield;
        }

        public static Apple of(String[] data) {
            String species = data[0];
            int count = Integer.parseInt(data[1]);
            int age = Integer.parseInt(data[2]);
            int yield = Integer.parseInt(data[3]);
            return new Apple(species, count, age, yield);
        }
    }

    public static Apple aggregate(Apple a, Apple b) {
        return new Apple(b.species, a.count + b.count, 0, a.yield + b.yield);
    }

    public static void main(String[] args) throws Exception {
        List<Apple> apples = Files.lines(Paths.get("./data.csv"))
            .skip(1)
            .map(line -> Apple.of(line.split(",")))
            .collect(Collectors.toList());

        Apple zero = new Apple("", 0, 0, 0);

        Map<String,Apple> sumsAll = apples.stream()
            .collect(Collectors.groupingBy(apple -> apple.species,
                    Collectors.reducing(zero, Test::aggregate)));
        Map<String,Apple> sumsLast10Years = apples.stream()
            .filter(a -> a.age < 10)
            .collect(Collectors.groupingBy(apple -> apple.species,
                    Collectors.reducing(zero, Test::aggregate)));

        System.out.printf("Sorte,Anzahl,Ertrag,Ertrag/Baum,Zeitraum\n");
        sumsAll.values().forEach(a -> {
            System.out.printf(Locale.US,
                "%s,%d,%d,%.2f,komplett\n", a.species, a.count, a.yield,
                (float)a.yield/a.count);
        });
        sumsLast10Years.values().forEach(a -> {
            System.out.printf(Locale.US,
                "%s,%d,%d,%.2f,10 Jahre\n", a.species, a.count, a.yield,
                (float)a.yield/a.count);
        });
    }
}
 

blueman189

Mitglied
Hab das jetzt wie würd ich jetzt weitermachen für obige aufgabe.


import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Apple{

private File file;
private List<String> AppleData;


public Apple(String filename) {
file = new File(filename);
AppleData = new ArrayList<String>();
}
public void parse() {
try { BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while ((line = reader.readLine()) != null) {
String [] apfelBaum = line.split(";");
AppleData.add(line);}
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}

public List<String> getAppleData(){
return AppleData;
}
}
 

mihe7

Top Contributor
Kannst Du Deinen Code bitte in [code=Java]...[/code] setzen?

Java:
String [] apfelBaum = line.split(";");
AppleData.add(line);
Wieso splittest Du die Zeile, wenn Du sie dann ungesplittet zur Liste hinzufügst?
 

blueman189

Mitglied
So habe jetzt den komplette Code geschrieben. Jedoch bekomm ich eine Ausgabe die ich nicht haben möchte.
Was habe ich falsch gemacht?
Ausgabe in Eclipse: upload_2018-9-25_23-12-25.png
Code:
Java:
public class TestExcel
        {
            public double gesamtertragSorte1 = 0;
            public double gesamtertragSorte2 =0;
            public double durchschnittSorte1 =0;
            public double durchschnittSorte2 =0;
            private ArrayList<ApfelsorteZelle> saft = new ArrayList<ApfelsorteZelle>();
          
            public TestExcel()
            {
                try
                {
                    BufferedReader FileReader = new BufferedReader(new FileReader("D:\\Testat\\testat.csv"));
                  
                    String zeile = "";
                    String[] ersteZeile = FileReader.readLine().split(",");
                  
                    boolean richtigerSyntax = prüfeRichtigerDateiensyntax(ersteZeile);
                    while(null != (zeile = FileReader.readLine()) && richtigerSyntax)
                    {
                        String[] aktuelleZeile = zeile.split(",");
                        if(!sucheZelleMitSorte(aktuelleZeile))
                        {
                        fügeNeueSorteHinzu(aktuelleZeile);
                        }
                    }
                  
                    int counter = 0;
                    while(saft.size() > counter)
                    {
                        saft.get(counter).berechneDurchschnittsertragInDenErsten10JahrenProBaumProSorte();
                        saft.get(counter).berechneDurchschnittsgesamtertragProBaumProSorte();
                        if(counter == 0)
                        {  
                            gesamtertragSorte1=saft.get(counter).getGesamtertrag();
                            durchschnittSorte1 = saft.get(counter).getErtragInDenErsten10Jahren();
                            durchschnittSorte1 = Math.round(100.0*durchschnittSorte1)/100.0;
                            gesamtertragSorte1=Math.round(100.0*gesamtertragSorte1)/100.0;
                            //System.out.println(saft.get(counter).getGesamtertrag());
                        }
                        else if(counter == 1)
                        {
                            //System.out.println(saft.get(counter).getGesamtertrag());
                            gesamtertragSorte2=saft.get(counter).getGesamtertrag();
                            durchschnittSorte2 =saft.get(counter).getErtragInDenErsten10Jahren();
                            durchschnittSorte2 = Math.round(100.0*durchschnittSorte2)/100.0;
                            gesamtertragSorte2=Math.round(100.0*gesamtertragSorte2)/100.0;
                        }
                        else
                        {
                            System.out.println("unerwartet");
                        }
                        //System.out.println(saft.get(counter).getGesamtertrag());
                        counter++;
                    }
                }
                catch (FileNotFoundException e)
                {
                    e.printStackTrace();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
      
                String html="<div><h1> Programmierung 3 </h1><p>Testat 3:</p1>"
                        + "<table border = 1>"
                        + "<tr>"
                        + "<th>Sorte</th>"
                        + "<th>Gesamtertrag</th> "
                        + "<th> Erträge_in_10_Jahren</th> "
                        + "</tr> "
                        + "<tr> "
                        + "<td>Braeburn </td><td>";
          
                String html2="</td>"
                        + "<td>";
          
                String html3="</td></tr><tr>"
                        + " <td>Pink Lady </td> <td>";
                String html4 = "</td><td>";
                String html5 = "</td> </tr> </table> </div>";
                  
                File f = new File ("D:\\Testat\\webanwendung.html");
              
                try
                {
                    BufferedWriter bw = new BufferedWriter (new FileWriter (f));
                    bw.write(html);
                    bw.write (Double.toString(gesamtertragSorte1));
                    bw.write(html2);
                    bw.write(Double.toString(durchschnittSorte1));
                    bw.write(html3);
                    bw.write(Double.toString(gesamtertragSorte2));
                    bw.write(html4);
                    bw.write(Double.toString(durchschnittSorte2));
                    bw.write(html5);
                    bw.close ();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
              
                System.out.println(gesamtertragSorte1);
                System.out.println(gesamtertragSorte2);
                System.out.println(durchschnittSorte1);
                System.out.println(durchschnittSorte2);
              
            }
            private void fügeNeueSorteHinzu(String[] aktuelleZeile)
            {
                ApfelsorteZelle neueApfelsorte = new ApfelsorteZelle(aktuelleZeile[0], Integer.parseInt(aktuelleZeile[1]),
                        Integer.parseInt(aktuelleZeile[2]), Integer.parseInt(aktuelleZeile[3]));
                saft.add(neueApfelsorte);      
            }
          
            private boolean prüfeRichtigerDateiensyntax(String[] ersteZeile)
            {
                if(!ersteZeile[0].equals("Sorte") || !ersteZeile[1].equals("Anzahl") || !ersteZeile[2].equals("Alter")
                    || !ersteZeile[3].equals("Gesamtertrag")) {
                    System.out.println("Diese Datei hat falschen Syntax.");
                    return false;
                }
                return true;
              
            }
          
            private boolean sucheZelleMitSorte(String[] aktuelleZeile)
            {
                boolean bereitsVerarbeitet = false;
                int n_teZelle = 0;
                while(!bereitsVerarbeitet && !saft.isEmpty() && saft.size() > n_teZelle)
                {
                    if(saft.get(n_teZelle).getName().equals(aktuelleZeile[0]))
                    {
                        fügeDieseZeileHinzu(saft.get(n_teZelle), aktuelleZeile);
                        bereitsVerarbeitet = true;
                        return true;
                    }
                    n_teZelle++;
                }
                return false;
            }

            private void fügeDieseZeileHinzu(ApfelsorteZelle apfelsorteZelle, String[] aktuelleZeile)
            {
                apfelsorteZelle.fügeZuGesamtertragHinzu(
                        Integer.parseInt(aktuelleZeile[3]), Integer.parseInt(aktuelleZeile[1]));
              
                apfelsorteZelle.fügeZuErtragInDenErsten10JahrenHinzu(
                        Integer.parseInt(aktuelleZeile[3]), Integer.parseInt(aktuelleZeile[1]),
                        Integer.parseInt(aktuelleZeile[2]));
            }

            public class ApfelsorteZelle
            {
              
                int anzahlTeiler = 0;      
                private String name;
                private double gesamtertrag = 0;
                private double ertragInDenErsten10Jahren;
              
                public ApfelsorteZelle(String name, int anzahlBäume, int alter, double gesamtertrag)
                {
                    this.name = name;
                    fügeZuGesamtertragHinzu(gesamtertrag, anzahlBäume);
                    fügeZuErtragInDenErsten10JahrenHinzu(gesamtertrag, anzahlBäume, alter);
                }
              
                public String getName()
                {
                    return name;
                }
              
                public double getGesamtertrag()
                {
                    return gesamtertrag;
                }
              
                public double getErtragInDenErsten10Jahren()
                {
                    return ertragInDenErsten10Jahren;
                }
              
                public void fügeZuGesamtertragHinzu(double zahl, int anzahlBäume)
                {
                    gesamtertrag = gesamtertrag + zahl / anzahlBäume;
                    anzahlTeiler++;
                }
              
                public void fügeZuErtragInDenErsten10JahrenHinzu(double zahl, int anzahlBäume, int alter)
                {
                    if(alter < 10) {
                        ertragInDenErsten10Jahren = ertragInDenErsten10Jahren + zahl / anzahlBäume;
                    } else {
                        ertragInDenErsten10Jahren = ertragInDenErsten10Jahren + zahl / anzahlBäume / alter * 10;
                    }
                }
              
                public void berechneDurchschnittsgesamtertragProBaumProSorte()
                {
                    gesamtertrag = gesamtertrag / anzahlTeiler;
                }
              
                public void berechneDurchschnittsertragInDenErsten10JahrenProBaumProSorte()
                {
                    ertragInDenErsten10Jahren = ertragInDenErsten10Jahren / anzahlTeiler;
                }
            }  
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
NoXiD Access Datenbank in java einbinden ohne ODBC treiber zu erstellen Datenbankprogrammierung 5
Joy jdbcodbc brücke - einbinden einer Datenbank in Java Datenbankprogrammierung 4
N MySQL DB in Java einbinden ? Datenbankprogrammierung 2
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
F Java SQLite Error Datenbankprogrammierung 19
F SQL Datenbank an Java Code anbinden Datenbankprogrammierung 5
J Java 8 und Microsoft Access Database-Dateien(mdb) Datenbankprogrammierung 1
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
M Verbindung von Java Programm zur Acccess Datenbank (mdb-Datei) Datenbankprogrammierung 0
M Feedback für neues Buch über "Java und Datenbanken" erwünscht Datenbankprogrammierung 8
M Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz Datenbankprogrammierung 7
D Zeit von SQL nach Java Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben