最新閲覧日:

以下のような、テキストファイルを用意しました。

factor EF-G
2117..3334 +40515605614tufA1aq_005JCOG0050

elongation factor EF-Tu
3346..3660 +10415605615rpsJaq_008JCOG0051ribosomal
・・・・というふうにこういうのが延々と続くわけですが、ここから、
2117と3334、3346と3660というふうにここの数字だけを抜きたいんです。
たとえば、fgetcで、1行よんでから、一文字ずつ読んで、何個めから・・みたいに書いていったんですが、どうしてもうまくうごいてくれません。
なにか、ほかにいいアイデアないでしょうか?

このQ&Aに関連する人気のQ&A

A 回答 (4件)

昔の記憶ですみません。

unix 系では字句解析を行うルーチンを自動的に生成
する lex/flex というツールがあります。
数字だけで構成されるトークンを切り出すようなものは lex / flex を使えば
簡単に作ることができた思います。
Windows 系の OS にも移植されていたはずです。
    • good
    • 0

数字が記述された行を特定することはできるのですよね。


ならば、次のようにしてみて下さい。

・行の読み込み
  fgets(buf, DATA_LEN, fp);
・数値の抜き出し
  sscanf(buf, "%d%*c%*c%d", &a, &b);

「%*c」というのは、「そこにある1文字は読み捨てろ」という意味です。
つまり、数値と数値の間にあるピリオド2つを無視して、数値のみを抜き出します。
    • good
    • 0

以下の条件が必須になります。



1.抜き出す文字列の前の行には、「factor EF-」が必ずある。
2.抜き出す文字は行の先頭からで、最初の区切りに「..」、次の区切りにスペースがある。

この条件から、以下のような処理が考えられます。(エラー処理は考慮していません。)
1.ターゲットファイルをオープンする。
2.一行読込む。但し、EOFだったら項目8へ。
3.「factor EF-」が含まれるか確認し、なければ、項目2.へ戻る。
4.一行読込む。但し、EOFだったら項目8へ。
5.「..」の位置を検出し、先頭からその位置までを前半データ保存用領域へコピーする。
6.項目5.の処理で取得した位置からさらにスペースの位置を検出し、項目5.の検出位置+2(「..」の分)から、検出位置までを後半データ保存領域へコピーする。
7.項目2.へ戻る。
8.ファイルをクローズして終了。
    • good
    • 0

前提条件として、


1.行の終わりは改行がある
2.抜き出したい数字が含まれる行以外は数字で始まらない
3.抜き出したい数字部分の桁数は固定である
というのが成立するのであれば、
1.fgets()で一行読み込み
2.1文字目(C言語的に言うと0文字目?)が数字か否か?
3.1文字目が数字ならば、1文字目から4文字目までと、7文字目から10文字目を取り出して保存
っていうので、かなりお手軽なプログラムが出来ると思うのですが。
そうでなくても、だいたい似たような処理で出来ると思います。

見たところ、理系の実験データのようですね。
ちょっと、辛口ですが、理系の人なら、発想の転換もお手の物では?
ちょっと目先を変えればすぐ解決しそうなものですが・・・
それとも、自分みたいな工学系の人間とは発想が違うのかな・・・

ちなみに、これがベストというわけではないので、さらに色々工夫してみると
もっとすっきりするかも知れませんね。研究あるのみです。
    • good
    • 0

このQ&Aに関連する最新のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