Bestimmte Dinge aus Datei auslesen

  • Themenstarter Themenstarter Newman
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

Newman

Gast
Mojn erst mal,

Ich will aus einer Textdatei mit vielen Daten drin nur Textstellen auslesen wo am Ende zB ein .test steht

Ist das möglich ???
Wenn ja dann wie???
 
ich peile beides nicht so ganz 😳

ich will den Inhalt einer TXT auslesen aber nur da wo .test steht 😀
 
Da musste in meinem Coding folgendes ändern:

Code:
String[] suffix = { ".java", ".jsp" }
in
Code:
String[] suffix = { ".txt" }

Und dann gib in der Methode StreamLesen, wo folgendes steht:

Code:
rb.getString(

Das ein, was du suchen willst.
 
also eclpse findet einige fehler in deinem code
1.datnamen = DateiSuche(verzeichnis, suffix); The methode DateiSuche (String,String[]) is undefinend ...
2.int schleife = zeile.indexOf("rb.getString(".test);
test can not resolverd or is not a field

3.verzeichnis.substring(verzeichnis.lastIndexOf("\") + 1); String literal is not properly closed by a double quote
 
Also hier läuft es ohne Probleme, habs eben nochmal getestet.

Du wirst auch nicht alles brauchen, was da steht, denn ich verarbeite die Suchergebnisse ja noch zu ner neuen Datei.
 
habe jetzt folgenden code:
Code:
import java.awt.Component; 
import java.io.*; 
import java.io.DataInputStream; 
import java.io.FileWriter; 
import java.io.FileOutputStream; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.filechooser.FileFilter; 
import javax.swing.JFileChooser; 
import java.util.*; 
import java.util.Arrays; 
/** 
* 
* Programm zum Öffnen von Dateien, deren Auswertung und Erzeugung einer Datei mit den 
* Auswertungsergebnissen.

* 
* @author edelman2 
* @version 2.0 , 7.Juli 2004 
* 
*/ 
public class RBSucheAuto 
{ 
private static String dateien, verzeichnis; 
private static int kapazitaet, verz, dat; 
private static Vector vektor = new Vector(100); 
private static String[] suffix = { ".txt" }, nichtenthalten; 
private static Vector files, datnamen, ungenutzt; 
/** 
* Method main - Startet die Auswertung.

* Ruft das Listfeld auf 
* @param args 
*/ 
public static void main(String args[]) 
{ 
vektor.clear(); 
vektor.add(""); 
dateien = " "; 
Listfeld(); 

} 

/** 
* Method Listfeld - Erzeugt ein Listfeld in dem die Projekte, die ausgewertet werden können 
* gezeigt werden.. 
*/ 
public static void Listfeld() 
{ 

final JFrame frame = new JFrame("Liste der Auswählbaren Dateien"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

final String data[] = 
{ 
"Ende", 
"D:\\wsad\\TrimzahlenWeb", 
"D:\\wsad\\Michael", 
"D:\\wsad", 
"D:\\wsad\\Heiko1", 
"D:\\wsad\\RBTest" }; 

final JList liste = new JList(data); 
liste.addListSelectionListener(new ListSelectionListener() 
{ 
public void valueChanged(ListSelectionEvent e) 
{ 
if (e.getValueIsAdjusting()) 
{ 
System.out.println( 
"new Value is " + liste.getSelectedValue()); 
if (liste.getSelectedIndex() == -1) 
{ 
System.exit(0); 
} 
if (liste.getSelectedIndex() >= 0) 
{ 
Object obj = liste.getSelectedValue(); 
frame.setVisible(false); 
verzeichnis = obj.toString(); 
datnamen = DateiSuche(verzeichnis, suffix); 
String namen = datnamen.toString(); 
File[] datname = 
(File[]) datnamen.toArray( 
new File[datnamen.size()]); 

for (int i = 0; i < datname.length; i++) 
{ 
//Start der eigentlichen Analyse 
StreamOeffnen( 
datname[i].getAbsolutePath(), 
datname[i].getName()); 

} 

System.exit(0); 
} 
} 
} 

}); 
frame.getContentPane().add(liste); 
frame.pack(); 
frame.setVisible(true); 

} 
/** 
* Method StreamOeffnen - öffnet einen Stream zu der Datei, deren Pfad übergeben wird.

* @param datei - String (Pfad der Datei, die gelesen werden soll)

* @param name - String (Dateiname ohne Pfad) 
*/ 
public static void StreamOeffnen(String datei, String name) 
{ 
try 
{ 
//Erhält von der Main-Methode die zu analysierende Dateibezeichnung 
String datname = datei; 

//Öffnen der Streams 
FileInputStream indat = new FileInputStream(datname); 
InputStreamReader instream = new InputStreamReader(indat); 
BufferedReader stream = new BufferedReader(instream); 

//Übergabe zur Streamauswertung 
StreamLesen(stream, name); 

//Beenden der Streams 
indat.close(); 
instream.close(); 
stream.close(); 

} catch (Exception e) 
{ 
System.out.println("Fehler in Methode StreamOeffnen"); 
} 
} 
/** 
* Method StreamLesen - ließt den übergebenen Stream in einen Vektor ein.

* @param file - BufferedReader

* @param datei - String 
*/ 
public static void StreamLesen(BufferedReader file, String datei) 
{ 
try 
{ 
String ausgabe = ""; 
String zeile; 
String ziffern; 
String[] zeilen; 
int count = 1; 

//Ausgabe in der Konsole 
System.out.println(datei); 

//Schleife, die die Datei Zeilenweise erfasst 
while ((zeile = file.readLine()) != null) 
{ 
int schleife = zeile.indexOf("rb.getString(".msh); 
int anfang = 0; 
int temp = 0; 

//Schleife, die die Zeilen durchsucht 
while (schleife >= 0) 
{ 
if (temp == 0) 
{ 
temp = schleife; 
} 

int beginn = zeile.indexOf("rb.getString(", temp); 
temp = beginn + 1; 

if (beginn >= 0) 
{ 
anfang = zeile.indexOf("", beginn); 
} else 
{ 
schleife = -1; 
} 
int ende = anfang + 5; 

//Auslesen der gewünschten Informationen 
if (ende >= beginn) 
{ 
if (beginn >= 0) 
{ 
ende = zeile.indexOf(")", beginn); 

ziffern = zeile.substring(anfang + 1, ende); 
Integer Iziffern = 
new Integer(Integer.parseInt(ziffern)); 
int pos; 

//Ausgabe in der Konsole 
ausgabe = ziffern + " " + datei; 

//Befüllt den Vektor mit den Werten aus der Datei 
//inklusive der richtigen Dateinamen 
if ((pos = vektor.indexOf(Iziffern)) >= 0) 
{ 
Object obj = vektor.get(pos + 1); 
String wert = obj.toString(); 
if (wert.indexOf(datei) < 0) 
{ 
Object object = vektor.get(pos + 1); 
String einfueg = 
datei + ", " + object.toString(); 
vektor.set(pos + 1, einfueg); 
} 

} else 
{ 
vektor.add(Iziffern); 
vektor.add(datei); 
} 
//Ausgabe in der Konsole 
System.out.println(ausgabe); 
} 
} 
} 
count++; 
} 
zeilen = ErstellArray(vektor); 
StreamSchreiben(zeilen); 
} catch (Exception e) 
{ 
System.out.println("Fehler in Methode StreamLesen"); 
} 
} 
/** 
* Method ErstellArray - verarbeitet einen Vektor zu einem Array.

* Der Vektor wird sortiert und die Werte einheitlich formatiert.

* @param vektor - Ein Vektor

* @return String[] 
*/ 
public static String[] ErstellArray(Vector vektor) 
{ 
Vector neu = new Vector(100); 
ungenutzt = new Vector(100); 
String temp1 = "", temp2 = "", satz = ""; 
for (int i = 1; i < vektor.size(); i++) 
{ 
//Holt sich die Ziffernfolge aus dem Vektor 
Object obj1 = vektor.get(i); 
temp1 = obj1.toString(); 
i++; 

//Macht die Ziffernfolgen wieder 4-stellig 
for (int j = 0; j < temp1.length(); j++) 
{ 
if (temp1.length() < 4) 
{ 
temp1 = "0" + temp1; 
} 
} 
//Holt sich die Dateinamen aus dem Vektor 
Object obj2 = vektor.get(i); 
temp2 = obj2.toString(); 
temp1.trim(); 
temp2.trim(); 
satz = temp1 + " " + temp2; 
neu.add(satz); 
ungenutzt.add(obj1); 
} 
kapazitaet = neu.size(); 
//Sortiert den Vektor 
Collections.sort(neu); 
Collections.sort(ungenutzt); 

String[] vektorInhalt = new String[kapazitaet]; 
for (int i = 0; i < vektorInhalt.length; i++) 
{ 
vektorInhalt[i] = neu.get(i).toString(); 
} 
return vektorInhalt; 

} 

/** 
* Method ErstellArray2. 
* @param ungenutzt 
*/ 
public static void ErstellArray2(Vector ungenutzt) 
{ 
int kap = ungenutzt.size()-1; 
int grwert = 
Integer.parseInt(ungenutzt.get(kap).toString()); 
String[] vektor2 = new String[grwert]; 
Vector letzt = new Vector(100); 

for (int i = 0; i < kap; i++) 
{ 
int k = Integer.parseInt(ungenutzt.get(i).toString()); 
vektor2[k] = ungenutzt.get(i).toString(); 

} 

for (int i = 0; i < vektor2.length; i++) 
{ 
String temp; 
if (vektor2[i] == null || vektor2[i] == "") 
{ 
temp = "" + i; 

//Macht die Ziffernfolgen wieder 4-stellig 
for (int j = 0; j < temp.length(); j++) 
{ 
if (temp.length() < 4) 
{ 
temp = "0" + temp; 
} 
} 

letzt.add(temp); 
} 
} 
nichtenthalten = new String[letzt.size()]; 
for (int i = 0; i < nichtenthalten.length; i++) 
{ 
nichtenthalten[i] = letzt.get(i).toString(); 
} 

} 

/** 
* Method StreamSchreiben - Schreibt eine neue Datei mit den Ergebnissen.

* @param datei - String Array 
*/ 
public static void StreamSchreiben(String[] datei) 
{ 
try 
{ 
String projekt = 
verzeichnis.substring(verzeichnis.lastIndexOf("\") + 1); 
if (projekt.equals("wsad")) 
{ 
projekt = "AlleProjekte"; 
} 
File test = new File("Ergebnis_" + projekt + ".html"); 
FileOutputStream test2 = new FileOutputStream(test); 
OutputStreamWriter osw = new OutputStreamWriter(test2, "Cp1252"); 
ErstellArray2(ungenutzt); 
String temp = ErstellHTML(datei); 
osw.write(temp); 
osw.close(); 
} catch (Exception e) 
{ 
} 
}}
 
Bei dir fehlen Methoden.

Füge folgende Methode dazu, die andere kriegst du in dem nächsten Post:



Code:
/**
	 * Method DateiSuche - Sucht im übergebenen Verzeichnis alle Dateien.
	 * @param start - Verzeichnis in dem die Dateien sind
	 * @param extensions - Dateiendungen
	 * @return Vector - Vektor mit den Dateien, die untersucht werden müssen
	 */
	public static Vector DateiSuche(String start, String extensions[])
	{
		//Vektor zum speichern der zu bearbeitenden Dateien
		files = new Vector();
		//Stack zum Ablegen der Verzeichnisse
		Stack dirs = new Stack();
		File startdir = new File(start);
		//Prüfen ob Übergebenes File ein Verzeichnis ist
		if (startdir.isDirectory())
			dirs.push(new File(start));
		//Befüllen des Stacks und des Vektors
		while (dirs.size() > 0)
		{
			File dirFiles = (File) dirs.pop();
			//Liste aller Files in diesem Verzeichnis
			String s[] = dirFiles.list();
			if (s != null)
			{
				for (int i = 0; i < s.length; i++)
				{
					//Erstellt den Filenamen
					File file =
						new File(
							dirFiles.getAbsolutePath() + File.separator + s[i]);
					//Erhöht den Stack mit einem neuen Verzeichnis
					if (file.isDirectory())
					{
						dirs.push(file);
						verz++;
					}
					//Fügt dem Vektor die neue Datei hinzu, wenn sie die Kriterien erfüllt
					else if (match(s[i]))
					{
						files.addElement(file);
						dat++;
					}
				}
			}
		}
		return files;
	}
 
Was willst du denn mit den Ergebnissen der Suche machen, evtl brauchst du die fehlende methode gar nicht.
Ich will dir auch nciht dein komplettes Programm schreiben.

der zweite Fehler liegt an einem Kopierfehler, korrigiere folgende Zeilen in der Methode StreamLesen:

Code:
				int schleife = zeile.indexOf("rb.getString(");
				int anfang = 0;
				int temp = 0;

				//Schleife, die die Zeilen durchsucht
				while (schleife >= 0)
				{
					if (temp == 0)
					{
						temp = schleife;
					}

					int beginn = zeile.indexOf("rb.getString(", temp);
					temp = beginn + 1;

					if (beginn >= 0)
					{
						anfang = zeile.indexOf("\"", beginn);
 
jetzt ist hier was falsch else if (match(s))

match ist unterstrichen

anfang = zeile.indexOf(""", beginn); beginn double quote

verzeichnis.substring(verzeichnis.lastIndexOf("\") + 1); bei ("\") + 1); double quote
 
Anonymous hat gesagt.:
jetzt ist hier was falsch else if (match(s))

match ist unterstrichen

anfang = zeile.indexOf(""", beginn); beginn double quote

verzeichnis.substring(verzeichnis.lastIndexOf("\") + 1); bei ("\") + 1); double quote


Welche Methode , bzw welche Zeile bringt die Fehlermeldung.

Nochmals: Sag bitte was du mit dem gesuchten machen willst dann kann ich weiterhelfen. So zerhauen wir nur mein Programm und es geht nie!!!

[schild=12 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Ich geh Mittagessen! (Dauer ca.50 Min))[/schild]
 
Also die bestehende Datei an der Stelle verändern?

Das kann ich dir so nicht sagen, denn, wie du sicher an meinem Programm bemerkt hast, durchsucht dieses Verzeichnisse nach Dateien und schaut dann in den Dateien nach ob ein bestimmtest Textstück darin vorkommt und diese Dateinamen werden dann abgelegt.

Du müsstest in dem Fall, die Datei laden, den Text suchen (soweit gehts mit meinem Coding) und dann den Editor öffnen und die Datei auch dort öffnen und zum "Treffer" springen.

Das kann ich dir so spontan nicht sagen. In diesem Fall brauchst du außer den Methoden StreamOeffnen und Streamlesen keine der methoden, die in meinem Programm eingebaut sind.
 
du hast das doch in html umgewandelt oder??
das würde nämlich auch gehen
 
Ja aber ich öffne nicht die Datei.

Mein Programm sucht in einer JSP/Java Datei ob die ein oder mehrere Schlüsselbegriffe enthält, diese werden rausgesucht und der Dateinamen dann gespeichert, mit dem Begriff.

Ich ändere aber nichts an der Ausgangsdatei.
 
ich habe ja schon ein editor der die datei öffnen kan nur will ich die ja etwas "gefiltert haben"
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben