Last Update: Nov.19,2006

C Source Library

「LSI C-86 Ver.3.30c 試食版」、「Borland C++ 5.5」でコンパイル出来ます。

■ テキストファイルをHTML化する

/*  txt2html.c : テキストファイルをHTML化する
 *
 *  Copyright (c) 2000, 2006 AOK. 
 *  
 *      2000.07.17 - 初版
 *      2000.10.30 - 2版
 *      2006.11.19 - 3版
 */

#include <stdio.h>
#include "misc.h"

#define TABWIDTH    4

/* タブをスペースに変換 */
void fill_space(int n, FILE *fp)
{
    int num = TABWIDTH - n % TABWIDTH;
    while (num-- > 0) fputs("&nbsp;", fp);
} 

/* メインルーチン */
int main(int argc, char **argv)
{
    FILE *fin, *fout;
    char filename[FILENAME_MAX+1];
    int ch, col;
    putchar('\n');
    if (argc < 2) {
        puts("パラメータが足りません.\n\n使い方:TXT2HTML filename");
        return 1;
    }
    argv++;
    change_ext(filename, *argv, "htm");
    if ((fin = fopen(*argv, "r")) == NULL) {
        fprintf(stderr, "エラー:%sを開けません.\n", *argv);
        return 1;
    }
    if ((fout = fopen(filename, "w")) == NULL) {
        fprintf(stderr, "エラー:%sを開けません.\n", filename);
        fclose(fin);
        return 1;
    }
    printf("%s → %s\n", *argv, filename);
    fputs("<html>\n<head>\n", fout);
    fputs("<meta http-equiv=\"Content-Type\" ", fout);
    fputs("content=\"text/html;charset=Shift_JIS\">\n", fout);
    fprintf(fout, "<title>%s → %s</title>\n", *argv, filename);
    fputs("<style type=\"text/css\">\n<!--\n", fout);
    fputs("body { font-family:monospace; }\n-->\n</style>\n", fout);
    fputs("</head>\n<body>\n", fout);
    col = 0;
    while ((ch = getc(fin)) != EOF) {
        switch ((char)ch) {
            case '\t':
                fill_space(col, fout); col = -1; break;
            case '\n':
                fputs("<BR>\n", fout); col = -1; break;
            case ' ':
                fputs("&nbsp;", fout); break;
            case '>':
                fputs("&gt;", fout); break;
            case '<':
                fputs("&lt;", fout); break;
            case '&':
                fputs("&amp;", fout); break;
            case '\"':
                fputs("&quot;", fout); break;
            default:
                fputc((char)ch, fout); break;
        }
        col++;
    }
    fputs("\n</body>\n</html>\n", fout);    
    fclose(fin);
    fclose(fout);
    puts("変換に成功しました.");
    return 0;
}