txtを読み込み、それを元に配列を作る方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
VARIO

txtを読み込み、それを元に配列を作る方法

#1

投稿記事 by VARIO » 16年前

先日はlp_solveをC言語に組み込ませる方法についてご指導賜りましてありがとうございました。
おかげさまでうまくいきました。
今回、そのlp_solveで出力された結果(txtファイル)を読み込み、その結果に依存した配列を作る方法を考えています。

lp_solveで出力される結果のテキストは、

Value of objective function: 10

Actual values of the variables:
x1_2 0.272727
x1_5 0.493506
x1_6 0.207792
x1_8 0.454545
x1_10 0.571429



y1_2_1_2 0.272727
y1_2_2_1 0
y1_2_1_5 0.493506




のような形式です。
このテキストの3行目からのx○_□の行(yの行は無視)の右側の数字が0.5以上の場合のみ、
あらかじめ用意してある配列aに対して、配列の要素a[○][□]=1と更新させたいのです。

私がわからないのは、どうやってテキストファイルの読み込ませたい部分だけを指定するのか、
というところです。列数を指定することも考えましたが、その場合、例えば、x10_1とx1_10などをどう
場合分けすれば良いのかわかりません。

どういう関数を使えばいいのかや大まかな流れなど、ヒントだけでも構いませんので
教えていただけないでしょうか?
ちなみに、私の環境はVista/Visual2008です。よろしくお願いします。

つうこうにん

Re:txtを読み込み、それを元に配列を作る方法

#2

投稿記事 by つうこうにん » 16年前

かなりずさんな例ですがたたき台にどうぞ。
配列に入れてませんけど条件に合うものを出力しています。
#include <stdio.h>
#define BUFSIZE (256)

const char *FILENAME = "data.txt";
char buf[BUFSIZE];

int main()
{
	FILE *fp;
	if((fp=fopen(FILENAME,"r"))==NULL){
		fprintf(stderr,"%s : ファイルが見つかりません\n",FILENAME);
		return 0;
	}

	while(fgets(buf,BUFSIZE,fp)!=NULL)
	{
		if('x' == buf[0]){
			int n,m;
			float f;
			sscanf(buf,"%*c%d_%d %f",&n,&m,&f);
			if(0.5 <= f)
				printf("[%d,%d]=%f\n",n,m,f);
		}
	}
	if(ferror(fp))
		fprintf(stderr,"%s : 読み込みエラー\n",FILENAME);
	fclose(fp);
	
	return 0;
}

non

Re:txtを読み込み、それを元に配列を作る方法

#3

投稿記事 by non » 16年前

関数ならstrstrを使って分解すればいいと思います。
それより、配列の大きさの最大は決まっているのですか?
それとも、出てくるたびにリサイズする?

VARIO

Re:txtを読み込み、それを元に配列を作る方法

#4

投稿記事 by VARIO » 16年前

>>つうこうにんさん
ありがとうございます。参考にさせてもらいます。

>>nonさん
はい、決まっています。この例の場合では11×11の配列です。

VARIO

Re:txtを読み込み、それを元に配列を作る方法

#5

投稿記事 by VARIO » 16年前

おかげさまで大幅に課題を進めることができました。
つうこうにんさん、本当にありがとうございました。
また機会があればよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る