2013-01-22 76 views
1
>1A3B:H|PDBID|CHAIN|SEQUENCE 
IVEGSDAEIGMSPWQVMLFRKSPQELLCGASLISDRWVLTAAHCLLYPPWDKNFTENDLLVRIGKHSRTRYERNIEKISM 
LEKIYIHPRYNWRENLDRDIALMKLKKPVAFSDYIHPVCLPDRETAASLLQAGYKGRVTGWGNLKETWTANVGKGQPSVL 
QVVNLPIVERPVCKDSTRIRITDNMFCAGYKPDEGKRGDACEGDSGGPFVMKSPFNNRWYQMGIVSWGEGCDRDGKYGFY 
THVFRLKKWIQKVIDQFGE 
>1A3B:I|PDBID|CHAIN|SEQUENCE 
GGQSHNDGDFEEIPEEYL 
>1A3B:L|PDBID|CHAIN|SEQUENCE 
TFGSGEADCGLRPLFEKKSLEDKTERELLESYIDGR 

這是存儲在文本文件中的數據。我如何去提取數據嚴格間從JAVA文件中提取特定數據

">1A3B:I|PDBID|CHAIN|SEQUENCE" and ">1A3B:L|PDBID|CHAIN|SEQUENCE", 

當只有

">1A3B:I|PDBID|CHAIN|SEQUENCE" 

我們所知。

此外,在這個給出的例子中,雖然要檢索的數據只有一行,但它也可以變化多達幾行。 到目前爲止,我嘗試將文件的全部內容寫入字符串變量並使用子字符串,但由於末尾索引未知,該邏輯似乎有缺陷。請幫忙

import java.io. *;公共類ReadingChainSpecificFastaSequence {

public static void main(String[] args) { 


      File file = new File("1A3B.fasta.txt"); 
      BufferedInputStream bin = null; 

      try 
      { 

        FileInputStream fin = new FileInputStream(file); 


        bin = new BufferedInputStream(fin); 


        byte[] contents = new byte[1024]; 

        int bytesRead=0; 
        String strFileContents=null; 

        while((bytesRead = bin.read(contents)) != -1){ 

          strFileContents = new String(contents, 0, bytesRead); 

        } 
        // System.out.print(strFileContents); 
        String search = ">1A3B:I|PDBID|CHAIN|SEQUENCE"; 
        int start = (strFileContents.indexOf(search))+30; 
        String search2= ">1A3B:L|PDBID|CHAIN|SEQUENCE"; 
        int end= (strFileContents.indexOf(search2)); 
        String result = strFileContents.substring(start,end); 

      } 
      catch(FileNotFoundException e) 
      { 
        System.out.println("File not found" + e); 
      } 
      catch(IOException ioe) 
      { 
        System.out.println("Exception while reading the file "+ ioe); 
      } 
      finally 
      { 

        try{ 
          if(bin != null) 
            bin.close(); 
        }catch(IOException ioe) 
        { 
          System.out.println("Error while closing thestream:"+ioe); 
        } 

      } 
    } 
    } 
+0

請在問題中包含您的代碼。 –

+0

正則表達式是你的朋友 – Mark

+0

什麼意思_when只有'> 1A3B:I | PDBID | CHAIN | SEQUENCE'是我們所知道的._?你的意思是說你不知道結尾分隔符是什麼?這部分沒有意義。或者,您的意思是要提取的數據在''''下一行開始處結束? –

回答

0

好像你要讀取輸入的每一行和:

  1. 如果存在於線\
  2. 看那對這個角色把它分解拆分字符串的第一個元素,並在:處將其拆分以找到當前標記,將第一部分(1A3B)保存爲變量,將第二部分保存到另一個變量
  3. 從這個「開始」標記中,確定您要查找的下一個標記是:通過取第一部分並在第二部分之後添加字母(形成1A3B:L)。
  4. 保持讀取每一個新的輸入行,將這些行存儲在某種列表或數組中,直到一行以結束標記開始(1A3B:L)。
0

將問題分解爲更小,更容易定義的步驟。

你知道你的文件有一個最終的文件,並且您知道您的文件使用>符號定義文本部分的開頭。

  • 將文件讀入字符串。
  • 查找第一個>的索引。
  • 查找下一行分隔符的索引。
  • 解釋部分標題。
  • 查找下一個>的索引或文件結尾
  • 在行分隔符和索引之間保存數據。
  • 從查找下一行分隔符的索引開始重複,直到文件結束。