[java] Problème de logique - flux

Fermé
jmlaguiness Messages postés 6 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 5 mai 2010 - Modifié par jmlaguiness le 4/05/2010 à 03:32
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 5 mai 2010 à 11:51
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.


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:

4 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 mai 2010 à 10:56
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.
1
jmlaguiness Messages postés 6 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 5 mai 2010 1
5 mai 2010 à 11:05
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.
0
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.
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
5 mai 2010 à 11:51
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.
0