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



## Andre1978 (26. Nov 2008)

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


----------



## FArt (26. Nov 2008)

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 ;-)


----------



## SlaterB (26. Nov 2008)

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


----------



## Andre1978 (26. Nov 2008)

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!"); 
	    } 
    } 
}


----------



## SlaterB (26. Nov 2008)

hmm, spannend


----------



## Andre1978 (26. Nov 2008)

Bitte um Hilfe, wie ich aus der Spalten A (aus allen Zeilen)
in ein Array separieriert  speichern kann...
Danke!


----------



## SlaterB (26. Nov 2008)

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?


----------



## Andre1978 (26. Nov 2008)

Ich habe das Problem gelöst !!
Vielen Dank für den Tip SlaterB, Du bist spitze!!!


----------



## SlaterB (26. Nov 2008)

ui, unerwartet


----------



## Andre1978 (26. Nov 2008)

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!"); 
	    } 
    } 
}


----------



## padde479 (26. Nov 2008)

Hi,

schau Dir dochmal CSVReader und CSVWriter an. Vielleicht hilft Dir das ja weiter.


----------



## Andre1978 (26. Nov 2008)

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


----------



## SlaterB (26. Nov 2008)

neues Array gleicher Größe erstellen, 
in einer Schleife jeden Wert parsen, z.B. mit Double.parseDoube() und ins neue Array schreiben


----------



## Andre1978 (26. Nov 2008)

Versteh ich nicht....


----------



## Andre1978 (26. Nov 2008)

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

	    			double ts = Double.parseDouble(spA);
	    		}


----------



## SlaterB (26. Nov 2008)

verstehe nicht, was du daran nicht verstehst


----------



## Andre1978 (26. Nov 2008)

Sorry, ich bin PHP Profi! Aber in Java bin ich Neuling 
Bitte hilft mir.....


----------



## SlaterB (26. Nov 2008)

ich könnte jetzt


			
				SlaterB hat gesagt.:
			
		

> und auf die bisherigen Tipps willst du dabei nicht näher eingehen [..]?


oder auch


			
				SlaterB hat gesagt.:
			
		

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


wiederholen, aber das dürfte auch so bekannt sein..


----------



## Andre1978 (26. Nov 2008)

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


----------



## FArt (26. Nov 2008)

du musst einen Index mitführen und die einzelnen Werte entsprechend im Array eintragen.


----------



## Andre1978 (26. Nov 2008)

int laenge = file.getLineNumber();


----------



## SlaterB (26. Nov 2008)

das Wiederholen der Frage trifft auf meine beiden Anmerkungen kaum zu, oder?
naja, vielleicht weiß wer anders weiter..


----------



## Andre1978 (26. Nov 2008)

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_


----------



## SlaterB (26. Nov 2008)

noch ein kostenloser Tipp:

vergiss vorerst dein ellenlanges Programm und arbeite mit

```
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


----------



## Andre1978 (26. Nov 2008)

Werd schon irgendwie klarkommen. Danke trotzdem!


----------



## Andre1978 (2. Dez 2008)

Alles ok, habe es nun besser als erwartet geschafft! Viel Dank für Eue Hilfe!





			
				Andre1978 hat gesagt.:
			
		

> Werd schon irgendwie klarkommen. Danke trotzdem!


----------

