Problem mit Filereader und filewriter

Status
Nicht offen für weitere Antworten.

bennymoe

Neues Mitglied
tach zusammen,

ich hab schon mal n paar mal hilfe bekommen von euch leutz und hoffe das ihr mir in dem fall auch weiterhelfen könnt,

ich möchte ne grafik schreiben in nem java-applet die einen kursverlauf regelmäßig darstellt und aktualisiert.

ich hab erma schon n problem mit dem kack - filereader :

Code:
FileReader f;
        int c ;

       
         
           try {
        	   f = new FileReader("ist.txt");
               while ((c = f.read()) != -1) {
                  System.out.print((char)c);
                  
               }
               
			f.close();
		} catch (IOException e1) {
			
			e1.printStackTrace();
		}


ich will in dem fall c ( also c is glaub ich der inhalt der datei ist.txt ) haben. aber wie soll ich die werte aus c aus der schleife rausbekommen, mit break; hab ichs schon versucht. ich will ja mit den werten aus c weiterarbeiten.

für ne grafik die einen kursverlauf darstellt, sind ja auch die vergangenheitswerte erforderlich, sonst gibts ja keinen kurs sondern nur immer wieder einen kleinen strich,

also die x-achse stellt die zeit dar

und die y-achse den euro-wert des kurses

und das applet soll die werte ausm filereader nehmen und den bereits erreichten kursverlauf in die grafik schreiben, dann soll der neu errechnete euro-wert daraufgezeichnet werden.

für mich als noob ne echt komplizierte sache


und am ende brauch man ja noch n filewriter um den neuesten verlauf in eine datei zu schreibn, die datei ist.txt .

ich hab auch n problem mit der formatierung des textes beim filewriter, is echt schwer zu praktizieren

vielleicht hab ich mich auch unklar ausgedrückt, ich möchte n applet schreiben, dass mir den aktuellen kursverlauf eines wertpapieredepots anzeigt, so wie man im i-net den kurs einer aktie an einer grafik verfolgen kann, würd ich das gerne für den gesamtwert eines depots anzeigen lassen, am besten immer in jahresabschnitten, die y-achse soll von 0-100.000 EURO gehen und die x-achse vom 1.jan 2007 bis 12.Dez 2007

aber schauts euch selbst an :

Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


@SuppressWarnings("serial")



