1
>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" 

は私たちに知られています。

また、この例では、取得するデータは 1 行だけですが、何行にも及ぶ可能性があります。これまでのところ、ファイルの内容全体を文字列変数に書き込んで部分文字列を使用しようとしましたが、終了インデックスが不明であるため、そのロジックには欠陥があるようです。助けてください

java.io.* をインポートします。public class 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);
                    }

            }
    }
    }
4

2 に答える 2

0

問題をより小さく定義しやすいステップに分割します。

ファイルにはファイルの終わりがあり、ファイルが > 記号を使用してテキスト セクションの開始を定義していることはわかっています。

  • ファイルを文字列に読み込みます。
  • 最初の > のインデックスを検索します。
  • 次の行区切りのインデックスを検索します。
  • セクション ヘッダーを解釈します。
  • 次の > のインデックス、またはファイルの末尾を検索
  • 行区切りとインデックスの間にデータを保存します。
  • 次の行区切りステップの検索インデックスからファイルの終わりまで繰り返します。
于 2013-01-22T18:06:04.207 に答える
0

入力の各行を読みたいようで、次のようになります。

  1. 行に存在する場合\は、この文字で分割します
  2. 分割文字列の最初の要素を見て:、現在のマーカーを見つけるために分割し、最初の部分 ( 1A3B) を変数に保存し、2 番目の部分を別の変数に保存します。
  3. この「開始」マーカーから、探している次のマーカーが何であるかを決定します。最初の部分を取り、2 番目の部分の後に文字を追加して ( を形成します1A3B:L)。
  4. 行が終了マーカー1A3B:L(
于 2013-01-22T18:04:07.890 に答える