DatenBlöcke

Status
Nicht offen für weitere Antworten.

celloman

Aktives Mitglied
Hallo Leute

Ich habe einen Datei, die Datei habe ich in Blöcke geteilt.

Jetzt möchte ich die Blöcke solange lesen bis der Block zu ende ist!!

Kann mir da jemand helfen.

Mein Code:


Code:
class DatenBlock {

	
	public int No;
	
	public String Daten;
	
	public Vector KEs = new Vector();
	
	
	public void FormatDatenKEs()
	{
		
		String line = null;
		
		while( line=Daten. != null) 
        {
			int PartPos = line.indexOf("Part:");
			if( PartPos >= 0 )
			{
				System.out.println("string found");
			}
		}
		
	}
}
 
S

SlaterB

Gast
das hängt davon ab, was ein Block ist,
wann man weiß wann ein Block zu Ende ist,
wie man von Blöcken liest usw.

niemand kennt dein Programm,
in deinem Code wird 'Block' mit keiner Silbe erwähnt

----

wie kann man überhaupt "die [Mehrzahl?] Blöcke solange lesen bis der [eine?] Block zu Ende ist"?
 

celloman

Aktives Mitglied
Hallo

in dem String line sind die Daten drinn und die möchte ich Zeilenweise lesen und auf ein Word durchsuchen.

MFG
 
S

SlaterB

Gast
dann tue es oder stelle hier eine Frage, falls du eine hast ;)

falls du einen String mit mehreren Zeilen in verschiedene Zeilen auftrennen willst,
dann geht das z.B. mit
String[] zeilen = string.split("\n");
 

celloman

Aktives Mitglied
Ok meine Frage ist.

ich habe einen String line.

Wie kann ich den Stringinhalt in ein Buffer legen damit ich die Klasse BufferedReader verwenden kann??

ich brauche dieses ......readLine von der Klasse BufferedReader.

MFG
 
S

SlaterB

Gast
verwegener Plan, nimm lieber meinen split-Vorschlag,
oder die Scanner-Klasse oder StringTokenizer,

aber bitte:
Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        String st = "aa\nbb";
        StringReader sr = new StringReader(st);
        BufferedReader b = new BufferedReader(sr);
        System.out.println(b.readLine());
    }
}
 

celloman

Aktives Mitglied
Hallo

ich habe eine Classe Datenblock

In dem Datenblock habe ich einen String und die möchte ich zeile für Zeile lesen.geht das überhaupt??wie kann ich den String den überhaup lesen.normalerweise verwendet man readLine aber die existiert in dem Datenblock garnicht.
wie kann ich es herholen???
 

Murray

Top Contributor
Du hast also in einer Klasse Datenblock einen String. Meinst du damit, dass die Klasse diesen String in einer Membervariablen hält? Oder wo ist der String sonst versteckt?
Was meinst du mit "wie kann ich den String überhaupt lesen?" - willst du wissen, wie du an den in der Klassen Datenblock irgendwo vorhandenen String herankommst, um ihn anderswo im Programm zu verarbeiten?
 

celloman

Aktives Mitglied
Mein Code


Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

import java.io.File;

import java.util.Vector;
import java.io.StringReader;



class DatenKE {
	
	public int PartID;
	public int KEID;
	public String Matrix;
	
}





class DatenBlock {

	
	public int No;
	
	public String Daten;
	
	public Vector KEs = new Vector();
	
	
	public void FormatDatenKEs()
	{
		
		String line = null;
		 int c;
		 Reader sr;
		try {
			       sr = new StringReader;
			
			       sr = new StringReader(Daten);
			       while ((c = sr.read()) != -1) {
			       System.out.print((char)c);
			       }
			       sr.close();
			} catch (IOException e) {
			       System.out.println("Fehler beim Lesen des Strings");
			}

	}
}



public class ReadTest {
    
    /**
     * @param args the command line arguments
     */
     
