• ベストアンサー

特定の文字列の抽出について

GGACTTTCA・・・のようにゲノム塩基配列の一部が記してあるファイルから、4個の文字列に、それを逆順にした文字列が続いたもの(CCAGGACC、TGCCCCGTなど)を抽出したプログラムを作成したいのですが、上手く結果が出力できません。 おそらく、最初の任意の4文字を配列に入れ、後半の4つの部分に逆にして入れると思いました。ですが、配列に入れる方法、配列に入れた文字を逆に出力する方法、文字を4つ(もしくは8つ)に限定する方法がわからず、プログラムが動きません。 方法について、意見アドバイス等よろしくお願いします。

  • Perl
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

塩基配列のことは知らないので、A, C, G, T の4文字をランダムに並べています。 use strict; my @char = qw(A C G T); my $base; $base .= $char[int(rand 4)] while length($base) < 2000; print "$&\n" while $base =~ /(.)(.)(.)(.)\4\3\2\1/g; # (1) print "\n----------\n\n"; foreach my $i (0 .. (length($base) - 8)) { # (2) print "$&\n" if substr($base, $i) =~ /^(.)(.)(.)(.)\4\3\2\1/; } (1) は重複しているもの (例 CCAGGACCCCAG) を抽出しませんが、(2) は抽出します。

hatouiru
質問者

お礼

返事が遅くなってしまい、申し訳ありません。 真ん中の(1)の方法でうまくいきました。 回答ありがとうございます。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

つまり、ある8文字の長さのパターンが含まれるかどうかを検出したいということですか? で、その8文字は4文字+その4文字を反転したもの。と。 #1で8文字のパターンの作り方はわかると思うので、後は単純に検索すればいいだけの話と思うのですが 何が問題なのでしょうか? つくりかけで期待通り動かないものでもいいので、スクリプトを提示してくださいますか? あーひょっとして、A,C,G,T で構成されるすべての組み合わせの4+4文字の 文字列を自動で作って検索とかいう話ですか?

hatouiru
質問者

お礼

返事が遅くなってしまい、申し訳ありません。 ()を使用した抽出、代入の方法を試してみたところ、上手くいきました。 回答ありがとうございます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

やりたいことがよく把握できませんが、長さ4の文字列を逆順にするというのは my $str = 'CCAG'; my $reverse_str = reverse $str; のように、reverse で得ることができます。 文字を四つに限定というのはやりたいことがなんかよくわからないのでスルー

hatouiru
質問者

補足

ありがとうございます。 説明不足で申し訳ないです。 正規表現、パターンマッチを使用します。 ゲノム塩基配列が書いてあるファイルを読み込み、その文字の集合の中から、4個の文字列にそれを反転した文字である8文字を抽出し、表記するというプログラムです。 (例: ・・・CCATGCCCCGTTCA・・・という風にファイルに書いてあったら、TGCCCCGTを抜き出し、表記する) 文字を4つに限定・・・と考えたのは、ATGCCCCGTAのように真ん中で反転していることは同じでも文字数が違うものも抽出してしまうのではないかと考えたからです。

関連するQ&A

  • 文字列のプログラムについて

    キーボードから入力された1行の文字列を逆順(abc -> cba)にして、 更に大文字なら小文字にし、小文字なら大文字にして表示するプログラムを作る問題です。 とりあえず getcharを使い、キーボードから文字列を入力しその文字列を 配列変数に保存し、その配列変数について変換させるのだと思いますが、 どうしてもgetcharでキーボードからえた文字列を配列変数にいれる方法がわかりません。 教えてください。

  • 特定文字列間の文字列の抽出の際についての質問なのですが、

    特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?

  • 任意の文字列を抽出

    半角スペースを含む文字列から任意の文字列を抽出するには、どういった処理が必要になりますか?

    • ベストアンサー
    • Perl
  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • [初心者]perlで文字列抽出

    perlの超初心者です. 標準出力された文字の中から任意の文字列をperlで抽出したいのですが... 例えば, 1 lsコマンドでファイル一覧を表示 2 表示された中から任意の文字列とマッチするものを抽出 3 マッチした文字列の後ろの文字を知る(拡張子とか) 4 さらに,1~3を'perl hoge.pl'とコマンド打つだけのワンアクションでやりたい. という感じなのですが... 勉強を始めたばかりなので,どういったキーワードを勉強すればよいのか,見当つかない状態です... おそらく,私がしょうもない質問をしているのだろうとは思いますが, 何かヒントでも教えていただければ幸いです. 周りに詳しい人物もいないので,なんとか頑張って習得したいと思っています. よろしくお願いしますm(><)m

    • ベストアンサー
    • Perl
  • Excelで文字列の抽出をしたいので教えてください

    Excelで下記の文字列を抽出したいのですがどなたか教えてください 例) - abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出 -- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出したいのですが宜しくお願いします

  • c言語によって文字列を逆順するプログラム

    文字列の並びかたを逆にするプログラムを作るのですが、関数はtoreverse()という関数を作ってプログラムをつくらないといけません>< ちなみに、この関数が逆順にする関数です。あと文字列は最大100文字です。 わかる方いらっしゃいましたらお願いします。

  • @のみを含む文字列を抽出

    メールをエクスポートしたテキストファイルがあり、そこからメールアドレスだけを抽出したいと思っています。 Windowsで仕事をしており、とりあえずQGREPというフリーウェアを使っているんですが、「@」という文字列で検索をかけると、「@」を含む「行全体」を出力してしまいます。 出力イメージとしてはこんな感じです。 ========================================== From Postmaster@xxxx.xxxx.co.jp Mon Sep 06 05:10:13 2004 Message-ID: <20040905201013.15166.qmail@xxxxx.com> 発行人: XX XX xxxxxxx@xxxx.com ========================================== こういうファイルからメールアドレスだけを抽出する方法が分からないので、今は手作業でやっているんですが、@を含む文字列(文字の塊)だけをうまく抽出する方法はないでしょうか? 宜しくお願いします。

  • 文字を反転させる。

    以下の手順に従ってプログラムを作成せよ.適宜printf を利用して,入力支援(「文字列を入 力して下さい」などの画面表示)を行うこと. (1) キーボードから文字列を入力し,文字配列s[64] に格納する. (2) 文字配列s[64] に格納されている文字列を逆順にしてt[64] に格納する(配列全部を逆 順にするのではなく,NULL 文字までの要素を逆順にする). (3) t[64] を画面表示する. ポインタ使用不可、ヘッダファイル<stdio.h>だけ 入力された文字を反転させるということでしょうか?? #include <stdio.h> int main(void){ int i; char s[256]; char t[256]; printf("文字列を入力:"); scanf("%s" , s); for ( i = 0; i < '\n'; i++ ){ t[i] = s[i]; } printf("文字列の逆順は%s",t); getchar(); getchar(); return(0); } これだとただ入力された文字を出力するだけになってしまいますよね・・・・。どうすればいいのでしょうか?

  • EXCEL2007で文字列の右側から特定文字を抽出

    EXCEL2007で1つのセルの文字列の右側から最初の"/"が出現したときまでの文字を抽出する方法を教えてください。 (例)  A 1エクセル/関数/123456/ここがターゲット 2 3 ⇒関数を使用し、上記A1セルの「ここがターゲット」の文字列を抽出したいのです。 神様、どうか教えてください!

専門家に質問してみよう