アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のような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でファイル名を実行時(ビルド時)に変更するにはどうすればよいのでしょうか。
ご教授お願いします。

A 回答 (1件)

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



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

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

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

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

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

ご回答ありがとうございます。
>どのように記述して、どううまくいきませんでしたか?
最初以下のようにして無理でした。
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

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