Bonjourà tous voila je cherche à coder la fameuse commande grep de unix en java.
voici comment je voit cette commande :
execution :
java grep nom_du_mot fichier1 fichier2 ...
retour ecran :
en cas d'erreur : affichage du type d'erreur
sinon :
affichage :
fichier1 (numero_ligne : numero_mot_dans_ligne ) : mot
...
fichierN (numero_ligne : numero_mot_dans_ligne ) : mot
Mon programme compile parfaitement mais à l'execution j'ai :
je tape : java grep lol c:/testjava/src.txt
c:/testjava/src.txt (1 ; 1 ) : ol
c:/testjava/src.txt (2 ; 0 ) : ol
c:/testjava/src.txt (2 ; 0 ) : ol
c:/testjava/src.txt (2 ; 0 ) : ol
Beug dans la comparaison des fichiers
java.lang.NullPointerException
at java.lang.String.compareTo(Unknown Source)
at grep.numlign(grep.java:18)
at grep.recherche(grep.java:100)
at grep.main(grep.java:129)
c:/testjava/src.txt (1 ; 1 ) : lol
par exemple...
on remarque plusieurs bug :
- manque un 'l' à lol
- le numero de ligne et de fichier
- et un probleme dans la methode recherche
Là franchement je seche donc je demande un peu d'aide si possible sans trop changer l'algo du prog car il faut que je comprenne ou est mon erreur
voici le code :
import java.io.*;
import java.util.*;
public class grep{
public static int numlign ( String adr , String sb ){
int num = 0;
try{
// lecteur du fichier
BufferedReader fich = new BufferedReader ( new FileReader ( adr) );
// true si la ligne est trouvé
boolean fin=false;
String ligne;
// si la fin du fichier n'est pas atteind et le mot n'est pas trouvé
while ( ((ligne =fich.readLine())!=null)&&(!fin)){
num++;
if ( ligne.compareTo(sb)==0)
fin = true;
}
fich.close();
} catch ( NullPointerException e){
System.out.println("Beug dans la comparaison des fichiers");
e.printStackTrace();
}
catch ( FileNotFoundException e1){
System.out.println("Beug dans l'ouverture des fichiers");
e1.printStackTrace();
}
catch ( IOException e2){
System.out.println("Beug dans la lecture des fichiers");
e2.printStackTrace();
}
return num;
}
public static int numot( StringBuffer sb , String mot ){
int nbmot =1;
int taille =0;
String src = new String (sb);
taille = src.length();
char let;
String test ="";
for (int i=0;i<taille;i++){
//recupere le iéme char du mot
let = src.charAt ( i);
// un espace signifie un changement de mot
if ( let !=' '){
// concatenation du char
test = test+let;
}
else {
nbmot++;
// test si le mot cherche est trouvé
if ( mot.compareTo( test)==0){
break;
}else{
test ="";
String fichmot=new String ("./mot.txt");
// pour enregistrer le mot a chercher afin de l'avoir code en unicode
BufferedWriter rew = new BufferedWriter ( new FileWriter ( fichmot) );
BufferedReader rer = new BufferedReader ( new FileReader ( fichmot ) );
// lecteurs du fichiers a traiter
BufferedReader fichier = new BufferedReader ( new FileReader ( adr ) );
BufferedReader fich = new BufferedReader ( new FileReader ( adr ) );
// sera l'unicode du mot en cour de traitement
int ligne = 0;
//ecriture du mot a rechercher
rew.write (mot);
//fermeture du flux
rew.close();
// lecture du mot en unicode
int motbin = rer.read();
// fermeture du flux
rer.close();
while ( ligne != -1){
// lit en unicode
ligne=fichier.read();
// lit la ligne et la stock en string
String li = fich.readLine();
if (ligne == motbin){
StringBuffer sb = new StringBuffer ( fichier.readLine() );
// donne : nomdufichier (numero de laligne ; numero du mot ) : le mot
System.out.println(adr+" ("+numlign(adr,li)+" ; "+numot(sb,mot)+" ) : "+sb);
}
}
// fermeture des flux de lecture
fichier.close();
fich.close();
} catch ( NullPointerException e){
System.out.println("Beug dans la comparaison des fichiers");
e.printStackTrace();
}
catch ( FileNotFoundException e1){
System.out.println("Beug dans l'ouverture des fichiers");
e1.printStackTrace();
}
catch ( IOException e2){
System.out.println("Beug dans la lecture des fichiers");
e2.printStackTrace();
}
}
public static void main (String arg[]){
// lecture du mot entre en parametre
String mot = arg[0];
String fichier;