    public static void main(String[] args)throws IOException{
        String line;                     //String line
        String value="";                //String mit einer unedlichen Länge
        
        BufferedReader input = null;
        
        try{ 
            File f = new File ("c:/test1.txt"); //die zu lesende Datei
            input = new BufferedReader(new FileReader(f)); //FileReader und FileWriter generieren
            
        }
        
        catch (IOException e) {
            System.out.println("Datei nicht vorhanden!");
            e.printStackTrace();
        }        
        
        
        Vector daten = new Vector();
        
        
        boolean InFrame = false;
        
        DatenBlock block = null;
        
        while((line = input.readLine()) != null) 
        {  //whileschleife um die Datei Zeilenweise auszugeben
        	
        	System.out.println(line);
           	
           	

			int PartPos = line.indexOf("MaFrame");
			
			if( PartPos >= 0 )
			{
				
				System.out.println("string found");
				
				if( block != null)
				{
					block.No = daten.size();
					
					daten.addElement(block);	
				}
				
				InFrame = true;
				
				block = new DatenBlock();
			}
        
        	if( InFrame )
        	{
        		if( block.Daten != null )
        			block.Daten = block.Daten + line + "\n";
        		else
        			block.Daten = "";
        		
        	}
            //value += line+ "\r\n";                      //übergabe der Stringinhalt line an value                
            //System.out.println(line);
        }
        
        if( block != null)
		{
			block.No = daten.size();
			
			daten.addElement(block);	
		}
        
       /* for( int i=0; i < daten.size(); i++ )
        {
        	DatenBlock tblock = (DatenBlock)daten.elementAt(i);
        	
        	System.out.println("This is MaFrame " + tblock.No);
        	System.out.println(tblock.Daten);
        	
        }*/
        input.close();                             //schließen von BufferWriter   
    }
}



ich vererbe den String Daten.

und in der Classe Datenblock möchte ich in dem Strin Daten Das Word Part suchen, das kommt aber erst später.

MFG
 

Murray

Top Contributor
Wenn du innerhalb der Klasse Datenblock etwas im String Daten suchst, dann sollte das doch mit String#contains gehen
Code:
if ( Daten.contains( "Word")) {
  System.out.println( "gefunden");
} else {
  System.out.println( "nicht gefunden");}
Wozu du dazu readLine zu brauchen meinst, ist mir immr noch nicht klar.
 

celloman

Aktives Mitglied
Habe es vorhin so versucht hat funktioniert. glaub ich mal ;-)

Code:
try {
018       f = new StringReader(s);
019       while ((c = f.read()) != -1) {
020         System.out.print((char)c);
021       }
022       f.close();
023     } catch (IOException e) {
024       System.out.println("Fehler beim Lesen des Strings");
025     }
 

fehlerfinder

Bekanntes Mitglied
celloman hat gesagt.:
Code:
class DatenBlock {
	public int No;
	public String Daten;
	public Vector KEs = new Vector();
}

public class ReadTest {	
             Vector daten = new Vector();
        
             block.No = daten.size();
	if( block.Daten != null )
        	block.Daten = block.Daten + line + "\n";
Ich hab da jetzt mal ganz wahllos ein paar Zeilen herausgefischt, denn zunächst mal darfst (solltest!) du nicht "block.No" einfach per Zuweisung setzen. Die Variable "private" sollte definiert und dann per Methode gesetzt werden. Ebenso verhält es sich mit dem Zugriff auf "block.Daten".

ich vererbe den String Daten.
Nein - das tust du nicht. Ein Vererben setzt so etwas wie "extends" in der Klassen-Definition voraus, also z.B.
Code:
public class SpeziellerDatenBlock extends DatenBlock

und in der Classe Datenblock möchte ich in dem Strin Daten Das Word Part suchen, das kommt aber erst später.
Bitte Leute, schreibt doch mal vernünftig. Soviel Zeit wird wohl eben sein. Darüber hinaus: Wenn die Suche momentan nicht wichtig ist, dann lass sie hier einstweilen weg. Das verwirrt nur (noch mehr).

Ansonsten setz dich mal ernsthaft mit dem Vorschlag von SlaterB auseinander, den String aufzusplitten. Oder anders ausgedrückt: Warum willst du UNBEDINGT readLine aus BufferedReader verwenden? Nur um einen simplen String zu verarbeiten, ist das sicher nicht angemessen. Drum liegt die Klasse ja auch in java.io und nicht in java.lang ;-)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben