プロが教えるわが家の防犯対策術!

プログラムに数値を読み込ませるため数値を抽出したいのですが、初心者でありわかりませんでした。
調べてみると数値のみ抽出は可能なようなのですが、以下のような抽出は可能でしょうか?

(351.0,242.0)=33847 (347.9,241.7)= 0
(251.0,126.0)=30682 ( -1.0, -1.0)= -5
(409.0,247.0)=30336 (405.9,246.5)= 0
           ・
           ・
           ・
このうち1行目ならば
351.0 242.0 347.9 241.7
のようにかっこの中のみ(カンマ含まず)抽出させたいです。
ご存じの方よろしくお願いいたします。

A 回答 (5件)

double v1,v2,v3,v4;


fscanf(fp," ( %lf , %lf ) = %*d ( %lf , %lf ) = %*d ",&v1,&v2,&v3,&v4);
かな?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/01/19 14:07

失礼 m(_ _)m


テレビ見ながら回答書いていたら、間違えて回答をクリックしてしまいました。




/* data.txt ファイルを読み込み
buff[]の内容を左詰めでまとめる1回答例

----- 実行結果 -----
351.0 242.0 347.9 241.7
251.0 126.0 -1.0 -1.0
409.0 247.0 405.9 246.5
*/
#include <stdio.h>
char *str_token(char *);

int main(void)
{
FILE *fp;
char buff[128];
if((fp=fopen("data.txt","r"))!=NULL){
while(fgets(buff, 128, fp)!=NULL){
printf("%s\n", str_token(buff));
}
fclose(fp);
}
return 0;
}


char *str_token(char *p)
{
char *t, *remember;
t = remember = p;
while(*p++ != '(');
while(*p != ')' ) *t++ = (*p++ != ',') ? *(p - 1) : ' ';
*t++ = ' ';
while(*p++ != '(');
while(*p != ')' ) *t++ = (*p++ != ',') ? *(p - 1) : ' ';
*t = '\0';
return remember;
}
    • good
    • 2
この回答へのお礼

ありがとうございます。

お礼日時:2011/01/19 14:07

これは、初心者じゃ壁が高過ぎるんじゃないかなぁ。


とりあえず、ポインタを勉強すべし。
http://www9.plala.or.jp/sgwr-t/c/sec10-2.html




/* buff[]の内容を左詰めでまとめる1回答例

----- 実行結果 -----
351.0 242.0 347.9 241.7
251.0 126.0 -1.0 -1.0
409.0 247.0 405.9 246.5
*/
#include <stdio.h>
char *str_token(char *);

int main(void)
{
FILE *fp;
char buff[128];
if((fp=fopen("yahoo6.c","r"))!=NULL){
while(fgets(buff, 128, fp)!=NULL){
printf("%s\n", str_token(buff));
}
fclose(fp);
}
return 0;
}


char *str_token(char *p)
{
char *t, *remember;
t = remember = p;
while(*p++ != '(');
while(*p != ')' ) *t++ = (*p++ != ',') ? *(p - 1) : ' ';
*t++ = ' ';
while(*p++ != '(');
while(*p != ')' ) *t++ = (*p++ != ',') ? *(p - 1) : ' ';
*t = '\0';
return remember;
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/01/19 14:07

ぱっと見では位置は固定のようですが、固定ですか?


固定なら簡単に取り出せますね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/01/19 14:08

いろんな方法がありますが、ひとまずは scanf / sscanf / fscanf のマニュアルをよく読んでください。

(特に「書式」のところ)
    • good
    • 0
この回答へのお礼

皆様回答ありがとうございました。

当方へたれ理工でして…皆様の助言でかすかな知識をくっつけることができました。
勉強を促しご丁寧に回答まで付けてくださったhiroshi09sをベストアンサーに選ばせて頂きましたが、
皆様に感謝感謝です。

就活でSEしか通らなかったら死にそうです。そのときはまた質問させて頂くかもしれませんw
ありがとうございました。

お礼日時:2011/01/19 13:33

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