public class graffuerfonds extends Applet {
	static double krass;
	static String datum;
    public void paint(Graphics g) {
    	
    	// Konfigs für Anzeige (Farbe,usw.)
    	
    	final int BREITE = 1024, HOEHE = 768;
    	
    	g.setColor(Color.blue);                       
        g.fillRect(0,0,BREITE,HOEHE);                  


        g.setColor(Color.white);    
        
    	// Grafhistoriendatei einlesen
    	
    	FileReader f;
        int c = 0;

       
         
           try {
        	   f = new FileReader("ist.txt");
               while ((c = f.read()) != -1) {
                  System.out.print((char)c);
                  
               }
               
			f.close();
		} catch (IOException e1) {
			
			e1.printStackTrace();
		}
		
		
		
		
		int testwert=36429; 

// das is ein teswert, weil mir die berechnungen beim ganzen versuchen und probieren     
//zu lange daueren
        
        Date d = new Date();
        datum=""+d;
      
      
      krass=0;
      
      if(krass==0)
      {
      
      for (Matcher m = Pattern.compile("Jan [0-9]+").matcher(datum); m.find(); )
      {datum = datum.substring(m.start(), m.end());
     
      Matcher n = Pattern.compile("[0-9]+").matcher(datum);
     if (n.find()) {
     graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
     
      break;}
      
      
  break;
  }
      
      }
      
      
      
      
      if(krass==0)
      {
      
      for (Matcher m = Pattern.compile("Feb [0-9]+").matcher(datum); m.find(); )
      {datum = datum.substring(m.start(), m.end());
     
      Matcher n = Pattern.compile("[0-9]+").matcher(datum);
     if (n.find()) {
     graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
     
      break;}
      
      
  break;
  }
      }
      
      if(krass==0)
      {
      
      
      for (Matcher m = Pattern.compile("Mar [0-9]+").matcher(datum); m.find(); )
      {datum = datum.substring(m.start(), m.end());
     
      Matcher n = Pattern.compile("[0-9]+").matcher(datum);
     if (n.find()) {
     graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
     
      break;}
      
      
  break;
  }
      }
      
      
      if(krass==0)
      {
      
      for (Matcher m = Pattern.compile("Apr [0-9]+").matcher(datum); m.find(); )
      {datum = datum.substring(m.start(), m.end());
     
      Matcher n = Pattern.compile("[0-9]+").matcher(datum);
     if (n.find()) {
     graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
     
      break;}
      
      
  break;
  }
      
      
      }
      
      if(krass==0)
      {
      
      
      for (Matcher m = Pattern.compile("May [0-9]+").matcher(datum); m.find(); )
      {datum = datum.substring(m.start(), m.end());
     
      Matcher n = Pattern.compile("[0-9]+").matcher(datum);
     if (n.find()) {
     graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
     
      break;}
      
      
  break;
  }
      
      }
      
      if(krass==0)
      {
      
      
      
      
      
      
      
      
        for (Matcher m = Pattern.compile("Jun [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
      }
        
        if(krass==0){
        	
        
        
        
        
        for (Matcher m = Pattern.compile("Jul [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
        
        			
        			}
        if(krass==0)
        {
        
        
        
        
        for (Matcher m = Pattern.compile("Aug [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
        
        }if(krass==0)
        {
        
        
        for (Matcher m = Pattern.compile("Sep [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
        
        
        }if(krass==0)
        {
        
        
        
        for (Matcher m = Pattern.compile("Oct [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
        
        
        }if(krass==0)
        {
        
        
        for (Matcher m = Pattern.compile("Nov [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
        
        }if(krass==0)
        {
        
        
        
        for (Matcher m = Pattern.compile("Dec [0-9]+").matcher(datum); m.find(); )
        {datum = datum.substring(m.start(), m.end());
       
        Matcher n = Pattern.compile("[0-9]+").matcher(datum);
       if (n.find()) {
       graffuerfonds.krass = Double.parseDouble( datum.substring(n.start(), n.end()).replace(':' , '.')  );
       
        break;}
        
        
    break;
    }
        
        }
        
        
      
      
        
      
       
       // 780 zähler breit
      
       // 365 tage a jahr
        
   
        
        double zaehlerprotag=780/31;
        
        double anzeigwertx=(zaehlerprotag*krass);
        
        
        
       
        // 100000 Euro entsprechen 580 y-punkte
        
        double ypunkt = 172.41379310344827586206896551724;
      
        double anzeigwert =  (testwert/ypunkt)-580;
        
        
        
        
        g.drawLine(100, 590/* unten links der nullpunkt */, (100+((int)anzeigwertx)), (int)-anzeigwert/*
																									 * der
																									 * endpunkt
																									 * der
																									 * betrag
																									 * anzeigt
																									 */);
        // Schriftangabe für Anzeige
    	
    	
    	String s="Monat May, Startbeginn ...";
    	String s2="Kurs seit 10.04.2007 in EUR";
    	String s4="0 EUR";
    	
    	g.setColor(Color.GREEN);
    	String sf=""+((int)krass);
    	g.drawString(sf, (100+((int)anzeigwertx)), 620);
    	String s3=testwert+" EUR";                 
    	g.drawString(s3, 2, (int)-anzeigwert);
    	g.setColor(Color.red);
    	g.drawString(s,630,570);   
        g.drawString(s2,120,20); 
    	g.setColor(Color.WHITE);
    	
    	String s5="50000 EUR";
        String s6="100000 EUR";
        g.drawString(s6,2,20);
    	
        g.drawString(s5,2,290);
    	
    	g.drawString(s4,2,580);
      
    	String ss="0";
    	String sd="31";
        String half="15";
    	g.drawString(ss,100,620);
    	g.drawString(sd,770,620);
    	g.drawString(half,435  , 620);
    	
      // Die Linien des Grafen
        
        
        // x-Linie
        g.drawLine(100,590/* unten links */,790,590/* unten rechts */);
        
        
        // y-linie
        g.drawLine(100,10/* oben links */,100,590/* unten links */);
     
        
        
        // g.drawLine(20, 590, 20,600 );
        
        for(int i=100 ; i<=790 ; i=i+20 )	{
        	
        g.drawLine(i, 590, i,600 );}
        
        for(int i=20 ; i<=590 ; i=i+20 )	{
        	
            g.drawLine(100, i, 86,i );
            								}
        // Grafhistoriendatei wird geschrieben
        
        String x=""+(100+((int)anzeigwertx));
        String y=""+((int)-anzeigwert);
        String tag=""+((int)krass);
        
      
        	
        
        FileWriter f2;

        try {
           f2 = new FileWriter("ist.txt");
           f2.write("\n"+x+" "+y+" "+tag);
           f2.close();
        } catch (IOException e) {
           System.out.println("Fehler beim Erstellen der Datei");
        }
      
        
        							
   
    
    
    
    }

}
 
ich will in dem fall c ( also c is glaub ich der inhalt der datei ist.txt ) haben. aber wie soll ich die werte aus c aus der schleife rausbekommen, mit break; hab ichs schon versucht. ich will ja mit den werten aus c weiterarbeiten.

gibts vielleicht ne seite für dummies mit n paar erweiterten optionen für den filereader und filewriter?
 
waere sehr hilfreich wenn du den inhalt der txt datei mit angibst.

dein code ist ja soweit nicht uebel, c hat irgendwann sicher den wert den du suchst, pruefe das doch ab mit if() und wenn die bedingung zutrifft mach einfach ein

Code:
return c;
 
return c; geht nicht eclipse sagt geht nicht in void methoden und im applet kann ich nicht public static void main.... machen.

der inhalt sind drei zahlen bsp. 234(x-achse) 252(y-achse) 5(tag)

ich würd gern den drei zahlen jeweils eine variable zuweisen
 
Wenn du c mit return zurückgeben willst muss deine Methode als "int" deklariert werden, nicht mit "void".

Wie sind die Zahlen voneinander getrennt? Mit Komma, Slash, Leerzeichen, untereinander ??
 
Gast hat gesagt.:
return c; geht nicht eclipse sagt geht nicht in void methoden und im applet kann ich nicht public static void main.... machen.

der inhalt sind drei zahlen bsp. 234(x-achse) 252(y-achse) 5(tag)

ich würd gern den drei zahlen jeweils eine variable zuweisen


jo dann mach halt keine void sondern ne int methode.

hinsichtlich inhalt waere es gut wenn du genau den inhalt der text file wiedergibst.
was heisst es sind 3 zahlen? getrennt durch was? zeilemumbruch oder trennzeichen oder wie?
 
Marcel_Handball hat gesagt.:
Wir ergänzen uns ja ideal, solnze. ^^

lol ja ich sollte mir erst den text ueberlegen dann antwort aufmachen dann merk ich das auch wenn einer zwischendurch mein schmarn schon gepostet hat *g*
 
Noch einige Anmerkungen zu deinem Programm, bennymoe:

Die Paint-Methode ist (eigentlich) ausschließlich zum Zeichen.
Wozu ist der 3. Wert in der *.txt Datei?
Warum sind es nicht mehrere Zahlenpaare in der Datei (du willst doch einen Verlauf)?
 
ok stimmt die unterteilung in untermethoden hab ich irgendwie vergessen,

und die 3 zahlen (eigentlich brauch ich ja glaub ich nur zwei, werd die 3 (tag) löschen)

sind getrennt mitm leerzeichen

also so; 342 632 8

es sind nicht mehr zahlenpaare weil ich noch keine hab, stimmt wohl ich müsste probehalber noch n paar einabauen

also sieht die datei ist.txt so aus :

353 464.343 454.343 344

der punkt is das trennzeichen für neue x und y werte und leertaste für die trennung zwischen x und y-wert

ich hab das mitm return versucht aber immer wenn ich in der paint-methode die zahlen probemäßig ausgeben möchte kommt null raus

Code:
	static String datum,str;
	
	public String shit(){
		
		
	String str=null;
	
	BufferedReader buffy;
	try {
		buffy = new BufferedReader(new FileReader("ist.txt"));
		
		while ((str = buffy.readLine()) != null) {
			   System.out.println(str);
			   
			   
			  return str;
			}
	
	
	
	
	} catch (FileNotFoundException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	//System.out.println(str);
	return str;
	}
 
ok dat problem hab ich auch gelöst, jetzt hab ich ne datei mit ist.txt:

353 353.353 634.534 634

so und nun sollen alle werte ins koorinatensystem gezeichnet werden, jeder neue wert automatisch mit
 
Also das einzig schwierige ist ja die einzelnen Daten aus der Textdatei so auszulesen, dass du auf jede einzelne Koordinate gezielt zugreifen kannst. Ich hab das folgendermaßen gelöst (wohl nicht die eleganteste Methode):

Code:
import java.io.*;

public class Test{

	public static void main(String args[]) {
		
		Reader r = null;
		String daten="";
		int anzahl=1;
		int xwerte[];
		int ywerte[];
		
		try{r = new FileReader("original.txt");
			
			for(int c; ((c = r.read()) != -1);){
				daten=daten+(char) c;
				if( (char)c == ';'){anzahl++;}
			}
			System.out.println("Daten aus Datei holen war erfolgreich:\n");
			
		}catch(IOException e){System.err.println("Fehler beim Datenaustausch");}
		finally{
			if(r != null){try{r.close();}catch(IOException e){}}
		}
		
		//------------------------------------------------------------------------
		
		xwerte = new int[anzahl];
		ywerte = new int[anzahl];
		
		int stelle=0;
		String zahl="";
		
		for(int i=0; i<daten.length(); i++){
			if(daten.charAt(i)!=';'){
				if(daten.charAt(i)!=' '){zahl+=daten.charAt(i);}
				  else{int x=Integer.parseInt(zahl); xwerte[stelle]=x; zahl="";}
			}
			else{int y=Integer.parseInt(zahl); ywerte[stelle]=y; stelle++;zahl="";}
		}
	}
}

Jetzt hast du die einzelnen x und y Werte in einem array und kannst damit arbeiten (in paint).

Der Inhalt der txt datei ist folgender:
Code:
1 2;3 4;5 6;
Wichtig ist das am Ende immer ein Semikolon steht.
 
boah dat has du in der kurzen zeit geschrieben, danke

um sowat in der kurzen zeit zu schreiben und zu chekcen,

wie... wie lange bist du schon mit prog-sprachen dabei??

2-3 jarhe??

ich hab noch mühe die logik zu checken,

aber schaut sehr hilfreich aus,

vielen dank ersma
bin noch n noob info im 1 sem. und vorher nie geproggt
 
So, nun ist es etwas übersichtlicher:

Code:
import java.io.*;

public class Test{

	public static void main(String args[]) {
		
		BufferedReader b = null;
		int anzahl=0;
		String line;
		int x[];
		int y[];
		
		try{b = new BufferedReader(new FileReader("original.txt"));
			
			while ((line = b.readLine()) != null){anzahl++;}
			
		}catch(IOException e){System.err.println("Fehler beim Datenaustausch");}
		finally{
			if(b != null){try{b.close();}catch(IOException e){}}
		}
		
		//------------------------------------------------------------------------
		
		x = new int[anzahl];
		y = new int[anzahl];
		b = null;
		int stelle = 0;
		
		try{b = new BufferedReader(new FileReader("original.txt"));
			while ((line = b.readLine()) != null){
				String zahlenpaar[]=line.split(" ");
				x[stelle]=Integer.parseInt(zahlenpaar[0]);
				y[stelle]=Integer.parseInt(zahlenpaar[1]);
				stelle++;
			}
       
		}catch(IOException e){} 
		finally{if(b != null){try{b.close();}catch(IOException e){}}}
		
  		/*
            for(int i=0; i<anzahl; i++){
              System.out.println("X-Wert:" + x[i]);
            }
        */ Zur Kontrolle
	}
}

(Der erste Teil über dem Strich überprüft, wie viele Zahlenpaare es gibt [für die Größe des Arrays wichtig].
Der zweite Teil liest dann die Zahlenpaare aus.)

Die Werte stehen also wie gesagt in den beiden Arrays x und y: x[0] und y[0] sind ein Zahlenpaar, usw.
Auf diese Weise sieht auch die Textdatei viel übersichtlicher aus, da die Werte untereinander stehen:

Code:
1 2
3 4
5 6
(Noch weniger Code bräuchte man, wenn man statt Arrays Listen nimmt)


Programmieren tue ich schon seit einigen Jahren (sehr viel selbst angeeignet. Java hab ich in der Schule erst seit 9 Monaten (bin in der 11. Klasse); aber man lernt ja durchs ausprobieren / selbst anwenden.

Ich lese zur Zeit das Buch "Java ist auch eine Insel", sehr zu empfehlen, wenn du noch länger mit Java zu tun hast.
(auch als Online-Version🙂
www.galileocomputing.de/openbook/javainsel6/

Mfg
 
dat buch ja kenn ich, haben mir die profs empfolen,

aber bei amazon kost dat 50 ocken,
kann als student kein geld kacken,

gibts dafür irgendwo studentenrabatt oder so?

leihen is auch irgendwie scheisse

java, nun ja meine erste sprache,
von java mal abgesehen. welche sprachen sind denn noch die "wichtigsten" und modernesten die arbeitsmarkttechnisch lohnenswert zu studieren und lernen sind?

etwa c#
oder der oldie c++
oder visual basic (lernen wir auch bald)

apropo lernen haste auch vor zu studieren wenn du inner 11.klasse erst bist, respekt für rpogspr *schleim
 
@Gast
Das Buch kannst du kostenlos runterladen :roll:

von java mal abgesehen. welche sprachen sind denn noch die "wichtigsten" und modernesten die arbeitsmarkttechnisch lohnenswert zu studieren und lernen sind?
Man studiert keine Programmiersprachen, man verwendet sie.
Wirtschaftlich interessant sind vor allem Java, COBOL und C/C++.
Später kommt eventuell C# dazu.
 
hallo

ich bin fast fertig nur eine sache noch

Code:
		String p = null;
		
for (int l=0 ; l<k.anzahl; l++)


{
		
		p =k.x[l]+" "+ k.y[l];
	System.out.println(p);
	FileWriter f2;

	 try {
	 f2 = new FileWriter("ist.txt");
	 f2.write(p);
	 f2.close();
	 } catch (IOException e) {
	 System.out.println("Fehler beim Erstellen der Datei");
	 }
		
}

ich möchte das er der variablen p die gesamten daten zuweist die in der schleife gesammelt werden. aber das klappt nich bei system.out.... gibt er für p 10 werte aus aber in die datei schreibt er nur die letzte zeile.

außerdem würd ich gerne noch dem p etwas nach der schleife noch hinzufügenmzb.b (p+"quelle"+x+y)
also das die werte von p da stehen
und am schluss noch quelle

zb.b. so
442 235
243 325
352 523
quelle

mit dem befehl return p inner exra methode hab ichs schon versucht gibt nur die letzte zeile aus, also wie kann ich das "schleifenergebnis" nutzen also nach der schleife
 
Erstelle und schliesse den FileWriter f2 halt ausserhalb der Schleife. Jetzt öffnest du ja dauernd ein File, überschreibst das alte, und schliesst es wieder. :bahnhof:
 
aber ausserhalb der schleife geht er nicht die zahlenreihe von k.anzahl durch, und das is ja gerade der witz, er soll alle zahlenreihen durchgehen mithilfe der schleife und in die variable p schreiben, zustätzlich zur schleife würd ich gerne zu p noch die variablen x und y anhängen, also nach dem schleifendurchgang,

mein problem ist das er mithilfe von return p; dem returnbefehl nur die letzte zahlenreihe weitergibt und nicht alle in der schleife gezählten


solche befehle hab ich auch schon versucht die das unterbinden köntnen

Code:
for (int l=0 ; l<k.anzahl; l++)


{
		
		p=k.x[l]+" "+ k.y[l];
		
	
	if(l==k.anzahl)
	{
         p=x+" "+y;
         
		break;
		
	}
	else
		continue;
}

aber es funktioniert halt nich wie kann ich das gesamte schleifenergebniss speichern und inne variable sichern und ausserhalb der schleife das ergebnis nutzen
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben