掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30088

他のファイルから特定の文字列の後の負の数値の読み込み
投稿者---itsu(2007/05/05 16:37:32)


 始めましてC言語初心者です.

 他のファイルから,特定の文字列の後に書かれた数値を読み込む関数を作成
したいのですが,以下の用な関数ですと負の数値が上手く読み込めませんでし
た.どうにかして負の数値を読み込ます方法はないのでしょうか?アドバイスの
方宜しくお願い致します.

int setNumbers(double *val, int j, char *str, FILE *fp_model)
{
  char buf[BUFSIZ]={0.0};
  char *p, *q ;
  int i;
  i = 1;
  while (fgets(buf, sizeof(buf), fp_model) != NULL) {
    p = buf;
    while ((q = strstr(p, str)) != NULL) {         
       q += strlen(str);                           
        if (isdigit(*q)) {    
           if (i >= j)
                return -1;
            val[i++] = strtod(q, &p);             }else
        p = q;
    }
  }
return i;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:他のファイルから特定の文字列の後の負の数値の読み込み 30089 bugs 2007/05/05 16:47:45
<子記事> Re:他のファイルから特定の文字列の後の負の数値の読み込み 30090 itsu 2007/05/06 16:38:16


No.30089

Re:他のファイルから特定の文字列の後の負の数値の読み込み
投稿者---bugs(2007/05/05 16:47:45)


setNumbers()の仕様(引数やロジック)に関する説明と、
入出力の例を挙げてください。


この投稿にコメントする

削除パスワード

No.30090

Re:他のファイルから特定の文字列の後の負の数値の読み込み
投稿者---itsu(2007/05/06 16:38:16)


返事が遅くなって申し訳ありませんでした.
使用しているコンパイラはVisual C++ 6.0です.


! AREA_NUMBER = 2
! BODY_AREA = 2.5
! AREA_CD = 3.0
! NORMAL_VECTOR_X = 1
! NORMAL_VECTOR_Y = 2
! NORMAL_VECTOR_Z = 3

setNumbers()は例えば上記の用に"test.txt"に記述し,"NORMAL_VECTOR_X
= "の数値を読み込む際には,以下の用に入力します.そうすることにより
"NORMAL_VECTOR_X = "の次に書かれた数値がarea_normal_vector_x[]に
格納されるのですが,数値が負の場合上手く数値が読み込めません.
何かアドバイスがありましたら宜しくお願い致します.
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
FILE *fp_model ;
int setNumbers(double *val, int j, char *str, FILE *fp_model)
{

    char buf[BUFSIZ]={0.0};
    char *p, *q ;
    int i;

    i = 1;
    while (fgets(buf, sizeof(buf), fp_model) != NULL) {

        p = buf;
        while ((q = strstr(p, str)) != NULL) {         
//strstr文字列pの先頭から文字列str("NORMAL_VECTOR_X = "を探し、見つかった
位置のポインタを返す
            q += strlen(str);                           
//strlen文字列strの長さだけポインタを進める.
/* 文字列strが見つかり,かつその文字列の次の文字が数字なら,数字を発見できたとする */

            if (isdigit(*q)) {    //isdigit(*q) 文字*qが数字なら
真を返す  
                if (i >= j)
                    return -1;

                val[i++] = strtod(q, &p);  // 文字列qを
double型の値に変換する
            } else
                p = q;
        }
    }

    return i;
}
main(){
double area_normal_vector_x[256]={0.0};
int vector_x_judge;

fp_model = fopen("test.text","r");
vector_x_judge = setNumbers(area_normal_vector_x,BUFSIZ ,
 "NORMAL_VECTOR_X = ", fp_model);
fclose(fp_model);

}



この投稿にコメントする

削除パスワード

No.30091

Re:他のファイルから特定の文字列の後の負の数値の読み込み
投稿者---bugs(2007/05/06 18:18:49)


とりあえず、

            if (isdigit(*q) || *q == '-') {

とすれば、入力ファイルの仕様が正しいという前提のもと、
負の数値を取得できるでしょう。



この投稿にコメントする

削除パスワード

No.30092

Re:他のファイルから特定の文字列の後の負の数値の読み込み
投稿者---itsu(2007/05/06 18:36:57)


bugs様,ありがとう御座います.おかげさまで上手くいくようになりました.
isdigit()の機能を勘違いしておりました.


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