[java ,linux] comment gérer un truc comme ça ?

comment gérer un truc comme ça ? [java ,linux] - Programmation

Marsh Posté le 15-01-2002 à 10:25:15    

je veux faire un programme qui lise un fichier data.txt  
en tappant la ligne de commande :
 
java monprog < data.txt
 
j'aimerais juste savoir comment recupérer le nom "data.txt" dans mon prog java(je sais comment ouvrir le fichier etc).
 
merci

Reply

Marsh Posté le 15-01-2002 à 10:25:15   

Reply

Marsh Posté le 15-01-2002 à 10:32:44    

il faut que tu regardes dans ta liste argv[]. c comme en C (peut etre t'en a jamais fais ...)
 
En gros:

Code :
  1. public static void main(int argc, char []argv)
  2. {
  3.     String nomFichier = argv[1];
  4. }


 
Bon je suis plus sur que ça soit l'element 1 du tableau. Si c comme en C, normalement tu as :
argv[0] : le nom du prog avec le chemin complet
arg[1] : le premier argument
argv[2] : le deuxiememe etc etc
 
Et dans argc tu as le nombre de parametre. C pas mal de faire une verif au debut de ton prog du nombre de parametre :

Code :
  1. if (argc !=2)
  2. {
  3.     System.err("Mauvais parametre.\n" );
  4.     exit(-1);
  5. }


 
Voila j'espere t'avoir aidé  :hello:

Reply

Marsh Posté le 15-01-2002 à 10:35:44    

petoulachi a écrit a écrit :

il faut que tu regardes dans ta liste argv[]. c comme en C (peut etre t'en a jamais fais ...)
 
En gros:

Code :
  1. public static void main(int argc, char []argv)
  2. {
  3.     String nomFichier = argv[1];
  4. }


 
Bon je suis plus sur que ça soit l'element 1 du tableau. Si c comme en C, normalement tu as :
argv[0] : le nom du prog avec le chemin complet
arg[1] : le premier argument
argv[2] : le deuxiememe etc etc
 
Et dans argc tu as le nombre de parametre. C pas mal de faire une verif au debut de ton prog du nombre de parametre :

Code :
  1. if (argc !=2)
  2. {
  3.     System.err("Mauvais parametre.\n" );
  4.     exit(-1);
  5. }


 
Voila j'espere t'avoir aidé  :hello:  




 
oui ,je connais le systeme des arguments ,mais la il doit y avoir un truc avec le < il faut pas passer par les arguements je pense sinon il y aurait :
 
java monprog data.txt
 
et dans ce cas tu aurais parfaitement raison il faudrait recupérer data.txt dans arg[0].

 

[edtdd]--Message édité par Drakkeng--[/edtdd]

Reply

Marsh Posté le 15-01-2002 à 10:35:55    

Ba avec le tableau de String passé en paramatre a Main:
public void (main String args[])
args[0]=java
args[1]=monprog
args[2]=<
args[3]=data.txt
 
non?

Reply

Marsh Posté le 15-01-2002 à 10:39:13    

Aurel a écrit a écrit :

Ba avec le tableau de String passé en paramatre a Main:
public void (main String args[])
args[0]=java
args[1]=monprog
args[2]=<
args[3]=data.txt
 
non?  




 
oui tu donne la meme solution que petoulachi ça marche mais c'est pas comme ça que cette ligne de commande s'interprete sous linux je capte pas le < ça doit etre une histoire de tube ou je ne sais quoi .

Reply

Marsh Posté le 15-01-2002 à 10:43:20    

ouais j'avais pas vu les autres reponses avant...
 
et en collant ?? :
java monprog <data.txt

Reply

Marsh Posté le 15-01-2002 à 10:50:44    

le "<" est un operateur de redicrection.
En effet je l'avais pas vu.
 
Heu par contre je sais plus dans quel sens ça marche. le < redirige vers l'argument suivant ?
Tu peux pas nous eclaircir un peu ? (pourquoi tu dois faire comme ça ...)

Reply

Marsh Posté le 15-01-2002 à 10:52:57    

Aurel a écrit a écrit :

Ba avec le tableau de String passé en paramatre a Main:
public void (main String args[])
args[0]=java
args[1]=monprog
args[2]=<
args[3]=data.txt
 
non?  




 
Non faux. En Java le nom du programme n'est pas passé en paramètre. Donc si tu écris
 
java mon prog < data.txt
 
public static void main(String args[])
 
args va contenir
 
args[0]=<
args[1]=data.txt


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 15-01-2002 à 10:55:39    

Drakkeng a écrit a écrit :

je veux faire un programme qui lise un fichier data.txt  
en tappant la ligne de commande :
 
java monprog < data.txt
 
j'aimerais juste savoir comment recupérer le nom "data.txt" dans mon prog java(je sais comment ouvrir le fichier etc).
 
merci  




 
le < a de l'importance ? Si oui voici une piste
 

Code :
  1. public static void main(String args[])
  2. {
  3.     if (args.length < 2)
  4.     {
  5.        System.out.println("missing arguments" );
  6.        System.exit(-1);
  7.     }
  8.     if (args[0].equals("<" ))
  9.     {
  10.          String myFile = args[1];
  11.          // launch the program with myFile ...
  12.     }
  13.     else
  14.     {
  15.          // what you will do if < is missing
  16.     }
  17. }

 

[edtdd]--Message édité par darklord22--[/edtdd]


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 15-01-2002 à 10:56:37    

premièrement, ni "java" ni le nom de la classe ne sont présent dans le tableau d'argument (on est pas en C) :  
arg[0] renvoit le 1er argument passé à la classe.
 
ensuite, sous unix ou linux, '<' sert à rediriger le contenu d'un fichier vers l'entrée standard du process. donc, pour lire le contenu de ton fichier en tapant java monProg < data.txt, tu n'as qu'à lire le flux System.in
 
 
si ce que tu veux c'est lire le contenu d'un fichier passé en paramètre, tu n'as qu'à faire java monProg data.txt, et dans ta classe un truc du genre :
 
import java.io.*;
...
 
Reader fichier = new BufferedReader(new FileReader(arg[0]));
String ligne=fichier.readLine();
while (ligne != null) {
   // tu fais ton traitement avec la ligne du fichier
   ligne=fichier.readLine();
}
fichier.close();


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2002 à 10:56:37   

Reply

Marsh Posté le 15-01-2002 à 10:56:38    

darklord22 a écrit a écrit :

 
 
Non faux. En Java le nom du programme n'est pas passé en paramètre. Donc si tu écris
 
java mon prog < data.txt
 
public static void main(String args[])
 
args va contenir
 
args[0]=<
args[1]=data.txt  




 
Ouais m'en rappelais pu.
Dis darklord, tu fais du java pour le plaisir?
parceque je pense que c pas trop ton job et a chaque fois qu'y un topic java tu sautes dessus.
Excuses su je suis curieux mais je faisais du java y'a 4 mois et ca me manque.

Reply

Marsh Posté le 15-01-2002 à 10:59:23    

Aurel a écrit a écrit :

 
 
Ouais m'en rappelais pu.
Dis darklord, tu fais du java pour le plaisir?
parceque je pense que c pas trop ton job et a chaque fois qu'y un topic java tu sautes dessus.
Excuses su je suis curieux mais je faisais du java y'a 4 mois et ca me manque.  




 
Je suis développeur professionnel en technologie Java (J2EE, Servlet, EJB, JavaBean, design pattern comme le modele MVC, etc.)
Si je saute sur les topics Java comme tu dis c'est parce que apprendre ou répondre à des gens me permets également de m'améliorer moi même. J'ai une philosophie qui dit que "on ne connait vraiment une chose que lorsqu'on est capable de l'expliquer à quelqu'un d'autre".
 
Voilà si tu veux d'autres détails, msg moi
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 15-01-2002 à 11:08:29    

en fait je m'exmprime mal !!!!!!
 
voici le probléme complet !!!!!
 
le probléme est d'ecrire un filtre java qui permette d'extraire des lignes d'un fichier de l'entrée standard vers la sortie standard
 
donc j'ai un fichier txt qui contient :
 
salut
toto
bonjour
 
 
et jeux veux que la ligne suivante tapper dans la console:
 
java monprog 2 1 < data.txt
 
produise l'affichage suivant dans la console:
 
bonjour
toto

Reply

Marsh Posté le 15-01-2002 à 11:11:09    

Drakkeng a écrit a écrit :

en fait je m'exmprime mal !!!!!!
 
voici le probléme complet !!!!!
 
le probléme est d'ecrire un filtre java qui permette d'extraire des lignes d'un fichier de l'entrée standard vers la sortie standard
 
donc j'ai un fichier txt qui contient :
 
salut
toto
bonjour
 
 
et jeux veux que la ligne suivante tapper dans la console:
 
java monprog 2 1 < data.txt
 
produise l'affichage suivant dans la console:
 
bonjour
toto  




 
Bin tu parses ta ligne de commande jusqu'à ce que tu récupères < (donc tu vas avoir dans un vecteur ou qqch du genre des nombres. Ensuite tu parses l'élément suivant.
 
Tu ouvres ton fichier avec un filtre pour les lignes. Et puis tu parcours ton vecteur et tu affiches la ligne voulue.
 
Assez simple finalement.
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 15-01-2002 à 11:11:12    

Drakkeng a écrit a écrit :

en fait je m'exmprime mal !!!!!!
 
voici le probléme complet !!!!!
 
le probléme est d'ecrire un filtre java qui permette d'extraire des lignes d'un fichier de l'entrée standard vers la sortie standard
 
donc j'ai un fichier txt qui contient :
 
salut
toto
bonjour
 
 
et jeux veux que la ligne suivante tapper dans la console:
 
java monprog 2 1 < data.txt
 
produise l'affichage suivant dans la console:
 
bonjour
toto  




c quoi le 2 1 en argument ?  
Sinon ça ressemble a une bete redirection des flux, comme le disais benou : tu rediriges l'entree standart de ton process vers sa sortie standart (sdtout) et voila ...

Reply

Marsh Posté le 15-01-2002 à 11:15:06    

dans ce cas, il faut que tu lise System.in, que tu stockes toutes les lignes dans une liste, puis que tu n'affiche que celles dont le numéro de ligne t'as été passé en paramètre. Ca c'est pour la méthode brute, en espérant que tes fichiers soient pas trop gros ...
 
Le plus simple c'est de passer par un reader pour lire sur l'entrée standard :  
 
 
Reader fichier = new BufferedReader(new InputStreamReader(System.in));  
String ligne=fichier.readLine();  
while (ligne != null) {  
  // tu sauvegardes la ligne dans une List
  ligne=fichier.readLine();  
}  
...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2002 à 11:15:41    

petoulachi a écrit a écrit :

 
c quoi le 2 1 en argument ?  




si j'ai bien compris c'est le numéro des lignes à afficher ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2002 à 11:17:47    

si c ptete ça, en supposant que ça commence par 0

Reply

Marsh Posté le 15-01-2002 à 11:19:45    

petoulachi a écrit a écrit :

si c ptete ça, en supposant que ça commence par 0  




 
exact ... Moi en tout cas c'est ce que j'ai compris


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 15-01-2002 à 11:23:16    

petoulachi a écrit a écrit :

 
c quoi le 2 1 en argument ?  
Sinon ça ressemble a une bete redirection des flux, comme le disais benou : tu rediriges l'entree standart de ton process vers sa sortie standart (sdtout) et voila ...  




 
2 désigne la deuxiéme ligne et 1 la premiére (en commençant par zero)
 
oui c'est justement cette histoire de flux que je capte pas !!!!!!

 

[edtdd]--Message édité par Drakkeng--[/edtdd]

Reply

Marsh Posté le 15-01-2002 à 11:25:38    

darklord22 a écrit a écrit :

 
 
Bin tu parses ta ligne de commande jusqu'à ce que tu récupères < (donc tu vas avoir dans un vecteur ou qqch du genre des nombres. Ensuite tu parses l'élément suivant.
 
Tu ouvres ton fichier avec un filtre pour les lignes. Et puis tu parcours ton vecteur et tu affiches la ligne voulue.
 
Assez simple finalement.
 
A+  




 
oui mais c'est pas comme ça que je suis senssé faire ,la procédure de gestion du contenu du fichier je la connais mais ce que je comprends pas dans ce cas c'est linterprétation de la ligne de commande .
 
en tout cas merci de ton aide ,j'ai meme honte de te faire perdre autant de temps a chacune de mes questions sur java !!

Reply

Marsh Posté le 15-01-2002 à 11:28:48    

logiquement tu ne dervais pas avoir le < tonFichier.txt puisque ce sera interprété par le shell unix : dans le tableau d'argument tu n'auras plus que les numéros de ligne


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2002 à 11:29:37    

Drakkeng a écrit a écrit :

 
oui c'est justement cette histoire de flux que je capte pas !!!!!!  




 
on les voit mes posts ou quoi ??? :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2002 à 11:33:51    

benou a écrit a écrit :

 
 
on les voit mes posts ou quoi ??? :)  




 
oui !!!
je comprends un peu mieux mais pas tout encore ,dans mon prog je fais comment pour identifier le nom du fichier a ouvrir ?

Reply

Marsh Posté le 15-01-2002 à 11:39:26    

Comme je le disais, tu n'as pas à t'occuper de ca : unix va rediriger le contenu de ton fichier vers l'entrée standard de ton prog.
 
en Unix (et même sous DOS) :
 
unExecutable < unFichier.txt
 
ca "déconnecte" le clavier et ca envoie tout ce qu'il y a dans le fichier de la même façon que si tu retappais le fichier à la main.
 
de la même façon tu peux rediriger la sortie standard  vers un fichier :  
 
unExecutable > unFichier.txt
 
ca "déconnecte" l'affichage à l'écran et ca écrit tout dans le fichier.
 
c'est comme ca que tu peux te servir de cat comme d'un éditeur de texte :  
 
cat > truc.txt
(la tu tapes du texte et tu finies par taper ctrl-D)
 
et tu verras que ca a créé un fichier truc;txt avec ce que tu as tappé dedans.
 
jette un coup d'oeil à tes cours d'unix sur les redirections.

 

[edtdd]--Message édité par benou--[/edtdd]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-01-2002 à 11:53:20    

benou a écrit a écrit :

Comme je le disais, tu n'as pas à t'occuper de ca : unix va rediriger le contenu de ton fichier vers l'entrée standard de ton prog.
 
en Unix (et même sous DOS) :
 
unExecutable < unFichier.txt
 
ca "déconnecte" le clavier et ca envoie tout ce qu'il y a dans le fichier de la même façon que si tu retappais le fichier à la main.
 
de la même façon tu peux rediriger la sortie standard  vers un fichier :  
 
unExecutable > unFichier.txt
 
ca "déconnecte" l'affichage à l'écran et ca écrit tout dans le fichier.
 
c'est comme ca que tu peux te servir de cat comme d'un éditeur de texte :  
 
cat > truc.txt
(la tu tapes du texte et tu finies par taper ctrl-D)
 
et tu verras que ca a créé un fichier truc;txt avec ce que tu as tappé dedans.
 
jette un coup d'oeil à tes cours d'unix sur les redirections.  
 
 




voila c ça, enfin on pourrait rentrer plus dans les details mais je suis pas sur que tu piges tout

Reply

Marsh Posté le 15-01-2002 à 12:26:43    

benou a écrit a écrit :

Comme je le disais, tu n'as pas à t'occuper de ca : unix va rediriger le contenu de ton fichier vers l'entrée standard de ton prog.
 
en Unix (et même sous DOS) :
 
unExecutable < unFichier.txt
 
ca "déconnecte" le clavier et ca envoie tout ce qu'il y a dans le fichier de la même façon que si tu retappais le fichier à la main.
 
de la même façon tu peux rediriger la sortie standard  vers un fichier :  
 
unExecutable > unFichier.txt
 
ca "déconnecte" l'affichage à l'écran et ca écrit tout dans le fichier.
 
c'est comme ca que tu peux te servir de cat comme d'un éditeur de texte :  
 
cat > truc.txt
(la tu tapes du texte et tu finies par taper ctrl-D)
 
et tu verras que ca a créé un fichier truc;txt avec ce que tu as tappé dedans.
 
jette un coup d'oeil à tes cours d'unix sur les redirections.  
 
 




 
ok je commence a comprendre j'installe linux et je fais des tests .
 
merci

Reply

Marsh Posté le 15-01-2002 à 18:20:50    

j'y arrive toujours pas !!!
bien sur si je spécifie le nom du fichier dans mon code ça marche sinon ,je n'arrive pas a recupérer le conteny du fichier ...
 
 
help

Reply

Marsh Posté le 15-01-2002 à 18:57:30    

Drakkeng a écrit a écrit :

j'y arrive toujours pas !!!
bien sur si je spécifie le nom du fichier dans mon code ça marche sinon ,je n'arrive pas a recupérer le conteny du fichier ...
 
 
help  




 
mais enfin, tu as une solution toute faite dans ce post. Balance ton code alors si tu comprends pas ...


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 15-01-2002 à 20:40:10    

fais une classe Echos qui écris tout ce qu'il y a sur l'entrée standard. Une fois que t'auras vérifié qu'elle marche, essaye de faire "java Echo < truc.txt" pour voir si la redirection est bien gérée par linux et pas récupérée dans les arguments de la classe


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-01-2002 à 10:22:55    

darklord22 a écrit a écrit :

 
 
mais enfin, tu as une solution toute faite dans ce post. Balance ton code alors si tu comprends pas ...  




 
c'est bon j'ai reussi!!!!
 
 
sinon du calme  chui bouché parfois je voulais absolument ouvrir un fichier ,j'avais rien capté a cette histoire de redirection de flux standard.
 
 
merci benou tu avais juste depuis le debut avec ton System.in mais je comprenais rien je savais pas que le flux standard s'etait le clavier ,désolé si je t'ai fait perdre ton temps...
 
voila merci a tous

Reply

Marsh Posté le 16-01-2002 à 10:27:12    

le principale c'est que t'y soit arrivé ! :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed