Datei_Blöcke

celloman

Erfahrenes Mitglied
Hallo

Ich möchte in einer Datei einen bestimmzen Abschnitt der von member_id bis Inline
geht in ein String block zuweisen. Funkts nicht :(

Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;


public class member_id {
	public static void main(String[] args) throws IOException {
		
		BufferedReader ers = null;
		String WRL_Datei;
		
		
		String cs = System.getProperty( "line.separator" );
		File fa = new File("C:\\simple_kinematics_03_asm.wrl"); // die zu lesende Datei
		ers = new BufferedReader(new FileReader(fa)); // FileReader 

		
		while ((WRL_Datei = ers.readLine()) != null) {
			
			boolean  bMemberId = false;
			boolean bInline = false;
			String block="";
			//System.out.println(WRL_Datei);
			
			
			
			if (WRL_Datei.indexOf("member_id")>=0){
				
				System.out.println("Yes");
				bMemberId = true;
				block="";
			}
			
			if(bMemberId && !bInline){
				
				
				block = block + ers.readLine();
				System.out.println(block);
			}
			
			if (WRL_Datei.indexOf("Inline")>=0){
				
		
				bInline = true;
				
			}
			
			
			if(bMemberId && bInline){
				
				System.out.println("Yes");
				block.indexOf("Transform");
				
			}
			
			
			
			
			
		}
			
		
	

		}
}
 
Als ausgabe bekomme ich nur diesen Zeichen zurück " }" obwohl zwischen member_id und Inline Einige Sachen dazwischen stehen.

Z.B.
} // Dies ist der Zeichen welches ich nur ausgelesen bekomme und die restlichen sind nicht da.

Transform {
rotation 0 0 -1 -0.193427
translation 0.00989949 0.00989949 0
children [

usw.
 
Ich hab nicht gesagt, dass ich dein Problem löse. Du kannst aber nich erwarten, dass jemand sich einen Code anschaut und schon direkt weiß, warum es nicht funktioniert. Man weiß ja nicht mal was nicht funktioniert.

Wenn man mal eine Datei postest, dann schau ich mir das mal an.

MFG

zEriX
 
Ich für meinen Teil habe noch nichteinmal genau verstanden, was du erreichen willst...

Besonders die letzte If-Anweisung verwirrt mich:

Java:
if(bMemberId && bInline){
    System.out.println("Yes");
    block.indexOf("Transform");
}

bMemberId ist true, wenn in der Zeile einmal "member_id" vorkommt... und bInline wird true, wenn in der selben Zeile "Inline" vorkommt... passiert dann aber trotzdem nichts, außer das "Yes" ausgegeben wird.

Naja, zumindest hier:
Java:
if(bMemberId && !bInline){
    block = block + ers.readLine();
    System.out.println(block);
}

Versuchst du die nächste Zeile auszulesen und dann auszugeben... Das heißt bei einer Datei:

Code:
member_id
  ID12345

Sollte hier ID12345 ausgegeben werden... Warum, wieso... Was willst du jetzt eigentlich wirklich?
 
Ok, vielleicht zu voreilig...

Du hast eine Datei und möchtest jetzt alles zwischen "member_id" und "Inline" in einen String packen? Wie ist die Datei aufgebaut... steht "member_id" und "Inline" immer in der selben Zeile, ist eine Zeile dazwischen od. n-Zeilen?

Also:

Code:
member_id selbe Zeile Inline

Code:
member_id
immer eine Zeile...
Inline

Code:
member_id
1. Zeile
2. Zeile
3. Zeile
n-Zeile
Inline
 
In einer Datei suche ich nach einer Zeile in dem member_id vorkommt.
Danach lese ich die Zeilen solange bis Inline kommt.

Den Inhalt zwischen Zwischen den Zeilen member_id und Inline möchte ich in ein String block reinschreiben.

MFG
 
Ich hab hier mal schnell was zusammen geschrieben, dass kannst du nach deinen bedürfnissen anpassen.

Java:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;


public class TestKlasse
{

  public static void main(String[] args)
  {
    BufferedReader reader = null;
    try
    {
      reader = new BufferedReader(new InputStreamReader(new FileInputStream("teste.txt")));
    }
    catch (FileNotFoundException e1)
    {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    
    ArrayList<String> list = new ArrayList<String>();
    String line;
    StringBuilder saveText = new StringBuilder();
    boolean save = false;
    try
    {
      while((line = reader.readLine())!= null){
        
        if(line.indexOf("member_id")!= -1){
          
          save = true;
          continue;
        }
        else if(line.indexOf("Inline")!= -1){
          save = false;
          list.add(saveText.toString());
          saveText.setLength(0);
        }
        
        if(save)
        {
          saveText.append(line).append("\n");
        }
        
        
        
      }
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    
    for(String s : list){
      System.out.println(s);
    }
    
  }
}

MFG

zEriX
 
Zuletzt bearbeitet:
Was schon mal gar nicht gehen kann - die Variablen
Java:
	boolean  bMemberId = false;
	boolean bInline = false;
	String block="";
sind alle Schleifenlokal, werden allso bei jedem Schleifendurchgang neu initialisiert. Diese solltest du also schon mal ausserhalb der while-Schleife definieren. Eine neue Zeile solltest Du vielleicht nur in der while-bedingung lesen, nicht bei den if Anweisungen noch mal. Und zum befüllen würde ich dir statt des Strings einen StringBuffer empfehlen, den du mit sb.append(zeile); erweiterst.

Ich hoffe die Hinweise helfen dir weiter um die Schleife korrekt umzuschreiben ;)

Edit: Ok, Zerix war schneller und deutlich umfangreicher ;)
 
Zuletzt bearbeitet:
Zurück