# Datei parsen



## Martin00 (13. Mrz 2008)

Hallo, 

ich sitze gerade an einer Sache, wo ich noch nicht so recht weiter weiß. Vielleicht kann mir ja dabei jemand helfen. Und zwar habe ich eine Textdatei mit folgenden Aufbau:

vorher: datei.txt

wert1=*Auto*
wert2=*Motorrad*
wert3=<tag>*wert1*</tag>
wert4=Schiff
wert5=<tag>*wert2*</tag>

Ich möchte nun die ganze Datei einlesen und die Werte, die zwischen den Tags sich befinden, hier wert1 und wert2 durch die entsprechend rechte Seite von wert1 und wert2 ersetzen. Der Tag soll dabei wegfallen.

So soll es nachher aussehen.

nachher: datei.txt

wert1=Auto
wert2=Motorrad
wert3=Auto
wert4=Schiff
wert5=Motorrad

Ich weiß nicht genau wie der Code dazu sein müsste, einlesen der Datei klappt schon, nur das parsen noch nicht. Hat jemand eine Idee? Wäre echt super. 

Gruss

Martin


----------



## Martin00 (14. Mrz 2008)

Nachtrag: Mein Programmcode zum meinem oben genannten Problem sieht bis jetzt folgendermaßen aus: Mir fehlt halt noch das parsen der Werte.


```
public static void main(String[] args) throws IOException {
		// TODO Automatisch erstellter Methoden-Stub

		String s[] = new String[20];
		BufferedReader in = new BufferedReader(new FileReader("datei.txt"));
		String zeile  = null;
		String[] str;				
		
		int j = 1;
		while ((zeile = in.readLine()) != null) {
						
			str = zeile.split("=");
			s[j] = str[1];
			System.out.println("s[j] " + s[j]);			
			
                // suche das entsprechende Tag und entferne die Tags

			if (s[j].matches(".*<tag>.*")){
				int i1 = s[j].indexOf("<tag>")+5;
				int i2 = s[j].indexOf("</tag>");
				String s2 = s[j].substring(i1, i2);
						
				
				
			}
			
			String s1 = s[j];
			
			
			FileWriter fw = new FileWriter("datei2.txt", true);
                        BufferedWriter w= new BufferedWriter(fw);
                        w.write(str[0]+"="+s1);
                        w.newLine();
                        w.close(); 
			
			
			j++;
             }
     }
}
```


----------



## Murray (14. Mrz 2008)

Erzeuge eine HashMap<String,String> und packe da beim zeilenweisen Lesen die einfachen Key/Value-Pairs (also die Zeilen ohne Tag) rein.
Wenn Du dann auf ein Tag triffst, dann kannst Du mit dem Inhalt des Tags als Key in die HashMap greifen und bekommst den Wert - das funktioniert natürlich nur, sofern die Zeilen mit dem Tag hinter den entsprechenden Definitionszeilen kommen; ist das nicht sichergestellt, dann musst Du die Datei zweimal durchgehen.


----------



## Guest (14. Mrz 2008)

Hi, 

danke für den Tip, leider habe ich mit Hashmaps noch nicht soviel gemacht, wie würde das Codetechnisch aussehen?

Gruss

Martin


----------



## Murray (14. Mrz 2008)

HashMap tags = new HashMap<String, String>();


Ablegen eines einfachen Wertes:
tags.put( tagName, wert);

Auslesen eines Tags:
tags.get( tagName);

//EDIT: Typos


----------



## Martin00 (14. Mrz 2008)

Hi,

super danke für die schnelle Hilfe. Habe es jetzt hinbekommen. 

Gruss

Martin


----------

