Übungsaufgaben

Aufgabe36

Aufgabe36

by PEter Neuner -
Number of replies: 4
hai, ich versuche einen Textstring in einer Datei suchen zu lassen, hier der Code

import java.io.*;
import java.util.*;
public class Aufgabe36 {
public static int sucheString(String dateiname, String suchtext){
Vector<String> cont = new Vector<String> (50,10);
try {
BufferedReader br = new
BufferedReader (new
FileReader(dateiname));
String zeile;
while ((zeile=br.readLine())!=null) {
if (zeile.indexOf(suchtext)>=0)
return 1;
}
br.close();
}
catch (FileNotFoundException e){}
catch (IOException e){}
for (int i=(cont.size()-1);i>=0;i--){
System.out.println((String)cont.elementAt(i));
}
return 0;

}

public static void main (String[]args){
int a = sucheString("Test.java","public");
if (a==1)
System.out.println("Gesuchter String ist in der Datei vorhanden");
else System.err.println("Gesuchter String ist nicht in der Datei vorhanden");
}
}

Das Problem ist in der Test-Klasse findet er public nicht obwohl es ja drin steht in durch public class
public class Test {
public static void main(String []args){
int i[][]= new int [3][3];
System.out.println("Länge: "+i.length);
}
}

Hab auch versucht ob er vielleicht das nur in nem ausgegebenen Zustand findet, durch den System.out.println, aber das funktiniert auch nicht, er gibt immer die Fehlermeldung aus, die ich in Zeile 31 definiert hab, weiß jemand warum ?
In reply to PEter Neuner

Re: Aufgabe36

by Bernhard Hopfenmüller -
Prinzipiell würde er immer das tun

else System.err.println("Gesuchter String ist nicht in der Datei vorhanden");

da in deiner Suchklasse das Wort "Public" nicht genau einmal vorkommt sondern öfter.
Du hast if a==1, schreib lieber a=>1..

Ich hab das Problem dass er die Datei in der er suchen soll net findet.
Muss die im selben Ordner wie das Programm liegen?
In reply to Bernhard Hopfenmüller

Re: Aufgabe36

by PEter Neuner -
ja, das Gleiche Problem hab ich auch, weiß aber nicht wie man dne Pfad eingeben kann, damit kann man auf jeden Fall nachschauen wo er sucht

System.out.println(new File(".").getAbsolutePath()+"\n\n");

am Anfang der main-Methode


aber auch mit >= funktionierts nicht, was soll ich tun? Weiß jemand wie man den genauen Pfad angibt von der Datei, wo er suchen soll ?
In reply to PEter Neuner

Re: Aufgabe36

by Bernhard Hopfenmüller -
mh also hab nochmal dein code angschaut, meiner sieht ähnlich aus, nur dass ich zähle wie oft der string vorkommt, dh jede zeile wird auf den string geprüft wenn er gefunden wird, wird um eins erhöht und erst nach der schleife return ich den wert vom hochzählen.
nur dann macht auch das >=1 sinn, sorry des hab ich vorhin übersehen, des ==1 hätte schon gepasst bei deinem code wird ja nur auf einmal finde getestet.


Ich habs mittlerweile hinbekommen, wenn ich den kompletten Pfad zur Datei angebe:

static public void main(String[]args){

System.out.println("Geben sie den Suchstring ein");
String suchtext = Input.in.readString();
System.out.println("Der Text " + suchtext + " kommt "+sucheString("/home/mosfet/eclipse/workspace/Aufgabe36/src/suche.java",suchtext) + " mal vor.");


}


bei mir isses in Linux in Windows siehts dann zB so aus:

C:\Programme\Eclipse\Workspace....\test.java

Meine sucheString() bekommt dann genau wie bei dir den Dateinamen und den Suchstring.
Hoffentlich geht das bei dir auch ;)


In reply to Bernhard Hopfenmüller

Re: Aufgabe36

by Dominik Köppl -
Als erstes würde ich immer die catch-Blöcke mit sinnvollen Inhalt belegen wie e.printStackTrace(); oder ähnlichen, s.d. man bei einem Fehler auch gleich eine informative Fehlermeldung bekommt.

Zum Pfad:
Man unterscheidet zwischen absoluten Pfad (unter Linux z.B. /etc/local/bin oder unter Windows z.B. C:\programme\eclipse\) und relativen Pfad (Pfad ist dann relativ zum Projekt).
Gibt man also am Anfang kein '/' bzw. 'C:\' an, dann ist der Pfad relativ zum workspace/projekt Verzeichnis.
Konkret soll das heißen, falls wir unter /home/foo12345/workspace/meinprojekt unser Projekt abgespeichert haben, der Dateipfad 'file.dat' auf die Datei '/home/foo12345/workspace/meinprojekt' verweist.
Im Windows-Fall muss man beachten, dass der Backslash '\' immer als '\\' geschrieben werden muss, also z.B. "C:\programme\\eclipse\\datei.dat"