IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

chercher une ligne dans une liste


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut chercher une ligne dans une liste
    Bonjour, dans mon programme j'ai deux fichiers, le 1er c'est une liste des valeurs et le 2ème contient des nombres que je veux les utiliser comme indices pour le premier fichier, j'ai fait ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    public class tableau {
    	public static String[][] readCSV(String nomFichier, char c, Charset charset) throws IOException {
    		return Files.readAllLines(Paths.get(nomFichier), charset).stream().map(ligne -> ligne.split(String.valueOf(c)))
    				.toArray(String[][]::new);
    	}
     
    	static List<String> Acces(int nb, List<List<String>> liste) 
    	{
    		List<String> ligne= new ArrayList<>();
    		for(int i=0; i<liste.size(); i++) {
    			if(i==nb)
    				ligne = liste.get(nb);
    		}
     
    		return ligne;
    	}
     
    	public static void main(String[] args) throws IOException {
     
    		String fileName= "C:\\Users\\asus\\Desktop\\spmf\\sequences.csv";
    		File file= new File(fileName);
     
    		List<List<String>> lines = new ArrayList<>();
    		Scanner inputStream;
     
    		try{
    		inputStream = new Scanner(file);
     
    	    while(inputStream.hasNext()){
    		 String line= inputStream.next();
    		 String[] values = line.split(";");
    		 lines.add(Arrays.asList(values));
    		 }
     
    		 inputStream.close();
    		 }catch (FileNotFoundException e) {
    		 e.printStackTrace();
     
    String ligne1 = "";
    		String[] seq1=null;
    		String fichier1 = "C:\\Users\\asus\\Desktop\\spmf\\lignes.txt";
     
    		BufferedReader ficTexte1;
    		try {
    			ficTexte1 = new BufferedReader(new FileReader(new File(fichier1)));
    			if (ficTexte1 == null) {
    				throw new FileNotFoundException("Fichier non trouvé: " + fichier1);
    			}
    			do {
    				ligne1 = ficTexte1.readLine();
    				if (ligne1 != null) {
    					seq1=ligne1.split(" ");
     
    //					for(int i=0; i<seq1.length; i++) {System.out.print(seq1[i]+"|");}
    //					System.out.println("");
    				}
    			} while (ficTexte1 != null);
    			ficTexte1.close();
    			System.out.println("\n");
    		} catch (FileNotFoundException e) {
    			System.out.println(e.getMessage());
    		} catch (IOException e) {
    			System.out.println(e.getMessage());
    		}
     
    		int k=0;
     
    		for(int i=0; i<seq1.length; i++) {
    			k=Integer.parseInt(seq1[i]);
    			System.out.println(Acces(k, lines)); 
    		}
    	}
    }
    		 }
    donc je veux que je parcours le fichier des nombres, et pour chaque valeur j'accède au 1er fichier pour récupérer la ligne de cet indice là, ce code ne me génère pas d'erreur mais aussi il m'affiche rien.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut

    1. Déjà,
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      static List<String> Acces(int nb, List<List<String>> liste) 
      	{
      		List<String> ligne= new ArrayList<>();
      		for(int i=0; i<liste.size(); i++) {
      			if(i==nb)
      				ligne = liste.get(nb);
      		}
       
      		return ligne;
      	}
      Pourquoi ne pas écrire simplement :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      static List<String> Acces(int nb, List<List<String>> liste) {
      		if ( nb<liste.size() ) {
                           return liste.get(nb);
                      }
                      else {
                           return new ArrayList<>();
      		}
      }
      Au lieu de parcourir la liste inutilement ?
    2. Pourquoi faire des lectures aussi compliquées et bricolées au lieu d'utiliser la première méthode qui fait le même boulot readCSV plus simplement ? Si c'est parce qu'elle retourne un tableau au lieu d'une liste, il faut pas grand chose pour la changer, et de toute manière, ce que tu fais peut tout aussi bien être fait par tableau.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      public static void main(String[] args) throws IOException {
       
          String fileName= "C:\\Users\\asus\\Desktop\\spmf\\sequences.csv";
          String fichier1 = "C:\\Users\\asus\\Desktop\\spmf\\lignes.txt";
       
         String[][] dataFileName = readCSV(fileName, ";", StandartCharset.UTF_8 );
       
         String[][] dataFichier1 = readCSV(fichier1 , " ", StandartCharset.UTF_8 );
       
         int seqligne=0; // numéro de la ligne du fichier1
         if ( dataFichier.length>seqligne ) {
             for(int v : dataFichier1[seqligne]) {
               if ( dataFileName.length>v ) {
                System.out.println( Arrays.toString(dataFileName[v]) ); 
               }
               else {
                System.out.println("Ligne non trouvée : " + v);
               } 
             }
         }
       
      }
    3. while(inputStream.hasNext()){ça ne cherche pas des lignes ça, mais des mots dans une ligne (des mots séparés par une espace).
    4. if (ficTexte1 == null) {Avec ficTexte1 = new BufferedReader(new FileReader(new File(fichier1)));, il est impossible que ficTexte1 soit null. Si le fichier n'existe pas tu auras une exception. Et, sinon, on peut aussi tester si le fichier existe ( méthode exists() de java.io.File, ou exists() de java.nio.Files) avant de l'ouvrir.
    5. Ce n'est pas que ton programme n'affiche rien. Il tourne dans une boucle infinie avant de chercher à afficher quoique soit

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      if (ficTexte1 == null) {
      				throw new FileNotFoundException("Fichier non trouvé: " + fichier1);
      			}
      			do {
      				//
      			} while (ficTexte1 != null);
      Si ficTexte1 n'est pas null, on entre dans le do/while, et on en ressort jamais parce que rien n'en change la valeur, donc il est toujours différent de null !
    6. Je trouve surprenant, enfin pas logique, de lire des lignes dans un fichier appelé sequences.csv et des séquences dans un fichier appelé lignes.txt.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut
    d'accord mercii, je vais corriger mes erreurs

  4. #4
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut
    Bonjour,

    en fait, à partir de mon fichier csv j'ai récupéré cette ligne qui est une liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [201,202,103,104,205,206,107,208,209,110, 1217125080, 201,102,103,104,205,206,107,108,109,110, 1217144220, 201,102,103,104,205,206,107,108,109,110, 1217149800, 201,202,103,104,205,106,107,208,209,110, 1217166360, 201,202,103,204,105,206,107,208,209,110, 1217167560, 201,202,103,104,105,206,107,208,209,110, 1217170140, 201,202,103,104,105,106,107,208,209,110, 1217183040, 201,202,103,104,105,206,107,208,209,110, 1217190480, 201,102,103,104,105,206,107,108,109,110, 1217190480, 201,102,103,104,205,206,107,108,109,110, 1217193240, 201,202,103,104,105,206,107,208,209,110, 1217208660, 201,102,103,204,205,206,107,108,209,110, 1217209680, 201,202,103,104,105,206,107,208,209,110, 1217212620, 201,202,103,104,105,206,107,208,209,110, 1217216160, 201,202,103,104,205,206,107,208,209,110, 1217220300]
    normalement 201,202,103,104,205,206,107,208,209,110, c'est le premier élément et 1217125080 c'est un timestamp et ainsi de suite, je veux parcourir cette liste en cherchant une valeur particulière, par exemple je veux chercher la valeur 106 et lorsqu'elle est présente j'affiche la valeur du timestamp qui la suit , quelqu'un peut m'aider svp?

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Pour pouvoir faire ça, il faut un moyen sûr de distinguer le timestamp et les autres valeurs. Un critère. Cela peut être le nombre de valeurs avant (ici il semble que cela soit 10), ou n'importe quoi d'autre de formalisable.

    Sur la base d'un nombre de valeurs, il te suffit de parcourir la liste ou tableau correspondant à une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int nb=0; // variable pour compter les valeurs avant timestamp
    for(int i=0; i<valeurs.length; i++) {
        nb++;
        if ( nb== 10 ) {
                // la valeur est un timestamp
                nb=0;
        }
        else {
               // la valeur n'est pas un timestamp
        }
    }
    on peut procéder par modulo également. Puisqu'on a un timestamp tous les 11 valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i=0; i<valeurs.length; i++) {
        if ( ((i+1)%11==0 ) {
                // la valeur est un timestamp 
        }
        else {
               // la valeur n'est pas un timestamp
        }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut
    c'est le code avec lequel je peux accéder au timestamp merci, mais comment je peux à chaque parcours de 10 valeurs, je peux vérifier s'il contiennent 106 ou non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/10/2009, 13h31
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  4. [MySQL] inserer une ligne d'une table dans une autre table
    Par piero53 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/12/2008, 18h29
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo