CSV-Datei (Spalt A -> Excel) in Array packen und auslesen

Status
Nicht offen für weitere Antworten.

Andre1978

Mitglied
Hallo liebe Forum-Besucher!

Habe ein Problem, weiss nicht mehr weiter, hoffe auf Hilfe.
Hier ist meine vorhandene CSV-Datei (kleiner Auszug):


A B C D
1. 00:00 ; 0.10 ; 0.05 ; 0.01
2. 00:01 ; 0.03 ; 0.04 ; 0.00
3. 00:02 ; 0.01 ; 0.03 ; 0.00
4. 00:03 ; 0.05 ; 0.04 ; 0.00
5. 00:04 ; 0.02 ; 0.03 ; 0.00
...
...
...

Ich möchte NUR die Werte aus Spalte 'A' entnehmen und in Text-Datei bzw. gleich in ein Double-Array speichern.
Anschließend die Werte aus B, C und letztendlich aus D entnehmen.

Wie mach ich das? Habe schon (BufferedReader und ArrayList probiert, aber ich kriege es nicht hin...)

Ich bitte um Hilfe. Lieben Dank im Vorraus!

Mit freindlichen Grüßen Andre1978
 
Das ist keine sinnvolle CSV Datei. Was ist denn der Separator für die Spalten?

Lies die Datei zeilenweise ein, suche den Index der ersten beiden ";" und nimm den Substring dazwischen, parse ihn als Double und speicher ihn in ein Array (oder erst Liste, die wächst dynamisch).

Ist eine nette Fingerübung ;-)
 
mit BufferedReader bekommst du Zeilen, diese nach ; splitten,

wenn irgendwas nicht bekannt ist solltest du schon genauere Fragen als 'kriege ich nicht hin' stellen,

und wenn du so eine genauere Frage wie 'wie kann ich mit BufferedReader einzelne Zeilen einlesen?' erstmal hast,
dann kannst du auch gleich versuchen, die Frage fast 1 zu 1 in google einzutippen,
evtl. Füllwörter entfernen und 'java' hinzufügen
 
Hallo FArt und SlaterB,
hier ein kleiner Auszug meiner Klasse:

package Diagramm;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class logfile {
public static void main(String[] args){
LineNumberReader file;
String line;
FileWriter writer;
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String datum = (sdf.format(cal.getTime()));
Calendar cal3 = Calendar.getInstance();
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd");
String datum3 = (sdf3.format(cal3.getTime()));
String datei = ("load."+datum+".csv");
try{
file = new LineNumberReader( new FileReader("G:/AFUSS/Workspace/load."+datum3+".log"));
writer = new FileWriter("G:/AFUSS/Workspace/load."+datum+".csv");
while ((line = file.readLine()) != null){
//String c = (line.replaceAll(",", ";"));
String c = (line.replace(",", ";"));
writer.write(Character.LINE_SEPARATOR);
writer.write(c);
System.out.println(c);// ---> Diese Ausgabe dient nur zur Kontrolle.
}
System.out.println("\nDie Datei: "+datei+" wurde erfolgreich erstellt!");
writer.close();
}
catch (IOException e){
System.out.print("Die Datei konnte nicht gefunden werden!");
}
}
}
 
und auf die bisherigen Tipps willst du dabei nicht näher eingehen
oder irgendwie erklären, was dein Programm mit der Sache zu tun haben könnte?

z.B. die log-Datei und die csv-Datei dort, die csv-Datei wird mit einem Writer anscheinend erst geschrieben,
ich dachte es geht um das Einlesen einer csv-Datei?
 
HIER MEINE LÖSUNG: DANKE NOCHMAL !!!!

package Diagramm;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class logfile {
public static void main(String[] args){
LineNumberReader file;
String line;
FileWriter writer;
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String datum = (sdf.format(cal.getTime()));
Calendar cal3 = Calendar.getInstance();
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd");
String datum3 = (sdf3.format(cal3.getTime()));
String datei = ("load."+datum+".csv");
try{
file = new LineNumberReader( new FileReader("G:/AFUSS/Workspace/load."+datum3+".log"));
writer = new FileWriter("G:/AFUSS/Workspace/load."+datum+".csv");
while ((line = file.readLine()) != null){
String c = (line.replaceAll(",", ";"));
writer.write(Character.LINE_SEPARATOR);
writer.write(c);
String[] spalten = c.split(";");
String spA = (spalten[0]);
String spB = (spalten[1]);
String spC = (spalten[2]);
String spD = (spalten[3]);

System.out.println(spA); // HUIJUIHUI-Alles klar 🙂
}
System.out.println("\nDie Datei: "+datei+" wurde erfolgreich erstellt!");
writer.close();
}
catch (IOException e){
System.out.print("Die Datei konnte nicht gefunden werden!");
}
}
}
 
