Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2424 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°89292
drakkeng
Posté le 15-01-2002 à 10:25:15  profilanswer
 

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

mood
Publicité
Posté le 15-01-2002 à 10:25:15  profilanswer
 

n°89297
petoulachi
A fortiori, brigadier chef
Posté le 15-01-2002 à 10:32:44  profilanswer
 

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:

n°89300
drakkeng
Posté le 15-01-2002 à 10:35:44  profilanswer
 

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]

n°89301
aurel
Fraggueur en liberté
Posté le 15-01-2002 à 10:35:55  profilanswer
 

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?

n°89304
drakkeng
Posté le 15-01-2002 à 10:39:13  profilanswer
 

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 .

n°89306
aurel
Fraggueur en liberté
Posté le 15-01-2002 à 10:43:20  profilanswer
 

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

n°89313
petoulachi
A fortiori, brigadier chef
Posté le 15-01-2002 à 10:50:44  profilanswer
 

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 ...)

n°89316
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 10:52:57  profilanswer
 

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
n°89318
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 10:55:39  profilanswer
 

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
n°89320
benou
Posté le 15-01-2002 à 10:56:37  profilanswer
 

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
mood
Publicité
Posté le 15-01-2002 à 10:56:37  profilanswer
 

n°89321
aurel
Fraggueur en liberté
Posté le 15-01-2002 à 10:56:38  profilanswer
 

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.

n°89322
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 10:59:23  profilanswer
 

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
n°89329
drakkeng
Posté le 15-01-2002 à 11:08:29  profilanswer
 

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

n°89330
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 11:11:09  profilanswer
 

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
n°89331
petoulachi
A fortiori, brigadier chef
Posté le 15-01-2002 à 11:11:12  profilanswer
 

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 ...

n°89336
benou
Posté le 15-01-2002 à 11:15:06  profilanswer
 

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
n°89337
benou
Posté le 15-01-2002 à 11:15:41  profilanswer
 

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
n°89339
petoulachi
A fortiori, brigadier chef
Posté le 15-01-2002 à 11:17:47  profilanswer
 

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

n°89340
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 11:19:45  profilanswer
 

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
n°89343
drakkeng
Posté le 15-01-2002 à 11:23:16  profilanswer
 

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]

n°89346
drakkeng
Posté le 15-01-2002 à 11:25:38  profilanswer
 

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 !!

n°89349
benou
Posté le 15-01-2002 à 11:28:48  profilanswer
 

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
n°89350
benou
Posté le 15-01-2002 à 11:29:37  profilanswer
 

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
n°89356
drakkeng
Posté le 15-01-2002 à 11:33:51  profilanswer
 

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 ?

n°89364
benou
Posté le 15-01-2002 à 11:39:26  profilanswer
 

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
n°89377
petoulachi
A fortiori, brigadier chef
Posté le 15-01-2002 à 11:53:20  profilanswer
 

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

n°89392
drakkeng
Posté le 15-01-2002 à 12:26:43  profilanswer
 

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

n°89645
drakkeng
Posté le 15-01-2002 à 18:20:50  profilanswer
 

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

n°89658
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 18:57:30  profilanswer
 

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
n°89688
benou
Posté le 15-01-2002 à 20:40:10  profilanswer
 

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
n°89816
drakkeng
Posté le 16-01-2002 à 10:22:55  profilanswer
 

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

n°89817
benou
Posté le 16-01-2002 à 10:27:12  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[java] je cherche des exemples d'interfacesodbc linux c++
[JAVA] Création d'une classe Border avec Swing[JAVA] Créer et appeler un Paquetage?
[JAVA] Question sur Swing[Java] Newbie : applet marche dans JBuilder mais pas dans IE...
[JAVA] les images dans une appli ?[JAVA] HttpURLConnection
[java] lire une webcam?[java] convertir un Integer en binaire complément a 2 ?
Plus de sujets relatifs à : [java ,linux] comment gérer un truc comme ça ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR