都道府県穴埋めゲーム

キーワード3個の場合(100個でも可能にしたい)
a.txtの文章をb.txtの指定した場所に挿入したいです。
------------------------------------------------------------------
a.txt


タイトルタイトルタイトル


ダイヤモンド
パール
裏技

------------------------------------------------------------------
b.txt

<TITLE>【】</TITLE>
<font color="000000">

<h1>【】</h1>

<h2>ポケモンの【】の一覧</h2>
<strong>ポケモン</strong>の<strong>【】</strong>
<A href=""></A><br>
<hr>


<h2>ポケモンの【】の一覧</h2>
<strong>ポケモン</strong>の<strong>【】</strong>
<A href=""></A><br>
<hr>


<h2>ポケモンの【】の一覧</h2>
<strong>ポケモン</strong>の<strong>【】</strong>
<A href=""></A><br>

-----------------------------------------------------------------------
できあがってほしい文章


<TITLE>タイトルタイトルタイトル</TITLE>
<font color="000000">
<h1>タイトルタイトルタイトル/h1>

<h2>ポケモンの【ダイヤモンド】サイト</h2>
<strong>ポケモン</strong>の<strong>【ダイヤモンド】</strong>
<A href=""></A><br>
<hr>


<h2>ポケモンの【パール】サイト</h2>
<strong>ポケモン</strong>の<strong>【パール】</strong>
<A href=""></A><br>
<hr>

<h2>ポケモンの【裏技】の一覧</h2>
<strong>ポケモン</strong>の<strong>【裏技】</strong>
<A href=""></A><br>
<hr>

----------------------------------------------------------------

A 回答 (4件)

★追記。


http://www9.plala.or.jp/sgwr-t/index.html→『初心者のためのポイント学習C言語』
http://homepage3.nifty.com/mmgames/c_guide/index …→『苦しんで覚えるC言語』
 上記の2つで C 言語の学習が出来ると思います。

http://www9.plala.or.jp/sgwr-t/c/sec17.html→『第17章 ファイル入出力』
 このページを読めばファイルの入出力の方法が分かります。
・ちょっとしたツールは探すよりも作った方が早いです。
 今回の質問をきっかけに C 言語を学んでみてはどうでしょうか。
 前回の回答は『完成版』ですのでコピペすれば動きます。
 今後のツール作成の基本として下さい。
・以上。おわり。→頑張って下さい。あなたは『初心者』ではなく『入門者』ですよ。

参考URL:http://www9.plala.or.jp/sgwr-t/c/sec17.html
    • good
    • 0

★初心者ですか。


・初心者でもファイルのオープンやクローズなどは、知っていて欲しいですね。
 そんなに難しくはないと思いますが…。
 とりあえず、program.c の完成版を紹介します。

#include <stdio.h>
#include <string.h>

/* 1行単位で読み込む */
char *getsline( FILE *fa )
{
 static char buff[ 256 ];
 char *find;
 int ch;
 
 while ( (ch = fgetc(fa)) != EOF ){
  if ( ch != '\n' ){
   ungetc( ch, fa );
   fgets( buff, sizeof(buff), fa );
   
   if ( (find = strchr(buff,'\n')) != NULL ){
    *find = '\0';
   }
   return( buff );
  }
 }
 return( "" );
}

/* コンバーター処理 */
int convertor( FILE *fa, FILE *fb, FILE *fo )
{
 char buff[ 256 ];
 char *find;
 
 while ( fgets(buff,sizeof(buff),fb) != NULL ){
  if ( (find = strstr(buff,"【】")) == NULL ){
   fputs( buff, fo );
  }
  else{
   fprintf( fo, "%.*s", (int)(find - buff), buff );
   fputs( "【", fo );
   fputs( getsline(fa), fo );
   fputs( "】", fo );
   fputs( find + 4, fo );
  }
 }
 return( 1 );
}

