Récupérer des données a partir d'un fichier text avec java

- - Dernière réponse : cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 15 mai 2013 à 08:48
salut , svp j'ai besoin d'extraire tout les lignes d'un fichier qui correspond au colonne mois=4
exemple de fichier
userID artistID tagID day month
2 52 12 1 4
2 52 14 2 4
2 18 40 5 4
2 19 42 4 5
2 24 44 6 3
2 16 59 8 4
2 17 52 8 2
2 24 51 9 1
et merci d'avance
Afficher la suite 

14 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248
0
Merci
Salut,

Quel est ton problème ?

Récupérer le contenu du fichier ou filtrer les entrées ?
Commenter la réponse de cs_Julien39
0
Merci
bonjour ,Svp mon problème est d'extraire seulement des lignes qui correspond au colonne month =4 .
merci bien a vous
Commenter la réponse de souha11
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248
0
Merci
Une fois que tu récupères ta ligne, tu fais un .split(" ")[4] et tu as le mois, et tu le compares à 4, si c'est le même alors tu le gardes, sinon, tu l'ignores.
Commenter la réponse de cs_Julien39
0
Merci
merci bien ,je vous remercie mais svp est ce que vous pouvez expliquez mieux avec un code svp , je commence avec ce code pour lire le fichier ligne par ligne :

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class repartition
{


public static void main(String[] args)
{
String fichier ="user_taggedbookmarks.dat";



try{

BufferedReader buff = new BufferedReader(new FileReader(fichier));

try {
String line;
// Lire le fichier ligne par ligne
// La boucle se termine quand la méthode affiche "null"

while ((line = buff.readLine()) != null) {

System.out.println(line);
}

buff.close(); //Lecture fini donc on ferme le flux
}

catch (IOException e){
System.out.println(e.getMessage());
System.exit(1);
}

}
catch (IOException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}



}

et mercii bien pour votre aide
Commenter la réponse de souha11
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248
0
Merci
while ((line = buff.readLine()) != null) { 
if(ligne.split("[ ]"[4].equals("4")){
System.out.println(line); 
}
Commenter la réponse de cs_Julien39
0
Merci
je vous remercie pour votre aide et de votre intéret à mon problème , mais svp cette instruction me donne un erreur , comment je dois corriger est ce que je dois initialiser une matrice et transformer mon fichier a une matrice pour afficher les lignes correspond au colonne month=4 seulement
c'est le code modifier :
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class repartition
{


public static void main(String[] args)
{
String fichier ="user_taggedbookmarks.dat";



try{

BufferedReader buff = new BufferedReader(new FileReader(fichier));

try {
String line;
// Lire le fichier ligne par ligne
// La boucle se termine quand la méthode affiche "null"

while ((line = buff.readLine()) != null) {

if(line.split("[ ]"[4].equals("4"))){
System.out.println(line);
}

System.out.println(line);
}

buff.close(); //Lecture fini donc on ferme le flux
}

catch (IOException e){
System.out.println(e.getMessage());
System.exit(1);
}

}
catch (IOException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}



}
erreur est au niveau de cette ligne:
if(line.split("[ ]"[4].equals("4"))):erreur donné :le type de cette expression doit être de type array.
merci encore fois .
Commenter la réponse de souha11
Messages postés
31
Date d'inscription
mardi 5 novembre 2002
Statut
Membre
Dernière intervention
16 juin 2013
0
Merci
Salut
Y aurai pas une erreur de syntax ici


if(line.split("[ ]"[4].equals("4"))){

Qui devrait etre

if(line.split(" ")[4].equals("4")){

Mais pour etre sur je te conseille de decoupe ton code, donc de faire system.out.println de ce que contient line, ensuite de ce que contient le split, et enfin le resultat de split[4], ca te permettra de verifier ce que tu compares et si tu veux eviter un nullpointer tu peux aussi ecrire :
if("4".equals(line.split(" ")[4]){

Car "4" ne sera jamais null et tu peux aussi verifier la taille de ton split avant de faire le [4] bref des petites choses a ameliorer apres si tu veux rendre ton code robuste...
Bon courage

Palex
Commenter la réponse de cs_Palex
0
Merci
merci bien a vous , est ce que vous pouvez m'aider avec un code mon problème n'est pas encore résolu j'ai besoin d'extraire seulement les lignes de mon fichier dont le colonne month =4 , et merci encore fois :)
Commenter la réponse de souha11
Messages postés
31
Date d'inscription
mardi 5 novembre 2002
Statut
Membre
Dernière intervention
16 juin 2013
0
Merci
Je n ai pas trop le temps la pour vous donnez un code, mais celui que vous avez ne compilé pas avec la modification?

Palex
Commenter la réponse de cs_Palex
0
Merci
ah ok , merci bien pour vous , oui il affiche cette erreur :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
Commenter la réponse de souha11
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248
0
Merci
C'est que certaines lignes de ton fichier sont vides ou ne contiennent pas 5 champs.
Commenter la réponse de cs_Julien39
Messages postés
31
Date d'inscription
mardi 5 novembre 2002
Statut
Membre
Dernière intervention
16 juin 2013
0
Merci
Effectivement il faut bien lire l exception qui vous dis que vous essayez de lire un élément à une position qui n existe pas dans le tableau...c est pour cela qu il faudrait découper votre code afin de vérifier la taille du tableau après le split
Et si la taille est d au moins 4 vous pouvez récupérer l élément en position 4 voir même 3 car n oubliez pas que dans un tableau le premier élément est le 0 donc l élément 4 sera en position [3] et une fois récupérer vous pouvez faire l equals.
Bon courage

PAM
Commenter la réponse de cs_Palex
0
Merci
merci , mais j'ai pas bien compris :
svp est ce que vous pouvez me corriger le code donné parce que mon fichier ne contient pas des lignes vides et merci bien .
Commenter la réponse de souha11
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248
0
Merci
Peut être la dernières ligne uniquement, si tu as un dernier retour à la ligne en ouvrant ton fichier, la dernière ligne ne contient que "\n" et elle est traitée comme les autres.

Tu peux mettre if(ligne.length>0) avant de faire le split.
Commenter la réponse de cs_Julien39