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

Langage Java Discussion :

Travail sur fichier texte - Caractère inconnu


Sujet :

Langage Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Points : 49
    Points
    49
    Par défaut Travail sur fichier texte - Caractère inconnu
    Bonjour.

    Je bloque sur un problème depuis un moment et pas moyen d'avancer.

    J'effectue des modifications sur des fichiers textes afin de mieux les exploiter.

    Sur un fichier en particulier, le format est un peu spécial.
    J'ai trois colonnes, je veux récupérer les données des deux premières.
    Le caractère séparant les colonnes semble être la tabulation ("\t").
    Le contenu de la deuxième colonne peut parfois être vide, le problème est que si j'effectue un ligne.split("\t") et que je teste le contenu de ma 2ème case comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String[] ggg = ligne.split("\t");
    if (ggg[1].equals("")==true)
        {System.out.println("ERREUR");}
    Il me renvoit bien le message "ERREUR". Cela veut donc dire que quand je n'ai que la première colonne de remplie, le contenu de ma deuxième colonne est le caractère "" (rien).

    Mais quand je veux afficher les lignes dont le contenu est différent de "", cela ne fonctionne pas, ce caractère n'est pas reconnu.

    Voilà un extrait de mon fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    gnf1h05832_at	KIAA1754
    gnf1h05833_at	C12orf57
    gnf1h05834_at	
    gnf1h05835_at	FLJ90396
    gnf1h05836_at	METT5D1
    gnf1h05837_s_at	MAGI3
    gnf1h05838_at	DNAJB7
    gnf1h05839_at	
    gnf1h05840_at	UHRF2
    gnf1h05841_at	KIAA1797
    gnf1h05842_at	
    gnf1h05843_s_at	FAM11A
    Comment conserver uniquement les lignes dont les deux colonnes sont renseignées ?

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    tu peux tester caractère par caractère si c'est bien un caractère que tu veux garder (en testant le code ascii) non ?
    Pour la fin de ligne y'à un /0 qui doit trainer donc ca te renseigne sur la fin de ligne. Donc tu garde la ligne que si tu trouves 2 groupes de chiffre/lettre

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Points : 49
    Points
    49
    Par défaut
    Merci d'avoir répondu ! Désolé pour le retard me concernant.

    J'ai testé plusieurs options et cela ne me donne pas satisfaction. Je résume de nouveau mon problème, il est un tout petit peu différent sur la forme par rapport à la dernière fois mais il reste quand même le même sur le fond.

    J'ai appris que le format .csv permettait de formater les fichiers textes pour que les mots soient séparés par des points virgules, ce qui me facilite la tâche.

    Dans mon fichier texte, cela se présente de la manière suivante maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    gnf1h05778_at;GIMAP2;GTPase, IMAP family member 2;ENST00000223293
    gnf1h05779_at;OR2M4;olfactory receptor, family 2, subfamily M, member 4;ENST00000306687gnf1h05780_at;KIAA1328;KIAA1328;
    gnf1h05781_at;obsoleted by Celera;/len=359 GA_x54KRE9GCTR hCG1644107.1 (6762586-6765699) EXPERT_REVIEW;
    gnf1h05782_s_at;SPPL2A;signal peptide peptidase-like 2A;ENST00000261854gnf1h05783_at;;T-cell receptor V beta gene segment V-beta-w21, clone IGRb01;
    gnf1h05784_s_at;;T-cell receptor V beta gene segment V-beta-w21, clone IGRb01;
    gnf1h05785_x_at;;T-cell receptor V beta gene segment V-beta-w21, clone IGRb01;
    gnf1h05786_at;SKIP;SPHK1 (sphingosine kinase type 1) interacting protein;ENST00000344657
    gnf1h05822_at;;;
    gnf1h05787_at;ATP6V1E2;ATPase, H+ transporting, lysosomal 31kDa, V1 subunit E2;
    Ce qui m'intéresse ce sont les termes que j'ai soulignés ici dans cet exemple (ainsi que la première référence de chaque ligne qui, elle, est toujours renseignée donc ne pose aucuns problèmes) donc en général ce sont les lignes colorées ici en vert qui m'intéressent.

    Problème n°1 : Les lignes colorées ici en rouge ou en noir. Je ne veux effectuer aucune action lorsque ce type de ligne se présente lors du parsing. Le terme situé après le premier point-virgule m'est inconnu, j'ai beau tester pour savoir si c'est un saut de ligne, un caractère nul (null), un caractère vide ("") etc rien n'y fait.

    Problème n°2 : La ligne colorée ici en rose. Lorsque ce type de ligne est lu, je ne veux effectuer aucune action là non plus. Je veux donc reconnaître "obsoleted by Celera" et donc n'effectuer aucune action si cela se présente. Mais quelque soit le test effectué la ligne est quand même affichée !

    Voilà la méthode que j'utilise pour parser mon fichier :


    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
    public static void cherchereferencegene() throws IOException
     {
          listreferencesbiogps = new ArrayList<String>();
      
        // lecture de mon fichier texte d'origine  
        InputStream kre = new FileInputStream("U:/Projet - Extraction de données en ligne microRNA/Fichiers plats/BioGPS/GNF1H - Annotations.csv");
          InputStreamReader ipsr = new InputStreamReader(kre);
          BufferedReader lr = new BufferedReader(ipsr); 
      
          String ligne;
          // déclaration et initialisation d'un compteur pour ne pas lire la première ligne (les en-têtes de colonne)
          int compt = 0;
      
          while ((ligne=lr.readLine())!=null)
          {
               if (compt!=0)   // si ma ligne est différente de la première ligne, alors ...           {
                String[] tabtemp = ligne.split(";");
                // "[\\s]" permet de tester si le caractère est un caractère blanc : espace, tabulation, retour à la ligne ... équivalent à [ \t\n\r\f\x0B], mais j'ai déjà aussi testé "[\\d]" ou "[\\D]" ou "[\\w]" ou "[\\S]", je n'arrive pas à comprendre ce qu'est mon deuxième caractère, et la ligne "obsoleted by Celera n'est même pas reconnue, elle s'affiche.
                if ((tabtemp[1].regionMatches(0, "\\s", 0, 1)==false) && (tabtemp[1]!="obsoleted by Celera"))  
                 {System.out.println(tabtemp[1]);}
                /    *if ((tabtemp[0]!="") && (tabtemp[1]!=""))
                {
                 listreferencesbiogps.add(tabtemp[0] +"---" +tabtemp[1]);
                 System.out.println(tabtemp[0] +"---" +tabtemp[1]);
                }*/           }
               compt++;
          }
        // fermeture du flux de lecture  
        lr.close();
      
     }
    Donc quand j'exécute cette méthode, j'ai ceci qui s'affiche (en rapport avec l'extrait de lignes en exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GIMAP2
    OR2M4
    KIAA1328
    obsoleted by Celera
    SPPL2A
     
     
     
    SKIP
     
    ATP6V1E2
    Il reconnaît bien mon contenu de case 1 comme étant le caractère RIEN ("") car il affiche ERREUR en cas de ligne de type noir ou rouge.

    Mais si par exemple après je lui demande de ne pas m'afficher ma ligne si le contenu de la case 1 est RIEN ("") et bien il affiche quand même ma ligne. Et je ne la veux pas cette ligne.


    C'est à n'y rien comprendre ... et j'ai vraiment besoin d'avancer.

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    Pour comparer des chaines de caractères, il faut d'utiliser la méthode "equals" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "aba".equals("aba"); // retourne vrai
    "aba".equals("a");// retourne faux
    "aba".equals(null);//retourne faux
    "".equals(null);//retourne faux

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Points : 49
    Points
    49
    Par défaut
    En effet, c'est vrai, merci !

    Mais le problème ne venait pas de là en fait.

    J'ai effectué une autre sorte de test, j'ai testé la taille de mon tableau issu du "split" et j'ai pu sélectionner les données d'intérêt .

    Merci en tout cas !

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

Discussions similaires

  1. Travail sur chaine de caractère d'un fichier txt
    Par ginkas31 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/09/2007, 15h35
  2. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  3. Réponses: 11
    Dernier message: 17/05/2006, 10h48
  4. problème sur fichier texte
    Par vivelesgnous dans le forum Général Python
    Réponses: 6
    Dernier message: 26/04/2006, 20h08
  5. Travail sur chaine de caractère
    Par corben dallas dans le forum Access
    Réponses: 4
    Dernier message: 02/01/2006, 19h22

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