質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。
以下が僕の作ったファイル出力部分のプログラムです。
/************/
void ecg_rr(fp,data_max)
FILE *fp;
{
int b,i=0;
int c=1;
char fname[64];
data[0][i]=trend_data[0][i];
for(i=0;i<100;i++)
sprintf(fname,"ss[%d].txt",1+i);
fp = fopen(fname,"w");
fprintf(fp,"%4d\n",c);
fprintf(fp,"%8.8f\n",data[0][0]);
fprintf(fp,"%8.8f\n",data[0][2]);
fprintf(fp,"%8.8f\n",data[0][4]);
fprintf(fp,"%8.8f\n",data[0][6]);
fclose(fp);
sprintf(fname,"sk[%d].txt",1+i);
fp = fopen(fname,"w");
fprintf(fp,"%4d\n",c);
fprintf(fp,"%8.8f\n",data[0][1]);
fprintf(fp,"%8.8f\n",data[0][3]);
fprintf(fp,"%8.8f\n",data[0][5]);
fprintf(fp,"%8.8f\n",data[0][9]);
fclose(fp);
}
複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を
16_4 読み込むテキストファイル名1.txt ss[1]
16_4 読み込むテキストファイル名1.txt sk[1]
16_4 読み込むテキストファイル名2.txt ss[2]
16_4 読み込むテキストファイル名2.txt sk[2]
・・・
とやったのですが、うまくいきませんでした。
どうすればよいのでしょうか。
No.3ベストアンサー
- 回答日時:
>read_dataの呼び出しは上位レベルのものを直接
>sprintf(fname,,"ss[%d].txt",1+i);
>の後に代入すればよいでしょうか?
私には、上位レベルがどうなっているのかわかりませんので、判断がつきませんが、その前の方がいいと思います。
例:
for(i=0;i<100;i++)
sprintf(fname,"読み込むテキストファイル名%d.txt",i+1);
fp=fopen(fname,"r");
read_data(fp); /* リターン値を使う必要あり? */
fclose(fp);
sprintf(fname,"ss[%d].txt",1+i);
この回答への補足
作ってみましたが、うまくいきませんでした。やはり読み込むところがうまくいっていないような気がします。
#include <math.h>
#include <stdio.h>
#define DATA_MAX 20
#define CH 1
static double data[CH][DATA_MAX];
int read_data(fp)
FILE *fp;
{
int i=0;
while(1){
for(i=0;i<DATA_MAX;i++){
fscanf(fp,"%lf",&data[0][i]);
if(feof(fp)!=0) break;
}
return i;
}
}
/************************************************/
void ecg_rr(fp,data_max)
FILE *fp;
{
int i=0;
int c=1;
char fname[64];
char fname1[64];
for(i=0;i<100;i++)
{
sprintf(fname,"arco%d.txt",i+1);
fp=fopen(fname1,"r");
read_data(fp); /* リターン値を使う必要あり? */
fclose(fp);
/****データ出力*********/
sprintf(fname,"ss[%d].txt",1+i);
fp = fopen(fname,"w");
fprintf(fp,"%4d\n",c);
fprintf(fp,"%8.8f\n",data[0][0]);
fprintf(fp,"%8.8f\n",data[0][2]);
fprintf(fp,"%8.8f\n",data[0][4]);
fprintf(fp,"%8.8f\n",data[0][6]);
sprintf(fname,"sk[%d].txt",1+i);
fp = fopen(fname,"w");
fprintf(fp,"%4d\n",c);
fprintf(fp,"%8.8f\n",data[0][1]);
fprintf(fp,"%8.8f\n",data[0][3]);
fprintf(fp,"%8.8f\n",data[0][5]);
fprintf(fp,"%8.8f\n",data[0][9]);
sprintf(fname,"ks[%d].txt",1+i);
fp = fopen(fname,"w");
fprintf(fp,"%4d\n",c);
fprintf(fp,"%8.8f\n",data[0][8]);
fprintf(fp,"%8.8f\n",data[0][10]);
fprintf(fp,"%8.8f\n",data[0][12]);
fprintf(fp,"%8.8f\n",data[0][14]);
sprintf(fname,"kk[%d].txt",1+i);
fp = fopen(fname,"w");
fprintf(fp,"%4d\n",c);
fprintf(fp,"%8.8f\n",data[0][9]);
fprintf(fp,"%8.8f\n",data[0][11]);
fprintf(fp,"%8.8f\n",data[0][13]);
fprintf(fp,"%8.8f\n",data[0][15]);
fclose(fp);
}
}
/*****************メイン関数*******************/
void main(argc,argv)
int argc;
char *argv[];
{
int data_max;
FILE *fp1,*fp2;
if(argc!=3){
printf("damy damy RR \n");
exit(0);
}
if((fp1=fopen(argv[1],"r")) == NULL){
printf("Can't open the file\n");
exit(2);
}
if((fp2=fopen(argv[2],"w"))==NULL){
printf("Can't create the output file of ECG_RR\n");
exit(3);
}
data_max=read_data(fp1);
printf("%d\n",data_max);
fclose(fp1);
ecg_rr(fp2,data_max);
fclose(fp2);
}
sprintf(fname,"arco%d.txt",i+1);
fp=fopen(fname1,"r");
read_data(fp); /* リターン値を使う必要あり? */
fclose(fp);
としていましたが、fnameの部分をfname1にする、つまり以下のようにすることで結果は出力されるようになりました。
sprintf(fname1,"arco%d.txt",i+1);
ただ、プログラムを動かすと
Debug Assertion Failed!
と出てしまいます。これを無視すれば結果は出力されるのですが、これをなくすにはどうすれば良いのでしょうか?BLUEPIXYさんのおっしゃるとおり、リターン値を使う必要があるのでしょうか?
No.2
- 回答日時:
>Xの部分は100個のファイルを表しているのではないと思います。
なるほど、確かにそうですね。
CH 1
が1つだけなのに、なんでわざわざ確保しているのかというと、こうした(読み込みファイル数を増やす)拡張のためのような気がしますが…
とりあえず、1つのファイルを読み込みできる関数があるということなので、
データを溜め込みしないということであれば、
ファイルが1つ読み終わった時に出力しないといけません。なので、こうした読み込みや書き込みの関数の上位レベルでそうしたコントロールをするか、
特に分ける必要がないなら、
この出力する関数の中で、読み込みをしながら、書き出しを行う様にすればいいと思います。
for(i=0;i<100;i++)
sprintf(fname,"ss[%d].txt",1+i);
の間で、読み込むファイル名(ループ毎に1つのファイル名が決まる様にする)を作ってオープンして
read_dataを呼び出します。
そしてファイルクローズします。
まあ、やり方としては色々考えられると思うので、
まずは、方針(どう処理するのか)決めないといけません。(あれこれ言っても、ここはこれを使うというのがあって変更できないかもしれませんし)
-----------------------------------------------
蛇足
>ecg_rr(fp,data_max)
で質問文の関数は呼び出されていますが、渡されたfpは利用されていないし、この関数内で代入されてしまっているので、引数として渡す意味が無いように思います。また、data_maxも利用されていません。
>data[0][i]=trend_data[0][i];
をする意味はまるで無いように思います。
この回答への補足
ご回答ありがとうございます。
read_dataの呼び出しは上位レベルのものを直接
sprintf(fname,,"ss[%d].txt",1+i);
の後に代入すればよいでしょうか?
No.1
- 回答日時:
ちょっと良く分からない部分があるのですが、
質問文のプログラムの時点で、
data[X][i]の
iの部分が各ファイルの10個のデータだとすると、
Xの部分が各ファイル0~99の100個のファイルを表しているのではないですか?
そうして、既にデータが読み込みできているなら
data[0][n]の部分を
data[i][n]にすればいいだけのような気がします。
本当に読み込みができていないのだったら、読み込みの部分を補足して下さい。
ファイル名に規則性があるなら、単にファイル名を変えながら読み込むだけですので、1つのファイルに関して読み込みできているなら、同じように繰り返しの処理にできます。
この回答への補足
読み込みの部分は以下の通りです。Xの部分は100個のファイルを表しているのではないと思います。
ファイルは1つ読み込んでいるだけになっています。
わかりづらくて申し訳ないです。
#include <math.h>
#include <stdio.h>
#define DATA_MAX 100000
#define CH 1
static double data[CH][DATA_MAX],trend_data[CH][DATA_MAX];
int read_data(fp)
FILE *fp;{
int i,j=0;
while(1){
for(j=0;j<DATA_MAX;j++){
for(i=0;i<CH;i++){
/*fscanf(fp,"%8.6lf",&data[i][j]); */
fscanf(fp,"%lf",&data[i][j]);
}
/* j++; */
if(feof(fp)!=0) break;
}
return j;
}
}
void trend_rr(data_max)
{
int m,i;
for(m=0;m<CH;m++){
for(i=0;i<data_max;i++){
trend_data[m][i]=data[m][i];
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Ruby パイソンでテキストファイルが読み込めない 1 2022/11/14 16:42
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスカウンターが更新され...
-
VS2010 MFC CStdioFileについて
-
改行までの一文字ずつのファイ...
-
ファイル内のデータを1行削除...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
C言語とシリアル通信の送受信...
-
VBAでMP3を鳴らしたい
-
バッファとは何ですか
-
VBS形式ファイル:ダブルクリッ...
-
fopenで別ディレクトリにファイ...
-
マイクラでPythonのプログラミ...
-
Java 3D Web Start のソースコ...
-
ファイルアイコンの左下に緑の□...
-
サーブレットをapacheで公開す...
-
絶対パスの絶対て英語で何でし...
-
Maximaでダブルクリックでwxmフ...
-
エンディアンと2の補数表現
-
webアプリケーションでの画像フ...
-
Microsoft VBAで2GBを超えるフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
テキストファイルの行数を取得...
-
バイナリファイルをテキストフ...
-
c言語 2つのファイルを行ご...
-
fgetsで2行目から文字化け
-
改行までの一文字ずつのファイ...
-
VBSで指定行に挿入
-
winsock recvでの文字化け
-
【VB.Net】バイト型配列に読み...
-
巨大なテキストファイル(可変...
-
C言語での改行コードの扱いにつ...
-
EOF判定されない
-
【C言語】テキスト読み込みの行...
-
続・EOF判定されない
-
freadでファイルを読み込んだ際...
-
fopenで開いたファイルのサイズ...
-
C言語 バイナリファイルの読み...
-
ファイル読み込みについて
-
0x00をファイル出力
-
0バイトファイルの作成
おすすめ情報