Pattern.Match Suche: For Schleife einbinden und in Liste schreiben

Sinatra

Mitglied
Hey,

ich habe folgende Problemstellung:

Ich möchte verschiedene .txt Dateien, die denselben Aufbau haben, nach bestimmten Informationen durchsuchen, und diese Informationen dann per XStream als XML Format abspeichern, so dass man Sie in Excel aufrufen kann.

Ich bin bereits soweit, dass ich eine beliebige Datei aiswählen kann, die gewünschten Informationen per Pattern.match herausfiltere, und diese in einer ArrayListe ausgeben kann. Die Elemente stehen dann so da: [Ergebnis1, ERg.2, erg. 3 ...]

Nun weiß ich nicht, wie ich jedes Einzelne Ergebnis einem String übergeben kann, wenn jede Textdatei eine unterschiedliche Anzahl von Ergebnissen hat? Mit einer For Schleife in irgendeiner Form eventuell?

Und danach möchte ich dann von jedem String wiederum mit einer For Schleife und mit Substring das Ergebnis noch einmal unterteilen, für die spätere XML Ausgabe.

Hier der bisherige Code:
Java:
package FileWandler;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFileChooser;


public class Auslesen{
	
private static String inhalt=new String("");
private static String s = new String("");


public static String holePfad()  // Benutzereingabe speichert den Pfad der gewünschten Datei zwischen
{
    String pfad = null;
	JFileChooser fc = new JFileChooser();
    fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int returnVal = fc.showOpenDialog(null);
    File f;
    if (returnVal == JFileChooser.APPROVE_OPTION)
    {
        f = fc.getSelectedFile();
        pfad = f.getPath();
    }
    return pfad;
}



public static String lesen(){  // Mit Hilfe des Pfads aus holePfad wird die Datei ausgelesen
	
	
	try {
		BufferedReader in = new BufferedReader(new FileReader(holePfad()));
		String zeile = null;
		while ((zeile = in.readLine()) != null) {
			
			inhalt = inhalt.concat(zeile); // Die Methode Auslesen.lesen gibt als String die Textdatei in einer langen Zeile zurück
		}
	
	
		
	} catch (IOException e) {
		e.printStackTrace();
		
	}
	
	return inhalt;
	}

	

public static List<String> felderfilter() {  // Hier filtere ich die Datei und sie wird als Liste<String> Returned
	 s = Auslesen.lesen(); // Hier wird der String eingelesen
	 Matcher matcher = Pattern.compile( "\\d?\\d?\\d?\\d?\\d\\p{Blank}..\\p{Blank}\\d\\p{Blank}\\p{Upper}\\p{Upper}\\p{Upper}..................................................\\p{Upper}\\p{Upper}\\p{Blank}.").matcher( ss );
	
	final List<String> result = new ArrayList<String>();
	while (matcher.find()) {
	    result.add(matcher.group());
	}
	return result;
	}


		public static void main (String[] args) {
			
		
		}

}




Ich habe es schon mal mit dieser For schleife versucht ( probeweise als Konsolenausgabe, da ich nicht weiß wie ich in eine Liste schreibe)

Java:
for (int i = 0; i < felderfilter().size(); i = i + 1) {
			
			System.out.println(felderfilter().get(i));

Da hat er auch jedes einzelne Ergebnis ausgegeben, jedoch hat er vor JEDEM Ergebnis 2(!) mal HOLEPFAD() aufgerufen.

Ich stecke nun fest.

Danke soweit!
 
Ich möchte verschiedene .txt Dateien, die denselben Aufbau haben, nach bestimmten Informationen durchsuchen, und diese Informationen dann per XStream als XML Format abspeichern, so dass man Sie in Excel aufrufen kann.
Wie geanu soll denn dein XML-File aussehen. Hast Du schon 'ne XSD oder wenigstens eine DTD dafür erzeugt?
Ich habe es schon mal mit dieser For schleife versucht ( probeweise als Konsolenausgabe, da ich nicht weiß wie ich in eine Liste schreibe)
Java:
for (int i = 0; i < felderfilter().size(); i = i + 1) {			
			System.out.println(felderfilter().get(i));
Da hat er auch jedes einzelne Ergebnis ausgegeben, jedoch hat er vor JEDEM Ergebnis 2(!) mal HOLEPFAD() aufgerufen.
Bist Du Dir im klaren darüber, wie eine
Code:
for
anweisung funktioniert?
Was meinst Du wie oft der Teil
Code:
i < felderfilter().size()
abgearbeitet wird?

Und allein die Tatsache, dass
Code:
felderfilter()
innerhalb der Schleife benutzt wird sollte Dich zum Nachdenken anregen: muss die Liste wirklich bei jedem Schleifendurchlauf aktualisiert werden?

bye
TT
 
Und wie mache ich es besser? Bezogen auf die IF Schleife
in dem Du
den Rückgabewert der Methode vor der Schleife einer lokalen Variable zuweist und diese in der Schleife verwendest. Deine IDE kann das übrigens automatisch z.B. Eclipse:
Methodenname inklusive
Code:
()
markieren <ctrl><1>->"extract local variable (replace all occurences)"

bye
TT
 

Neue Themen


Zurück
Oben