先日は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です。よろしくお願いします。
txtを読み込み、それを元に配列を作る方法
Re:txtを読み込み、それを元に配列を作る方法
かなりずさんな例ですがたたき台にどうぞ。
配列に入れてませんけど条件に合うものを出力しています。
配列に入れてませんけど条件に合うものを出力しています。
#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; }
Re:txtを読み込み、それを元に配列を作る方法
関数ならstrstrを使って分解すればいいと思います。
それより、配列の大きさの最大は決まっているのですか?
それとも、出てくるたびにリサイズする?
それより、配列の大きさの最大は決まっているのですか?
それとも、出てくるたびにリサイズする?
Re:txtを読み込み、それを元に配列を作る方法
>>つうこうにんさん
ありがとうございます。参考にさせてもらいます。
>>nonさん
はい、決まっています。この例の場合では11×11の配列です。
ありがとうございます。参考にさせてもらいます。
>>nonさん
はい、決まっています。この例の場合では11×11の配列です。
Re:txtを読み込み、それを元に配列を作る方法
おかげさまで大幅に課題を進めることができました。
つうこうにんさん、本当にありがとうございました。
また機会があればよろしくお願いします。
つうこうにんさん、本当にありがとうございました。
また機会があればよろしくお願いします。