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

自分でプログラムをADsamplingData関数でやってみたのですがデータが指定の保存場所に出力されません。
CSV形式で保存するプログラムを作ったつもりです。
保存場所はEドライブのEdataの中に出力されるようにしたいです。
ちなみにプログラムはこちらです。
int nRet;
HANDLE hDeviceHandle;
ADSMPLREQ SmplConfig;
ADBOARDSPEC BoardSpec;
ULONG ulSmplNum;
FILE *outp;
WORD wSmplData[20000][2];





hDeviceHandle = AdOpen ("FBIAD1");
if (hDeviceHandle == INVALID_HANDLE_VALUE){
AfxMessageBox("デバイスのオープンに失敗しました",MB_OK, 0);
return;
}
else{
nRet = AdGetSamplingConfig(hDeviceHandle,&SmplConfig);
if(nRet != AD_ERROR_SUCCESS){
AfxMessageBox("サンプリング設定情報の読み出しに失敗しました",MB_OK, 0);
}
nRet = AdGetDeviceInfo(hDeviceHandle, &BoardSpec );
if(nRet !=AD_ERROR_SUCCESS){
AfxMessageBox("デバイスの情報取得にに失敗しました", MB_OK, 0);
}
{
SmplConfig.SmplChReq[0]. ulChNo = 2;
SmplConfig.ulSmplNum = 20000;
SmplConfig.ulTrigMode = AD_ETERNITY;

SmplConfig.fSmplFreq = 20000;
SmplConfig.SmplChReq[0]. ulRange = AD_5V;

nRet = AdSetSamplingConfig(hDeviceHandle,&SmplConfig );
if(nRet != AD_ERROR_SUCCESS){
AfxMessageBox("サンプリング条件設定に失敗しました",MB_OK, 0);
}


nRet = AdStartSampling(hDeviceHandle, FLAG_SYNC);
if(nRet != AD_ERROR_SUCCESS){
AfxMessageBox("CSVファイル作成に失敗しました", MB_OK, 0);
}
AdGetSamplingData(hDeviceHandle,&wSmplData[0][0], &ulSmplNum );

outp = fopen("E\\Edata\\record.csv","a");
fprintf(outp,"%f\n",wSmplData);

fclose(outp);
}
}
}
何が違うのですか?
dビルドはできるのですが、プログラムを動かしてもファイルができません。

A 回答 (3件)

AdOpen ("FBIAD1");って使ってるのはインターフェースのADボード?


無限サンプリングにもなってないソースに見えますが今後の話?
(ちょっと前に似た件で質問立ててた人?)

まあ上は置いといて
転記ミスでないのならファイルができないのは
>outp = fopen("E\\Edata\\record.csv","a");
が間違っているからではないでしょうか
↑だとプログラム動かした時のカレントフォルダのE\Edata にファイルを書こうとします

E:\\Edata\\record.csv にしてもできませんか?
できたとしてもほかの回答者書かれているようにまともなデータは書き込まれません
  fprintf(outp,"%f\n",wSmplData[i][p]);
  等のようにして配列分(ループ)書き込み処理してください

それでもできないなら E:\Edata フォルダがないとか
そもそもそこのロジックが走っていないとか

※きちんとソース見たわけではありません

この回答への補足

インターフェイスのADボードを使用しています。前も投稿したものです。

E:\\Edata\\record.csv の:がぬけていたので直しましたがファイルができません。

ちゃんとEドライブの下にEdataをおいています。

ロジックとはどうしたら通りますか?

fprintf(outp,"%f\n",wSmplData[i][p]);はiとpを
forでfor(i=0;i<=94;++i)のようにすればいいですか?

int nRet;
HANDLE hDeviceHandle;
ADSMPLREQ SmplConfig;
ADBOARDSPEC BoardSpec;
ULONG ulSmplNum;
FILE *outp;
WORD wSmplData[20000];

hDeviceHandle = AdOpen ("FBIAD1");
if (hDeviceHandle == INVALID_HANDLE_VALUE){
AfxMessageBox("デバイスのオープンに失敗しました",MB_OK, 0);
return;
}
else{
nRet = AdGetSamplingConfig(hDeviceHandle,&SmplConfig);
if(nRet != AD_ERROR_SUCCESS){
AfxMessageBox("サンプリング設定情報の読み出しに失敗しました",MB_OK, 0);
}
nRet = AdGetDeviceInfo(hDeviceHandle, &BoardSpec );
if(nRet !=AD_ERROR_SUCCESS){
AfxMessageBox("デバイスの情報取得にに失敗しました", MB_OK, 0);
}
{
SmplConfig.SmplChReq[0]. ulChNo = 2;
SmplConfig.ulSmplNum = 20000;
SmplConfig.ulTrigMode = AD_ETERNITY;

SmplConfig.fSmplFreq = 20000;
SmplConfig.SmplChReq[0]. ulRange = AD_5V;

nRet = AdSetSamplingConfig(hDeviceHandle,&SmplConfig );
if(nRet != AD_ERROR_SUCCESS){
AfxMessageBox("サンプリング条件設定に失敗しました",MB_OK, 0);
}


nRet = AdStartSampling(hDeviceHandle, FLAG_SYNC);
if(nRet != AD_ERROR_SUCCESS){
AfxMessageBox("CSVファイル作成に失敗しました", MB_OK, 0);
}
AdGetSamplingData(hDeviceHandle,&wSmplData[0], &ulSmplNum );
AdOutputDO(hDeviceHandle,1);

outp = fopen("E:\\Edata\\record.csv","a");
fprintf(outp,"%f\n",wSmplData[0]);

fclose(outp);
}
}
}
ちなみに直したプログラムがこちらです。

補足日時:2011/09/26 20:54
    • good
    • 0

≻WORD wSmplData[20000][2];


≻fprintf(outp,"%f\n",wSmplData);
無理です、アドレスを浮動少数点数として出力できません、出力がないのではなく変になるだけですが。

この回答への補足

どうしたら改善されますか?

fopenでファイルが作成さえされないのはなぜですか?

補足日時:2011/09/26 17:52
    • good
    • 0

fopen の返り値をチェックしないのはなぜ?

この回答への補足

プログラムが無知なので詳しく教えて下さい。

返り値とはE:¥¥Edata¥¥
の:のことですか?

補足日時:2011/09/26 17:56
    • good
    • 0

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