Partage
  • Partager sur Facebook
  • Partager sur Twitter

Methode rawLine.contains("\t")

    29 octobre 2014 à 6:55:44

    Bonjour,

    Je suis en train d'écrire un programme qui détecte les erreurs (manque d'une tabulation ou d'un élément des 3 éléments)  dans un fichier .tsv. Une fois l'erreur est détecté, le programme écrit un message.

    Il y a un problème à la ligne 288707, Message : Il n'y a pas de tabulation dans la chaine.

    Le problème est que quand le programme lit le fichier, il ne ne trouve aucune tabulation alors il exécute que ces messages.

    PS : Quand je teste avec seulement une ligne de fichier, le programme fonctionne correctement.
    if (!rawLine.contains("\t")) {
    			throw new Exception("Il n'y a pas de tabulation dans la chaine");
    		}
    
    		String[] stringArray = rawLine.split("\t");
    		if (stringArray.length != 3) {
    			throw new Exception("Nombre d'éléments pas égal à 3");
    		}
    
    Est ce que vous avez une méthode pour méthode pour détecter le manque d'une tabulation dans un fichier .tsv
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      29 octobre 2014 à 8:06:41

      Bonjour,

      Si ton algorithme pour une "ligne de fichier" est bon, il suffirait de le faire boucler sur toutes les lignes de ton fichiers tsv.

      Tu as essayé ça ?

      Je ne suis pas pro JAVA, mais j'aurais utilisé cela pour ma part (C'est en Powershell, mais tu va vite te repérer):

      [STRING]$Chaine_a_tester=Get-content -path "Chemin/vers/ton/fichier"
      
      ForEach-Object ($Ligne in $Chaine_a_tester) {
      if (!($Ligne.contains("\t"))) {
                  throw new Exception("Il n'y a pas de tabulation dans la chaine");
              }
       
              String[] $stringArray = $Ligne.split("\t");
              if ($stringArray.length != 3) {
                  throw new Exception("Nombre d'éléments pas égal à 3");
              }
      }

      Cordialement

      -
      Edité par Tenebrum 29 octobre 2014 à 8:24:49

      • Partager sur Facebook
      • Partager sur Twitter
      L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
        29 octobre 2014 à 8:08:08

        Bonjour.

        Tu sais le faire avec 1 ligne, alors pour le faire sur le fichier il suffit de le faire sur chacune des lignes du fichier.

        Exemple très simple :

        Files.lines(Paths.get("test.tsv"))
             .allMatch(line -> line.contains("\t"));

        Info au passage : inutile de tester si \t est dans ta ligne et ensuite tester le nombre de colonnes
        Test directement le nombre de colonnes, car si tu n'as pas de\t dans ta ligne cela veut dire que tu n'as qu'1 colonne.

        Exemple : "column1".split("\t") va retourner le tableau ["column1"]

        PS : Exception est vraiment le type de base.
        Essaye d'utiliser le type le plus précis possible (IllegalArgument, UnsupportedOperationException, ...)
        Le but est ensuite de pouvoir catch les exceptions le plus précisément possible en fonction de l'erreur que tu veux contrôler : si tu catch Exception tu n'as aucune information sur le type d'erreur (à part le message qui ne sert qu'à l'utilisateur).

        • Partager sur Facebook
        • Partager sur Twitter
        Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
          29 octobre 2014 à 15:31:58

          Bonjour,

          Le programme doit détecter les erreurs (absence d'un élément des 3 éléments ou manque de tabulation) dans un fichier tsv et indiquer la ligne où il trouve l'erreur.

          Et quand j'ai testé une ligne, c'est juste en la copiant collant et non en lisant la première ligne du fichier.

          Et j'ai déjà fait une boucle dans une autre méthode  computeLines (stoque les lignes reformés) qui appelle la méthode transformLine

          private static List<String> computeLines(List<String> rawLines) {
          		List<String> formatedLines = new ArrayList<String>();
          
          		int index = 0;
          		// pour chaque ligne
          		for (String rawLine : rawLines) {
          
          			// on procède à l'encodage du lemme
          			try {
          				String formatedLine = transformLine(rawLine);
          				// et on stocke le résultat dans une liste
          				formatedLines.add(formatedLine);
          			} catch (Exception e) {
          				System.err.println("Il y a un problème à la ligne " + index
          						+ ", Message : " + e.getMessage());
          			}
          			index++;
          		}
          		return formatedLines;
          	}
          
          	/**
          	 * 
          	 * @param rawLine
          	 * @return
          	 * @throws Exception
          	 */
          	private static String transformLine(String rawLine) throws Exception {
          
          		String outputLine = "";
          
          		if (!rawLine.contains("\t")) {
          			throw new Exception("Il n'y a pas de tabulation dans la chaine");
          		}
          
          		String[] stringArray = rawLine.split("\t");
          		if (stringArray.length != 3) {
          			throw new Exception("Nombre d'éléments pas égal à 3");
          		}
          




          • Partager sur Facebook
          • Partager sur Twitter

          Methode rawLine.contains("\t")

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown