comment gérer un truc comme ça ? [java ,linux] - Programmation
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 :
|
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 :
|
Voila j'espere t'avoir aidé
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:
|
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]
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?
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 .
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
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 ...)
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
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 :
|
[edtdd]--Message édité par darklord22--[/edtdd]
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();
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.
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+
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
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+
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 ...
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();
}
...
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 ...
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
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]
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 !!
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
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 ???
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 ?
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]
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
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
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
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 ...
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
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
Marsh Posté le 16-01-2002 à 10:27:12
Reply
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