C言語関係掲示板

過去ログ

No.446.ファイルから3次元座標を読み込む

[戻る] [ホームページ]
No.3181

ファイルから3次元座標を読み込む
投稿者---poo(2002/10/28 14:04:25)


ファイルの中にある座標を読み込みたいです。
これは2次元ですが
4;         /*頂点数*/
1.0;0.0;1.0;, /*座標*/   
1.0;0.0;-1.0;,
-1.0;0.0;-1.0;,
-1.0;0.0;1.0;;

2; /*面の数*/
3;0,1,2;, /*面の形、結線情報*/
3;2,3,0;;
となっています
セミコロンやカンマがあります

またある一文のあとに書かれている数字(上記の座標)を
読み込むにはどうしたらいいのでしょうか?

例えば
template{
1;1;1;,
2;2;2;;
}
mesh{
4;         
1.0;0.0;1.0;,
1.0;0.0;-1.0;,
-1.0;0.0;-1.0;,
-1.0;0.0;1.0;;

2;
3;0,1,2;,
3;2,3,0;;

material{
1;
1;
1;;
}

などとあった場合にmesh{以降の数字を読み込む、などの時です。

上手く説明もできず長くなってしまいましたが、
是非お願いします。

No.3251

Re:ファイルから3次元座標を読み込む
投稿者---ともじ(2002/10/30 22:26:04)


こんばんは。

要は"mesh{"から"}"を読み込めばいいのですよね。
ちょっとネストが深いのですが、以下のような感じでしょうか。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
	FILE *fp;
	char s[256], *p;
	int i, n;
	
	if ((fp = fopen("smpl.dat", "r")) == NULL) {
		printf("file open error!!\n");
		return (1);
	}
	
	while (1) {
		if (fgets(s, 256, fp) == NULL) break;
		/* "mesh{"まで読み飛ばす */		
		if(strstr(s, "mesh{") == NULL) 
			continue;
		/* "mesh{"以降の処理 */
		else {
			while(1) {
				/* 次の1行を読む */
				if (fgets(s, 256, fp) == NULL) goto END;
				if (strchr(s, '}') != NULL) break;
				/* 数分ループ */
				n = strtol(s, NULL, 10);
				for (i = 0; i < n; i++) {
					if (fgets(s, 256, fp) == NULL) goto END;
					/* ';' ','以外を抽出 */
					p = strtok(s, ";," );
        					if (p != NULL) printf("%s ", p);
        					while (p != NULL) {
                					p = strtok(NULL, ";,");
        						if (p != NULL) printf("%s ", p);
					}
				}
			}
		}
	}
END:
	fclose(fp);
	
	return(0);
}


これで、sampl.datが以下のとき
	1.0 0.0 1.0  
 	1.0 0.0 -1.0 
 	-1.0 0.0 -1.0 
 	-1.0 0.0 1.0 
 	3 0 1 2  
 	3 2 3 0 
 	2.0 0.0 2.0  
 	2.0 0.0 -2.0 
 	-2.0 0.0 -2.0 
 	-2.0 0.0 2.0 
 	4 0 4 4  
 	4 4 4 0 

が結果となります。
template{
	1;1;1;,
	2;2;2;;
}
mesh{
	4;         
	1.0;0.0;1.0;, 
	1.0;0.0;-1.0;,
	-1.0;0.0;-1.0;,
	-1.0;0.0;1.0;;

	2; 
	3;0,1,2;, 
	3;2,3,0;;
}
material{
	1;
	1;
	1;;
}
mesh{
	4;         
	2.0;0.0;2.0;, 
	2.0;0.0;-2.0;,
	-2.0;0.0;-2.0;,
	-2.0;0.0;2.0;;

	2; 
	4;0,4,4;, 
	4;4,4,0;;
}



No.3259

Re:ファイルから3次元座標を読み込む
投稿者---poo(2002/10/31 13:10:00)


ありがとうございました。
実はファイルの指定はコマンドラインからになってしまったのでこれを参考に頑張ってみたいと思います。