- ベストアンサー
ファイル生成について(C初心者)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="refresh";URL=http://***.**.**/***/***/ABCD001.html"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> </body> </html> ファイル名=ABCD001.html お世話になります。 上記のようなhtmlファイルがあって http://www.***.**.**/***/***/ABCD001.htmlの ABCD001.htmlの部分だけ変更して新しくファイルを生成しようと思います。 変更する場所のリストはテキストファイル(list.txt)に入っており ABCD001.html~ABCD100.htmlまであります。 そのため最終的には100個のファイルが生成されます。 このようなCのプログラムを作成したいのですが どうやればいいのでしょうか? fwrite・fscanfを使用するのではないかと思いましたが よくわかりませんでした。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> もし、ファイル名が全て違う場合 > 例えば > 01tokyo_01.html > 01tokyo_02.html > ... > 等の場合はリスト化して生成しなければ > いけませんでしょうか? それが一番簡単です。 const char* name[] = { "", "01tokyo_01.html", "01tokyo_02.html", ... }; とでもしておくだけ。
その他の回答 (5)
- ske6
- ベストアンサー率50% (1/2)
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ char *mae="ファイル名より前"; char *usiro="ファイル名から後"; FILE *fp; char buf[sizeof("ABCD000.html\n")]; while(!feof(stdin)){ memset(buf,0,sizeof(buf)); fgets(buf,sizeof(buf),stdin); buf[strlen(buf)-1]='\0'; if(!strlen(buf)) break; if(!(fp=fopen(buf,"w"))) return 1; fputs(mae,fp); fputs(buf,fp); fputs(usiro,fp); fclose(fp); } return 0; } -- コマンドラインから > xxx < list.txt (xxxはexeファイルの名前です) -- これでできると思います
お礼
外部ファイルから作成する方法を 教えて頂きありがとうございます。 これからの参考にさせて頂きます。
- donkey0304
- ベストアンサー率0% (0/2)
> fprintf(fp,"<!DOCTYPE........%s...</html>\n", url); > この部分入れる文字列に「"」が多いため文字列と判断してくれません。 > > 下記の場合だと『』内のみ文字列として判断されます。 > fprintf(fp,『"<!DOCTYPE HTML PUBLIC "』-//W3C//DTD HTML 4.01 Transitional//EN">\n", url); > > この場合、どのようにすればいいのでしょうか? 「"」は文字列のデリミタですので、文字列として使用したい場合は、 「\」でエスケープする必要があります。 fprintf(fp,"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n", url); となります。 ちなみに、「\」を出したい場合も同様です。(\\とすれば、\が1つ出力される)
お礼
ありがとうございました。 「¥」の意味も分かり ちゃんと生成されるようになりました。 身勝手な質問で申し訳ないのですが もし、ファイル名が全て違う場合 例えば 01tokyo_01.html 01tokyo_02.html 02kanagawa_01.html 03saitama_01.html 03saitama_02.html 03saitama_03.html 等の場合はリスト化して生成しなければ いけませんでしょうか? もしよろしければご教授願います。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
No.2 です。 よく見たら、本文の中に変わるところがあるのですね。 失礼しました。 No.2 の方法ではだめです。
お礼
お返事ありがとうございます。 今回の質問とは少し違いますが 知らない内容でしたので、参考になりました。 ありがとうございました。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
もしも、比較的最近の Windows をお使いであれば、そして、コマンドプロンプトの使い方がわかるのであれば、コマンドプロンプトからでもできます。 C言語を使いませんが。 list.txt の中に、 ---------------- abcd001.html abcd002.html …… abcd100.html --------------- のようなデータがあると仮定して、もうひとつ、ファイルのひな形になるものを、base.html などという名前で作ります。 これを、list.txt のファイル名でコピーすればできあがり。 具体的には、コマンドプロンプトから、 for /f %i in (list.txt) do copy base.html %i です。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
char url[64]; char fname[64]; int i; for ( i = 1; i <= 100; ++i ) { /* iをタネにfnameとurlを作る: (sprintfで作れます) */ FILE* fp = fopen(fname,"wt"); fprintf(fp,"<!DOCTYPE........%s...</html>\n", url); fclose(fp); /* ↑書き換える箇所だけ%sにした長い長い文字列 */ }
補足
お返事ありがとうございます。 参考にさせて頂いたのですが fprintf(fp,"<!DOCTYPE........%s...</html>\n", url); この部分入れる文字列に「"」が多いため文字列と判断してくれません。 下記の場合だと『』内のみ文字列として判断されます。 fprintf(fp,『"<!DOCTYPE HTML PUBLIC "』-//W3C//DTD HTML 4.01 Transitional//EN">\n", url); この場合、どのようにすればいいのでしょうか? 再度の質問で申し訳ありません、よろしくお願い致します。
お礼
完璧に出ました! 何度も質問して申し訳ありません。 本当にありがとうございました。