こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC++のfopenのファイル名の指定方法について

下記のようなcsvファイルを間引くプログラムを改変したいと思っています。
環境はVS2008 C++ コンソールアプリケーションです。

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp,*fp1;
int i, j, retu, ch, cnt=0;
char data[100];
char a=0;

fp=fopen("data.csv","r");
fp1=fopen("kekka.csv","w");
cnt=0;
retu=0;
while (1){
ch=fgetc(fp);
if (ch=='\n') break;
}

while((ch=fgetc(fp))!=EOF){
data[retu]=ch;
retu++;
if (ch=='\n'){
cnt++;
if (cnt>=10){
cnt=0;
for(i=0;i<retu;i++){
printf("%c",data[i]);
fputc(data[i], fp1);
}
}
retu=0;
}

}
return 0;
}

ただ毎回csvファイルの名前をdata.csvに書き換え、さらにkekka.csvを別名にして保存しなければいけないためとても手間です。
そこでその部分を実行時にscanfなどを用いて変更したいと思ったのですがうまくいきません。
fopenでファイル名を実行時(ビルド時)に変更するにはどうすればよいのでしょうか。
ご教授お願いします。

投稿日時 - 2011-09-27 14:37:23

QNo.7037537

困ってます

質問者が選んだベストアンサー

>そこでその部分を実行時にscanfなどを用いて変更したいと思ったのですがうまくいきません。

どのように記述して、どううまくいきませんでしたか?
# できるかできないか?という質問であれば、できるハズですので…書き方が悪いのでしょう。

>fopenでファイル名を実行時(ビルド時)に変更するにはどうすればよいのでしょうか。

コンソールアプリですから、たいていはコマンドラインスイッチで受け取るようにします。
copy コピー元ファイル名 コピー先ファイル名
という指定の仕方はみたことありますよね?

int _tmain(int argc, _TCHAR* argv[])
のargv[1]やargv[2]に入ってきます。
またコマンドラインで指定したオプションの個数がargcに入ってきます。

argc、argvを使用した例は簡単に見つかるでしょう。
http://www.geocities.co.jp/SiliconValley-Bay/7437/c/command.html
http://www.geocities.jp/ky_webid/c/045.html
http://ratan.dyndns.info/MicrosoftVisualC++/filepointa2.html
http://wisdom.sakura.ne.jp/programming/c/c32.html
などなど。
# 想定する数より少なかったとき…などについて考慮しておくべきでしょう。
# エラー処理サボると吹っ飛ぶかも知れません。

投稿日時 - 2011-09-27 14:55:07

お礼

ご回答ありがとうございます。
>どのように記述して、どううまくいきませんでしたか?
最初以下のようにして無理でした。
char a=0;
scanf("%s",&a);
fp=fopen(a,"r");

Wr5さんの提示してくれたURLを見たところ配列表示で書く必要があるみたいでしたので以下のように書き換えたところ無事プログラムが走りました。
char a[100]={0};
scanf("%s",&a);
fp=fopen(a,"r");

ちなみに
>コンソールアプリですから、たいていはコマンドラインスイッチで受け取るようにします。
ここから後の文章は正直何をいっているのか理解できませんでしたorz
まだまだ勉強不足のようです。

ご教授ありがとうございました。

投稿日時 - 2011-09-27 15:25:04

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問