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.
Partager