- 締切済み
書式付標準出力をするには??
こんにちは テキストファイルを読み込んで .hファイルに書き込んでいるものなのですが.... #include <stdio.h> #define MAX 256 int main() { FILE *in, *out; char *p, buf[MAX]; int lhs, in_quote; in = fopen("moutput.txt", "r"); if (in == NULL) { printf("Cannot open sample.txt\n"); return 1; } out = fopen("moutput.h", "w"); if (out == NULL) { printf("Cannot open sample.h\n"); return 1; } while (fgets(buf, MAX, in) != NULL) { lhs = 1; in_quote = 0; for (p = buf; *p != '\0'; p++){ if (*p == '=') { lhs = 0; fputc('\n', out); } else if (*p == '"'){ if (in_quote) { in_quote = 0; fputc('\n', out); } else in_quote = 1; }else if (lhs || in_quote){ fputc(*p, out); } } } } 上記のプログラムでfputc(*p,out)で出力させている 部分があると思いますが。 実はこれを書式付で出力させたいと思っています。 今現在読み込んでいるファイルは "POINT_a"="POINT_b"+1000*"POINT_D" で出力結果は POINT_a POINT_b POINT_D なのですが これを VALUE: POINT_a VALUE: POINT_b VALUE: POINT_D にしたいのですが fputcのところをどうしたらいいでしょうか?? ご教授よろおしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- min_is
- ベストアンサー率25% (1/4)
あらかじめ文字列用のバッファを用意しておき >fputc(*p, out); の代わりに1文字づつコピーすればよいのでは。 あとは for ループから抜けたところで printf("VALUE: %s\n",コピー用バッファ); みたいな感じでよいのではないでしょうか? # コピー用バッファの文字列終端に注意してください。
- yama5140
- ベストアンサー率54% (136/250)
(件名と内容に齟齬があるけど・・) >fputc のところをどうしたらいいでしょうか?? >ご教授よろおしくおねがいします。 「教授、よろおしくおねがいね」の間違いでは・・?。 女子大生に言われれば、「うん、いいよ」となるな。 ☆fputc にこだわらずに・・ではダメですか。 「ファイル」でなく、「画面」のものを投稿します。 (BorlandC++5.6.4) 「ご教示方」には程遠いかな、「参考」として下さい。 ・現状で動作をご確認頂き、「ファイル」にする場合は、「 printf( 」を「 fprintf( out, 」と置換すれば・・。 #include <stdio.h> #define MAX 256 int main() { char buf[MAX] = "\"POINT_a\"=\"POINT_b\"+1000*\"POINT_D\"\n"; int i, iCnt; // ファイル関連 // while( NULL != fgets( buf, MAX, in ) ){ printf( "%s", buf ); // この行は「画面」時のみ iCnt = 0; for( i = 0; i < MAX; i++ ){ if( '\n' == buf[ i ] ) break; // 1行終了 if( '\"' == buf[ i ] ){ iCnt++; if( iCnt % 2 ){ // 括り始め printf( "VALUE: " ); continue; // 頭の " は不要 } printf( "\n" );// 括り終わり・改行 continue; // 後ろの " も不要 } if( 0 == ( iCnt % 2 ) ) continue; // 不要文字 printf( "%c", buf[ i ] ); // 括り内文字出力 } fcloseall(); return( 0 ); } 注:インデントに全角空白を用いています。タブに一括変換して下さい。
- asuncion
- ベストアンサー率33% (2127/6289)
>fprus関数とはなんでしょうか それはおそらくタイプミスで、 本当はfputsとタイプしたかったのではないかと思います。
fprintf で 標準出力ってstdoutのことを言うもんじゃないの?
- redfox63
- ベストアンサー率71% (1325/1856)
> fputc('\n', out); > } else > in_quote = 1; > }else if (lhs || in_quote){ > fputc(*p, out); を fputc('\n', out); } else { in_quote = 1; fprus( "VALUE:", out ); } }else if (lhs || in_quote){ fputc(*p, out); といった具合でいいのでは
補足
返信ありがとうございます。 調べたんですけど....... fprus関数とはなんでしょうか?? 一応自分C言語で OSはソラリス(コマンド:vi) なんですけど......。