Aide pour coder grep en java

Fermé
Utilisateur anonyme - 10 févr. 2009 à 21:03
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 ="";

}
}

}
return nbmot;
}


public static void recherche ( String adr , String mot){
try{


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;

for (int i=1;i<arg.length;i++ ){
fichier = arg[i];
recherche ( fichier ,mot );

}


}

}


Merci à tout ceux qui pourrais me rep
A voir également: