-1

checkfasta という関数を作成しました。そのコードは以下のとおりです

function checkfasta($seq)
    {
    if(strpos($seq, ">", 0) === "FALSE")
        {
        $dna = preg_replace("/[^ATCG]/", "", strtoupper($seq));
        return $dna;
        }
    else
        {
        $descst = strpos($seq, ">", 0);
        $seqst = strpos($seq, "\n", $descst);
        if(substr_count($seq, ">") == 1)
            {
            $seqen = strlen($seq);
            }
        else
            {
            $seqen = strpos($seq, ">", $seqst)-1;
            }
        $exseq = substr($seq, $seqst+1, ($seqen-$seqst));
        $dna = preg_replace("/[^ATCG]/", "", strtoupper($exseq));
        return $dna;
        }
    }

ユーザー入力からシーケンスを抽出しようとしています。ユーザーが次のような生のシーケンスを指定した場合:

ATGCTAGCTATTAGCTAGCTAGCTACGATCCAC

プログラムは文字列全体を変数として受け取る必要があります。ユーザーが次のようなシーケンスを指定した場合:

>シーケンス

ATGCTAGCTATTAGCTAGCTAGCTACGATCCAC

プログラムは、2 行目から始まるシーケンス全体を取得する必要があります。

上記の関数はそれを行うために作成されましたが、関数をこのように使用している場合:

<?php
include "functions.php";
$seq1 = "GCTAGCTAGCTACGTACGACTGCTAGTAC";
$seq2 = ">Sequence
GCTAGCTAGCTACGTACGACTGCTAGTAC";
echo checkfasta($seq1)."<br>";
echo checkfasta($seq2)."<br>";
?>

これは私が得ている出力です:

CTAGCTAGCTACGTACGACTGCTAGTA

GCTAGCTAGCTACGTACGACTGCTAGTAC

生のシーケンスのみが指定されている場合、最初と最後の文字が削除されます。

誰でも私がどこで間違っているのか説明してもらえますか?

4

2 に答える 2

2

strops() の結果を、値が「FALSE」の文字列ではなく、ブール値の FALSE と比較する必要があります。

if(strpos($seq, ">", 0) === FALSE)

いいえ

if(strpos($seq, ">", 0) === "FALSE")

説明

ブール値の FALSE を返す場合strpos($seq, ">", 0)、これを (型固有の) 文字列 "FALSE" と比較すると、型が異なるため、PHP は false を返します。

ブール値のTRUEを返す場合strpos($seq, ">", 0)、これを(タイプ固有)文字列「FALSE」と比較しているため、タイプが異なるため、PHPはfalseを返します。

つまり、 の結果がどうであれ、strpos($seq, ">", 0)常に false が返されるため、else が評価されます。

于 2013-08-02T17:27:18.300 に答える