[java] Problème de logique - flux
jmlaguiness
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
Hello à tous.
Alors voilà, je cherche à créer un script en java pour récupérer une partie d'un fichier texte, délimité par les deux balises : tagd et tagf.
Voila mon code. Le problème, c'est qu'il cré bien le fichier, mais que je le retrouve vide.
Donc sans doute un problème "logique" dans ce code...
J'ai pas mal cherché, bidouillé, mais là j'avoue que je suis un peu perdu et qu'un coup de main ne serait pas de refus...
Merci d'avance à tous ceux qui se pencheront sur le problème.
Alors voilà, je cherche à créer un script en java pour récupérer une partie d'un fichier texte, délimité par les deux balises : tagd et tagf.
Voila mon code. Le problème, c'est qu'il cré bien le fichier, mais que je le retrouve vide.
Donc sans doute un problème "logique" dans ce code...
J'ai pas mal cherché, bidouillé, mais là j'avoue que je suis un peu perdu et qu'un coup de main ne serait pas de refus...
Merci d'avance à tous ceux qui se pencheront sur le problème.
while(flot!=-1){ // TQ pas fin du fichier flot = readin2.read(); lu=(char)flot; if(lu==tagd.charAt(0)){ for (i=1; i<(tagd.length()) ; i++) { flot = readin2.read(); lu=(char)flot; if(lu==tagd.charAt(i)){ stocker=true; }else{ stocker=false; } } if(stocker==true){ if(lu==tagf.charAt(0)){ for(i=1; i<(tagf.length()) ; i++) { if(lu==tagf.charAt(i)){ stopstocker=true; }else{ stopstocker=false; if(stocker==true){ output.write(lu); output.flush(); } } } } } }
A voir également:
- [java] Problème de logique - flux
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
4 réponses
Bonjour,
Pouah, que c'est moche comme code ! Tu es certains de faire du Java et non du C ou quelque chose d'aussi linéaire qui s'en rapproche ?
Je critique je critique, je sais bien que ça ne fait pas avancer ton schmilblick.
Pour comprendre un peu mieux ton code, il nous faudrait l'intégralité, par exemple, qu'est ce que c'est que "tagd", il n'est pas défini dans le bout que tu as publié.
Dans tous les cas, je pense que la méthode de lecture / interprétation n'est pas bonne (foireuse si tu préfère), ou tout simplement brouillon. Il te faudrait la refaire de manière plus "propre".
Est-ce que tu as des impératifs sur la façon de lire le fichier (je vois que tu lis caractère par caractère alors que dans ton cas il serait certainement plus facile de lire bloc par bloc puis rechercher ce que tu souhaites à l'intérieur de ces blocs)
Réponds à ces quelques questions et je t'aiderai à mettre en place quelque chose de plus clean et qui fonctionne.
Pouah, que c'est moche comme code ! Tu es certains de faire du Java et non du C ou quelque chose d'aussi linéaire qui s'en rapproche ?
Je critique je critique, je sais bien que ça ne fait pas avancer ton schmilblick.
Pour comprendre un peu mieux ton code, il nous faudrait l'intégralité, par exemple, qu'est ce que c'est que "tagd", il n'est pas défini dans le bout que tu as publié.
Dans tous les cas, je pense que la méthode de lecture / interprétation n'est pas bonne (foireuse si tu préfère), ou tout simplement brouillon. Il te faudrait la refaire de manière plus "propre".
Est-ce que tu as des impératifs sur la façon de lire le fichier (je vois que tu lis caractère par caractère alors que dans ton cas il serait certainement plus facile de lire bloc par bloc puis rechercher ce que tu souhaites à l'intérieur de ces blocs)
Réponds à ces quelques questions et je t'aiderai à mettre en place quelque chose de plus clean et qui fonctionne.
Hello kij_82.
Désolé pour le code... C'est clair, je ne suis pas un artiste, l'essentiel est que ça tourne, pas que ce soit beau ;).
Pour répondre à tes questions, je cherche justement à créer une classe qui peut le faire pour n'importe quels tags. En l'occurence, tagd et tagf sont définis un peu plus tot, en allant les rechercher dans un fichier texte...
Je joins le code auquel je suis arrivé. (et j'espère que tu le trouveras "plus propre..." :s).
La classe PushbackInputStream semble être celle qui convient, mais j'arrive pas à bien la déclarer :s.
J'ai mis le code ici : http://pastebin.com/tRusK2xV (pas la place dans un post :s).
Merci d'avance.
Désolé pour le code... C'est clair, je ne suis pas un artiste, l'essentiel est que ça tourne, pas que ce soit beau ;).
Pour répondre à tes questions, je cherche justement à créer une classe qui peut le faire pour n'importe quels tags. En l'occurence, tagd et tagf sont définis un peu plus tot, en allant les rechercher dans un fichier texte...
Je joins le code auquel je suis arrivé. (et j'espère que tu le trouveras "plus propre..." :s).
La classe PushbackInputStream semble être celle qui convient, mais j'arrive pas à bien la déclarer :s.
J'ai mis le code ici : http://pastebin.com/tRusK2xV (pas la place dans un post :s).
Merci d'avance.
Je pense que ce que veut dire kij, c'est que tu as d'autres façons de faire beaucoup plus simple grâce à l'API java.
Par exemple voici ce que tu peux faire avec des Patterns regex :
Pattern node_pattern = Pattern.compile("tagd(.*?)tagf");
Matcher node_m = node_pattern.matcher(" ceci est un test tagd on doit trouver cette phrase en résultat tagf mais pas ce bout là");
while( node_m.find() ) {
String node_s = node_m.group();
System.err.println(node_s);
}
Ce qui est plus "light" et doit répondre à ce que j'ai compris de ton problème.
Par exemple voici ce que tu peux faire avec des Patterns regex :
Pattern node_pattern = Pattern.compile("tagd(.*?)tagf");
Matcher node_m = node_pattern.matcher(" ceci est un test tagd on doit trouver cette phrase en résultat tagf mais pas ce bout là");
while( node_m.find() ) {
String node_s = node_m.group();
System.err.println(node_s);
}
Ce qui est plus "light" et doit répondre à ce que j'ai compris de ton problème.
Re,
Comme le dis plus clairement Seb, effectivement tu as bcp d'API java qui permettent de faire les choses plus simplement. Tu devrais avoir le choix.
Dans le code que tu as donné, il y a d'ailleurs des fonctions qui ne sont pas utilisées correctement, ou peut-être n'a-t-on pas la même version du JDK. Cela ce n'est pas plus important que ça si ça fonctionne dans ton environnement.
Le principe est de faire un algo clair et le plus rapide possible (ou du moins un mixte entre clarté / maintenabilité du code et rapidité de l'algorithme)
Mais surtout, surtout ! :) Il faut programme en Objet (Java étant un langage orienté Objet, autant en profiter. C'est à dire ne pas mettre tout ton code de manière linéaire dans une seule méthode.
Je tâcherai de faire un exemple cet après midi si j'ai le temps pour te montrer plus clairement.
Comme le dis plus clairement Seb, effectivement tu as bcp d'API java qui permettent de faire les choses plus simplement. Tu devrais avoir le choix.
Dans le code que tu as donné, il y a d'ailleurs des fonctions qui ne sont pas utilisées correctement, ou peut-être n'a-t-on pas la même version du JDK. Cela ce n'est pas plus important que ça si ça fonctionne dans ton environnement.
Le principe est de faire un algo clair et le plus rapide possible (ou du moins un mixte entre clarté / maintenabilité du code et rapidité de l'algorithme)
Mais surtout, surtout ! :) Il faut programme en Objet (Java étant un langage orienté Objet, autant en profiter. C'est à dire ne pas mettre tout ton code de manière linéaire dans une seule méthode.
Je tâcherai de faire un exemple cet après midi si j'ai le temps pour te montrer plus clairement.