HELP : parcourir un fichier texte et extraire certaine données

elrool Messages postés 9 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 16 avril 2004 - 29 mars 2004 à 09:31
elrool Messages postés 9 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 16 avril 2004 - 29 mars 2004 à 13:34
Bonjour, je ne suis pas un super pro de java et j'ai besoin d'un coup de main!!!
Voici mon probleme G un fichier txt dans lequel les données sont contruite de la sorte :
@35:
[ status: -> NEW (1998-04-07 01:37:03) ]
[ status: RESOLVED -> VERIFIED (1999-02-26 12:55:50) ]

@36:
[status: -> NEW (1998-04-07 02:04:03) ]
[status: NEW -> ASSIGNED (1998-09-04 19:07:01) ]
[status: RESOLVED -> VERIFIED (1999-03-22 13:42:23) ]

et ainsi de suite pendant longemps je souhaiterai récupérer le num k'il y a au début apres l'@ ainsi que la premiere et la derniere date ( pas besoin de l'heure ) et transformer la différence entre ces 2 dates en nombre de jour (exemple : 35 = 356 jours )
Merci à tout ceux qui pourront m'aider je suis tres embeter pour pas dire plus!!!

4 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
29 mars 2004 à 10:25
Salut,

une solution élégante (à mon avis) est d'utiliser les expressions régulières. Pour cela je pose 2 hypothéses sur le format du fichier
- la date de début est dans la ligne où il y a le NEW
- la date de fin est dans la ligne RESOLVED -> VERIFIED et il n'y a pas 2 fois RESOLVED -> VERIFIED pour un numéro ou alors on prend le dernier.
Si c'est 2 hypothéses sont correctes alors c'est très simple. On définit 3 expressions régulières (regexp)
pour le numéro : @(\d+):
pour la date de début : [ status: -> NEW ((\d{4}-\d{2}-\d{2}) .+) ]
pour la date de fin : [status: RESOLVED -> VERIFIED ((\d{4}-\d{2}-\d{2}) .+) ]

Si tu ne connais les regexp, je te laisse regarder la doc.
Ensuite il suffit de parcourir le fichier à la recherche de ces regexp.
Tu n'es pas obligé d'utiliser les regexp, il suffit alors de faire des startsWith sur chaque ligne, puis des substring pour récupérer la date.

Pour finir, il faut convertir la valeur obtenu en date à l'aide de SimpleDateFormat et utiliser un Calendar pour le calcul.

Voilà, normalement (sauf erreur de ma part) tu as toutes les infos.
A toi de jouer !!!
0
elrool Messages postés 9 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 16 avril 2004
29 mars 2004 à 11:00
Merci pour ton aide, je vais essayer de voir tout ça, mais si tu pouvais m'aider à démarrer disons le squelette du code ça serai gentil, je sais j'en demande un peu trop mais je suis vraiment mauvais en java!!
J'ai une autre question peut etre bete mais Kel condition mettre pour parcourir le fichier jusqu'au bout (il est relativement gros)?
Encore une fois merci à tout ceux qui me donnent un coup de main!
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
29 mars 2004 à 13:06
voici un début de code. A toi de remplir le reste.

La méthode pour lire le fichier
public List readDate(String file) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(file));
String line = null;
List bugs = new ArrayList();
Pattern patternNumber = Pattern.compile("@(\\d+):");
Pattern patternDateDebut = Pattern.compile("[ status: -> NEW ((\\d{4}-\\d{2}-\\d{2}) .+) ]");
Pattern patternDateFin = Pattern.compile("[status: RESOLVED -> VERIFIED ((\\d{4}-\\d{2}-\\d{2}) .+) ]");
Bug bug = null;
while ((line = in.readLine()) != null) {
// do the right thing
}
in.close();
return bugs;
}


La classe bug pour stocker les valeurs.
public class Bug {
private String numero;
private Date dateDebut;
private Date dateFin;
private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

public Bug(String numero, String dateDebut, String dateFin) {
this.numero = numero;
this.dateDebut = format.parse(dateDebut);
this.dateFin = format.parse(dateFin);
}
public Date getDateDebut() {
return dateDebut;
}

public Date getDateFin() {
return dateFin;
}

public String getNumero() {
return numero;
}

}


Et regarde GregorianCalendar pour le calcul des dates.
Ben maintenant à toi !!!!
0
elrool Messages postés 9 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 16 avril 2004
29 mars 2004 à 13:34
MERCI C TROP COOL DE TA PART!!!!!!
0
Rejoignez-nous