Bonjour à tout le monde,

Je suis nouvelle sur le forum tout comme en java et j'espère que vous serez indulgents envers moi. Cela fait 2 jours que je cherche désespérément à régler un petit problème.
J'ai un fichier texte dont les informations (sur des séquences protéiques) sont séparées par une tabulation. Le problème est que pour chaque séquence, la ligne qui contient ces informations se prolonge sur 2, 3 voire 4 lignes avant de passer à la séquence suivante (tout en conservant la tabulation comme délimiteur).
Donc je parviens à récupérer facilement les informations de la 1ère ligne de chaque séquence mais pas les autres lignes qui suivent

Voici comment se présente 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
13
14
15
16
17
18
19
20
21
1        imgtligm_A03900_A03900_H.sapiens_HuV(NP)_gene____u        productive        IGHV4-39*07, or IGHV4-4*07 or IGHV4-59*04 or IGHV4-59*05 or IGHV4-b*02 (see comment)        619        68.77        196/285 nt 
IGHJ4*03        195        89.58        43/48 nt        IGHD3-22*01        2        8        8        13        8.8.13        [25.17.38.11] CARYDYYGSSYFDYW        in-frame +  The submitted sequence and the 
closest germline V-GENE allele show different CDR1-IMGT amino acid lengths (8 
AA in imgtligm_A03900_A03900_H.sapiens_HuV(NP)_gene____u ; 10 AA in  IGHV4-39*07), different CDR2-IMGT amino acid lengths (8 AA in imgtligm_A03900_A03900_H.sapiens_HuV(NP)_gene____u ;  7 AA in  IGHV4-39*07), and low V-REGION identity (68.77% )        
atgcaaatcctctgaatctacatggtaaatataggtttgtctataccacaaacagaaaaacatgagatcacagttctctctacagttactgagcacacaggacctcaccatgggatggagctgtatcatcctcttcttggtagcaacagctacaggtaaggggctcacagtagcaggcttgaggtctggacatatatatgggtgacaatgacatccactttgcctttctctccacaggtgtccactcccaggtccaactgcaggagagcggtccaggtcttgtgagacctagccagaccctgagcctgacctgcaccgtgtctggcagcaccttcagcagctactggatgcactgggtgagacagccacctggacgaggtcttgagtggattggaaggattgatcctaatagtggtggtactaagtacaatgagaagttcaagagcagagtgacaatgctggtagacaccagcaagaaccagttcagcctgagactcagcagcgtgacagccgccgacaccgcggtctattattgtgcaagatacgattactacggtagtagctactttgactactggggtcaaggcagcctcgtcacagtctcctcaggt        
2        imgtligm_A03907_A03907_H.sapiens_antibody_D1.3_var        productive        IGHV2-5*08, or IGHV2-70*01 (see comment)        628        69.12        197/285 nt        
IGHJ4*01        136        76.6        36/47 nt        IGHD3-10*01        2        8        7        10        8.7.10        [25.17.38.11]        CARERDYRLDYW        in-frame        
+                The submitted sequence and the closest germline V-GENE allele show different CDR1-IMGT amino acid lengths (8 AA in 
imgtligm_A03907_A03907_H.sapiens_antibody_D1.3_var ; 10 AA in  IGHV2-5*08), and low V-REGION identity (69.12% )        
        tcagagcatggctgtcctggcattactcttctgcctggtaacattcccaagctgtatcctttcccaggtgcagctgaaggagtcaggacctggcctggtggcgccctcacagagcctgtccatcacatgcaccgtctcagggttctcattaaccggctatggtgtaaactgggttcgccagcctccaggaaagggtctggagtggctgggaatgatttggggtgatggaaacacagactataattcagctctcaaatccagactgagcatcagcaaggacaactccaagagccaagttttcttaaaaatgaacagtctgcacactgatgacacagccaggtactactgtgccagagagagagattataggcttgactactggggccaaggcaccactctcacagtctcctca        
3        imgtligm_A18395_A18395_Human_uPA_cDNA____unassigne        productive        IGHV2-5*08 (see comment)        524        65.14        185/284 nt        IGHJ4*01        
159        81.25        39/48 nt        IGHD2-15*01        2        8        7        11        8.7.11        [24.17.38.11]        CARNYWGTSMDYW        in-frame        +                The submitted 
sequence and the closest germline V-GENE allele show different CDR1-IMGT amino acid lengths (8 AA in imgtligm_A18395_A18395_Human_uPA_cDNA____unassigne ; 10 AA in  
IGHV2-5*08), and low V-REGION identity (65.14% )                
ctgcaggaatgaagcagtcaggacctggcctagtgcagccctcacagagcctgtccatcacctgcacagtctctggtttctcattaactacctatggtgtacactggattcgccagtctccaggaaagggtctggagtggctgggagtgatatggagtggtggaagcacagactataatgcagctttcatatccagactgagcatcaacaaggacaattccaagagccaagttttctttaaaatgaacagtctgcaagctaatgacacagccatatattactgtgccagaaattattggggaacctctatggactactggggtcaaggaacctcagtcaccgtctcctcagccaaaacgacacccccatctgtctatccactggaattcgatatcaagctt        
4        imgtligm_A25486_A25486_H.sapiens_mRNA_for_T-cell_r        No results        
5        imgtligm_A25487_A25487_H.sapiens_mRNA_for_T-cell_r        No results        
6        imgtligm_A25488_A25488_H.sapiens_mRNA_for_T-cell_r        No results        
7        imgtligm_A25489_A25489_H.sapiens_mRNA_for_T-cell_r        No results        
8        imgtligm_A25490_A25490_H.sapiens_mRNA_for_T-cell_r        No results        
9        imgtligm_A25491_A25491_H.sapiens_mRNA_for_T-cell_r        unknown (see comment)        IGLV4-3*01        6        44.79        86/192 nt                                                        1        7        X        1.7.X        [X.17.36.X]                null        +        No rearrangement found                        actgtgtcctggtaccaacaggccctgggtcaggggccccagtttatctttcagtattatagggaggaagagaatggcagaggaaactcccctcctagattctcaggtctccagttccct