/* メイン関数 */
int main( int argc, char *argv[] )
{
 FILE *fa;
 FILE *fb;
 FILE *fo;
 int ret = 0;
 
 if ( argc != 4 ){
  printf( "USAGE: program.exe a.txt b.txt out.html\n\n" );
  printf( "a.txt......文章ファイル(txt)\n" );
  printf( "b.txt......テンプレート(txt)\n" );
  printf( "out.html...作成ファイル(html)\n" );
  return( 1 );
 }
 if ( (fa = fopen(argv[1],"r")) != NULL ){
  if ( (fb = fopen(argv[2],"r")) != NULL ){
   if ( (fo = fopen(argv[3],"w")) != NULL ){
    ret = convertor( fa, fb, fo );
    fclose( fo );
   }
   fclose( fb );
  }
  fclose( fa );
 }
 if ( ret ){
  printf( "正常に %s ファイルを作成しました。\n", argv[3] );
 }
 else{
  printf( "どれかのファイルがオープンできませんでした。\n" );
 }
 return( 0 );
}

『a.txt』
------------------------
タイトルタイトルタイトル
タイトルタイトルタイトル
ダイヤモンド
ダイヤモンド
パール
パール
裏技
裏技
------------------------
『b.txt』
yamadesu さんの b.txt がそのまま使えます。

使い方:
>PROGRAM.EXE a.txt b.txt out.html
※a.txt と b.txt より、out.html が作成されます。

以上。
    • good
    • 0

「テンプレート cgi」とかで検索すれば、それっぽいのがいろいろあると思います。



perlのHTML::Templateとか
PHPならsmartyとか、(php単体でもいいですが)
pythonの、Templateクラスとか。
c++なら、最近google ctemplateなるものがでてますね。(使ったことないけど)
http://code.google.com/p/google-ctemplate/
他にもいろいろあると思いますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。やってみます!

お礼日時:2007/04/22 21:36

★ここは『プログラミング』のカテゴリですが…。


・ツールを C/C++ 言語で作成したいという質問でしょうか?
 もしそうならば『b.txt』を読み込み『【】』の文字列を strstr 関数で検索します。
 その後、a.txt も読み込み順番に『【】』の間に挿入していけば良いでしょう。
・下にそのサンプルを載せます。

サンプル:
char a_buff[ 256 ];
char b_buff[ 256 ];
char *find;
FILE *fa; ←a.txtのファイルポインタ
FILE *fb; ←b.txtのファイルポインタ
FILE *fo; ←出力用のファイルポインタ

ファイルのオープン処理
 :
 while ( fgets(b_buff,sizeof(b_buff),fb) != NULL ){
  if ( (find = strstr(b_buff,"【】")) == NULL ){
   fputs( b_buff, fo );
  }
  else{
   fprintf( fo, "%.*s", (int)(find - b_buff), b_buff );
   fputs( "【", fo );
   fputs( fgets(a_buff,sizeof(b_buff),fa), fo ); ←※
   fputs( "】", fo );
   fputs( find, fo );
  }
 }
 :
ファイルのクローズ処理

解説:
・最初に a.txt、b.txt を読み込みでオープンします。そして、out.html などのファイルに
 書き込みでオープンします。つまり、a.txt と b.txt から out.html を作成するのです。
・b.txt を行単位で読み込み『【】』のカッコが見つからなければ、そのまま出力します。
 もし、見つかったらば a.txt から1行単位で読み込み、その文字列を『【】』ではさみ
 出力します。これが上記のサンプルの else ブロックの処理です。
 ※印の部分は分かりやすくするために戻り値をチェックしていません。
 正しくは fgets 関数の戻り値を調べて下さい。また、a.txt は空行が内容に記述されている事が
 前提です。空行も含みたい場合は、※印の部分で空行カットの処理も含めます。→サブ関数を作る。

最後に:
・今回の処理はご自分でツールを作る以外は見つからないと思います。
 タイトルが『ツールを探しています』となっていますが、フリーソフトを探しているのならば
 そちらのカテゴリで質問して下さい。→http://oshiete1.goo.ne.jp/c238.html
・上記のCソースで簡単なツールが作れます。
 キーワードが3個でも、100個でも可能です。
 注意点としては a.txt の単語数と b.txt の『【】』の個数を合わせることです。
・以上。参考に。

参考URL:http://www9.plala.or.jp/sgwr-t/lib/strstr.html

この回答への補足

ファイルオープンやクローズなど
初心者の私には難しいので、
できればprogram.cの完成版を書いてくれる方
是非お願いします。

補足日時:2007/04/23 03:10
    • good
    • 0
この回答へのお礼

ありがとうございます。やってみます!

お礼日時:2007/04/22 21:37

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


おすすめ情報