Hallo nochmal liebe Forem-Besucher, erstmal vielen Dank für die schnelle und sehr hilfreiche Hilfe.
Ich habe noch ein (für einen für Euch wohl eher kleines Problem),
und zwar:

Ich möchte ein "String Array" in ein Double Array umwandeln, damit ich damit weiterarbeiten kann. Ich bitte um Hilfe zur Realisierung.

Danke im Vorraus. Gruß Andre1978
 
neues Array gleicher Größe erstellen,
in einer Schleife jeden Wert parsen, z.B. mit Double.parseDoube() und ins neue Array schreiben
 
TagesSicht[] ts = new TagesSicht[laenge];
while ((line = file.readLine()) != null){

double ts = Double.parseDouble(spA);
}
 
Das ist mein vorhandenes (nicht mehr änderbares double-Array names w)

Hier mein vorhandenes String-Array:

String spA = (spalten[0]);

Nun möchte ich zu einem double-Array umwandeln:

double w[]={ hier möchte ich meine 'Spalte A' reinbekommen };

please help. Thanks
 
das Wiederholen der Frage trifft auf meine beiden Anmerkungen kaum zu, oder?
naja, vielleicht weiß wer anders weiter..
 
Hier nochmal mein kompletter Code:

package Diagramm;

import java.awt.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class TagesSicht extends Frame{
private static final long serialVersionUID = 1L;
Leinwand zeich;
double werte[];
String texte[];
String beschriftungXAchse;
String beschriftungYAchse;
int i = 0;
int diagrammTyp;
public static void main (String[] args){
LineNumberReader file;
String line;
FileWriter writer;
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String datum = (sdf.format(cal.getTime()));
Calendar cal3 = Calendar.getInstance();
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd");
String datum3 = (sdf3.format(cal3.getTime()));
// String datei = ("load."+datum+".csv");
try{
file = new LineNumberReader( new FileReader("G:/AFUSS/Workspace/load."+datum3+".log"));
writer = new FileWriter("G:/AFUSS/Workspace/load."+datum+".csv");
System.out.println("Zeile:\tZeit:\t\t\tWert-1\t\t\tWert-2\t\t\tWert-3\n");
while ((line = file.readLine()) != null){
String c = (line.replaceAll(",", ";"));
writer.write(Character.LINE_SEPARATOR);
writer.write(c);
String[] spalten = c.split(";");
int laenge = file.getLineNumber();
String spA = (spalten[0]);String spB = (spalten[1]);
String spC = (spalten[2]);String spD = (spalten[3]);


TagesSicht[] ts = new TagesSicht[laenge];
while ((line = file.readLine()) != null){

// HIER MUSS DAS GESCHEHEN,WAS DU MIT GERATEN HAST,ABER WIE???
}
System.out.println(laenge+"\t"+spA+"\t\t\t"+spB+"\t\t\t"+spC+"\t\t\t"+spD);
}
System.out.println("\nDie Datei: "+datei+" wurde erfolgreich erstellt!");
writer.close();
}
catch (IOException e){
System.out.print("Die Datei konnte nicht gefunden werden!");
}
double w[] = {23000,25000,27000,25000,23000,21000,19000,21000,23000,25000,27000,29000,31000,33000,35000,
37000,39000,41000,43000,45000,47000,49000,51000,53000};
String b[] = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18",
"19","20","21","22","23","24"};
TagesSicht ms = new TagesSicht(w,b,"Minuten","Werte",0);
ms.show();
}
/** Konstruktor */
public TagesSicht(double[] diagrWerte, String[] diagrTexte, String xBeschrift, String yBeschrift, int diagrTyp){
//Werte setzen
werte = diagrWerte;
texte = diagrTexte;
beschriftungXAchse = xBeschrift;
beschriftungYAchse = yBeschrift;
diagrammTyp = diagrTyp;
init();
}
public void init(){
setTitle("Diagramm-Monatssicht");
Button weg = new Button("Fenster schließen");
weg.addActionListener(new FensterZu());
zeich = new Leinwand();
Panel unten=new Panel();
unten.setBackground(Color.gray);
unten.setLayout(new FlowLayout());
unten.add(weg);
setLayout(new BorderLayout());
add(zeich,BorderLayout.CENTER);
add(unten,BorderLayout.SOUTH);
pack();
}
public class Leinwand extends Canvas{
private static final long serialVersionUID = 1L;
public void paint(Graphics g){
//Zeichenbefehle
g.setFont(new Font("Tahoma", Font.PLAIN, 9));
g.translate(100,330);
int abstand = 0;
int xAbstand;
if(werte.length > 1)
xAbstand = (int)Math.round(400D / (werte.length - 1));
else
xAbstand = 0;
//senkrechte Linien
g.setColor(new Color(255, 255, 255));
int xWerte[] = new int[werte.length + 2];
for(i = 0; i < werte.length; i++){
g.drawLine(i * xAbstand, 0, i * xAbstand, -250);
xWerte = i * xAbstand;
}
xWerte = xWerte[i - 1];
xWerte[i + 1] = 0;
//y-Werte
//max berechnen
double max = werte[0];
for(i = 0; i < werte.length; i++)
max = Math.max(max, werte);
if(max < 0 ) max = 0; //sonst Fehler
double min = werte[0];
for(i = 0; i < werte.length; i++)
min = Math.min(min, werte);
double einheitenJePixel;
if(min < 0)
einheitenJePixel = (max+Math.abs(min)) / 250D;
else
einheitenJePixel = max/250D; //Einheiten je 1px ausrechnen
//wenn es negative Werte gibt --> x-Achse entsprechend verschieben
if(min < 0)
g.translate(0,(int)Math.round(min / einheitenJePixel));
//Beschriftungen
///max neu ausrechnen, falls negativ
for(i = 0; i < werte.length; i++)
max = Math.max(max, werte);
g.setColor(Color.black);
g.drawString("" + max, - 45, (int)((-1) * max / einheitenJePixel));
g.drawString("" + min, - 45, (int)((-1) * min / einheitenJePixel));
//y-Werte aus Werte/eJePx berechnen -1
int yWerte[] = new int[werte.length + 2];
for(i = 0; i < werte.length; i++)
yWerte = (-1) * (int)Math.round(werte / einheitenJePixel);
yWerte = 0;
yWerte[i + 1] = 0;
g.setColor(Color.orange);
abstand = (int)Math.round((400D-15D) / werte.length);
if(abstand < 2) abstand = 5; //mind. 1px Balkenbreite, mind. 1px Abstand zwischen Balken
xWerte[0] = 10;
for(i = 1; i < werte.length; i++)
xWerte = xWerte[i-1] + abstand;
for(i = 0; i < werte.length; i++){
if(yWerte > 0)
g.fill3DRect(xWerte, 0, abstand / 2, Math.abs(yWerte), true);
else
g.fill3DRect(xWerte, yWerte, abstand / 2, Math.abs(yWerte), true);
}
//Beschriftungen
g.setColor(Color.black);
for(i = 0; i < werte.length; i++){
int q = 15;
if(werte >= 0) q = 15; else q = -5;
g.drawString(texte ,xWerte, q);
}
//Koordinatenkreuz
//x-Achse
g.drawLine(-5, 0, 410, 0);
g.drawLine(405, -2, 410, 0);
g.drawLine(405, 2, 410, 0); //Pfeilspitze
g.drawString(beschriftungXAchse, 415, 0);
//wenn es negative Werte gibt --> x-Achse entsprechend verschieben
if(min < 0)
g.translate(0, (-1) * (int)Math.round(min / einheitenJePixel));
//y-Achse
g.drawLine(0, 5, 0, -270);
g.drawLine(-2, -265, 0, -270);
g.drawLine(2, -265, 0, -270); //Pfeilspitze
g.drawString(beschriftungYAchse, -25 ,-275);
}
public Dimension getMinimumSize(){ //Fenstergröße
return new Dimension(600, 400);
}
public Dimension getPreferredSize(){
return getMinimumSize();
}
}
//Methoden zum Setzen der Werte für das Diagramm
public void setBeschriftungXAchse(String xBeschriftung){
beschriftungXAchse = xBeschriftung;
}
public void setBeschriftungYAchse(String yBeschriftung){
beschriftungYAchse = yBeschriftung;
}
public void setWerte(double [] diaWerte){
werte = diaWerte;
}
public void setTexte(String [] diaTexte){
texte = diaTexte;
}
}


Ich muss das erzeugte String Array in ein Double-Array umwandeln........ Brauch dringend Hilfe. Bitte
 
noch ein kostenloser Tipp:

vergiss vorerst dein ellenlanges Programm und arbeite mit
Code:
public class Test
{
    public static void main(String[] args)
    {
        String[] x = new String[] {"2.3","4.3"};
    }
}

solange du aber zu konkreten Tipps wie
"double[] erstellen, Schleife, Strings einzeln umwandeln"
nur
"ich nix wissen, bitte fertige Lösung" schreibst,
werde ich persönlich nicht deine Arbeit erledigen
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben