从JAVA中的文件中提取特定数据

时间:2013-01-22 17:52:17

标签: java fasta

>1A3B:H|PDBID|CHAIN|SEQUENCE
IVEGSDAEIGMSPWQVMLFRKSPQELLCGASLISDRWVLTAAHCLLYPPWDKNFTENDLLVRIGKHSRTRYERNIEKISM
LEKIYIHPRYNWRENLDRDIALMKLKKPVAFSDYIHPVCLPDRETAASLLQAGYKGRVTGWGNLKETWTANVGKGQPSVL
QVVNLPIVERPVCKDSTRIRITDNMFCAGYKPDEGKRGDACEGDSGGPFVMKSPFNNRWYQMGIVSWGEGCDRDGKYGFY
THVFRLKKWIQKVIDQFGE
>1A3B:I|PDBID|CHAIN|SEQUENCE
GGQSHNDGDFEEIPEEYL
>1A3B:L|PDBID|CHAIN|SEQUENCE
TFGSGEADCGLRPLFEKKSLEDKTERELLESYIDGR

这是存储在文本文件中的数据。我如何严格地在

之间提取数据
  ">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);
                    }

            }
    }
    }

2 个答案:

答案 0 :(得分:0)

您似乎想要阅读每一行输入,并且:

  1. 如果该行中存在\,请将其拆分为此字符
  2. 查看拆分字符串的第一个元素并在:处将其分解以查找当前标记,将第一部分(1A3B)保存到变量,将第二部分保存到另一个变量< / LI>
  3. 从这个“开始”标记中,确定您要查找的下一个标记是什么:通过获取第一部分并将第二部分之后的字母添加到其中(以形成1A3B:L)。
  4. 继续阅读每一个新输入行,将这些行存储在某种List或数组中,直到一行以结束标记(1A3B:L)开头。

答案 1 :(得分:0)

将问题分解为更小,更容易定义的步骤。

您知道您的文件包含文件结尾,并且您知道您的文件使用了&gt;用于定义文本部分开头的符号。

  • 将文件读入字符串。
  • 查找第一个&gt;。
  • 的索引
  • 查找下一行分隔符的索引。
  • 解释部分标题。
  • 查找下一个&gt;的索引,或文件结尾
  • 在行分隔符和索引之间保存数据。
  • 从下一行分隔符步骤的查找索引重复,直到文件结束。