#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int base = 15;
    const int height = 5;
    const int width = 3;
    const int outlength = 8;
    const int pattern_max = 5;
    int num[base][height][width], c;

    // デジタル文字パターン「moji.txt」をopenする。
    FILE *fpi, *fpo;
    fpi = fopen("moji.txt", "r");
    if (!fpi)
    {
        printf("moji.txtをopen出来ません。\n");
        exit(-1);
    }

    // デジタル文字パターンを「moji.txt」から読み込む。
    for (int b = 0; b < base; ++b)
        for (int h = 0; h < height; ++h)
            for (int w = 0; w < width;)
            {
                c = fgetc(fpi);
                switch (c)
                {
                case '0':
                    num[b][h][w++] = 0;
                    break;
                case '1':
                    num[b][h][w++] = 1;
                    break;
                default:
                    break;
                }
            }

    // 出力ファイルをopenする。
    fpo = fopen("date.txt", "w");
    if (!fpo)
    {
        printf("date.txtをopen出来ません。\n");
        exit(-1);
    }

    // 5パターン出力する。
    for (int p = 0; p < pattern_max; ++p)
    {
        // 乱数を利用した８ケタの文字列を作成
        int buf[outlength];
        for (int i = 0; i < outlength; ++i)
            buf[i] = rand() % base;
        for (int h = 0; h < height; ++h)
        {
            for (int b = 0; b < outlength; ++b)
            {
                for (int w = 0; w < width; ++w)
                {
                    if (num[buf[b]][h][w])
                        fprintf(fpo, "●");
                    else
                        fprintf(fpo, "　");
                }
                fprintf(fpo, " "); // 文字間を1バイト開ける。
            }
            fprintf(fpo, "\n"); // 1行の終わり。
        }
        fprintf(fpo, "\n"); // 1パターンの終わり。
    }
    fclose(fpi);
    fclose(fpo);

    // ファイル出力内容を画面表示する。
    {
        char buf[1000];
        fpi = fopen("date.txt", "r");
        while (fgets(buf, 100, fpi))
            printf("%s", buf);
    }
    return 0;
}