Et voici une partie du code que j'ai développé pour le moment (je ne vous mets que l'essentiel):

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
75
76
77
78
79
80
81
82
83
84
85
86
public class Parser
{
    public static void main(String[] args) throws IOException
    {    	
       FileReader fr = new FileReader("Summary.txt");
       BufferedReader br = new BufferedReader(fr);
 
       String ligne = "";        
 
       while (( ligne = br.readLine())!= null)
       {
           String s=ligne.trim();
    	  //On "explose" la phrase selon une tabulation
          String[] data = s.split("\\t", 23);	
 
    	  //Si la ligne commence par un chiffre, on fait les traitements 
          Pattern pattern = Pattern.compile("[0-9]+");
          Matcher matcher = pattern.matcher(data[0]);
          while (matcher.find())
    	  {  
 
          //On récupère l'id de la séquence
          String[] idSequence = data[1].split("_");
          System.out.println ("\n" + idSequence[1]);
 
          //On vérifie qu'il y ait bien des allèle V (data[3] non vide)
          if (data.length > 4)
          {	  
          //On récupère les noms des allèle V les uns après les autres
          String[] nomV = data[3].split ("or");     
 
          //On récupère le nom du gène correspondant pour le 1er d'abord 
          String[] geneV = nomV[0].split("\\*");          
 
          //Si le 1er allèle V se termine par un "(see comment)", on l'enlève
          if (nomV[0].indexOf("(see comment)") > 0)
          {System.out.println(geneV[0] + "    " + nomV[0].substring (0,11));} 
 
          //S'il se termine par une virgule, on l'enlève
          else 
        	  { 
        	   if (nomV[0].indexOf(",") > 0)
                     {
        	     String[] nomV1 = nomV[0].split(","); 
        	     System.out.println(geneV[0] + "    " + nomV1[0]);
        	     }
 
                    else { System.out.println (geneV[0] + "    " + nomV[0]);}
        	  }
 
 
          //On affiche les autres allèles V
          for (int i=1; i<nomV.length-1;i++)
          {   
              //On récupère le nom du gène correspondant pour les autres allèles
              String[] geneVi = nomV[i].split("\\*");    
 
              System.out.println(geneVi[0] + "    " + nomV[i]); 
          }
 
          //On vérifie si le dernier allèle V contient le "(see comment)"
          String lastOneV = nomV[nomV.length-1];
 
    	  //On récupère le nom du gène correspondant pour le dernier allèle 
          String[] geneVlast = lastOneV.split("\\*");     
 
          //Si c'est le cas, on enlève le "(see comment)"
          if (lastOneV.indexOf("(see comment)") > 0 && nomV.length > 1)
          {System.out.println(geneVlast[0] + "    " + lastOneV.substring (0,12));}
 
          //Sinon, on affiche l'allèle V tel qu'il est seulement s'il y a plus de 1 allèle (pour ne pas répéter les mêmes allèles)
          else if (nomV.length > 1) 
          { System.out.println(geneVlast[0] + "    " + lastOneV);}  
 
          } // fin du if (data.length > 4)
 
          } // fin du second while                             
 
       } //fin du 1er while   
 
	  //On ferme le fichier 
	  br.close();
 
     } // fin de la méthode static		
 
} // fin de la classe

Voilà et donc pour récapituler, je regarde si la ligne commence par un chiffre. Je fais un split avec comme délimiteur une tabulation et comme limite 23. Je récupère ce qui m'intéresse.
Mais le problème, je ne récupère les données que de la 1ère ligne pour chaque numéro de séquence, je n'arrive pas à récupérer les lignes qui suivent jusqu'à la prochaine séquence, sachant que c'est une seule et même ligne en fait mais coupée en plusieurs lignes (car elle est trop longue).
En php, c'est très facile, dés que je fais un split, il me récupère toute la ligne jusqu'à la prochaine séquence (sans tenir compte de sa longueur, tant que c'est la même avec comme délimiteur la tabulation) mais en java, il s'arrête dès la fin de la 1ère ligne

J'ai pensé à enlever les sauts de lignes à l'intérieur des lignes de chaque séquence, mais ça ne marche pas, le fichier reste tel quel

J'espère que c'est assez clair et merci à toute âme généreuse qui pourra m'aider.

Bien amicalement.