개발/Computer Science

[C프로그래밍] HTML 생성 프로그램 만들기

향포레스트 2023. 6. 20. 01:11
728x90

개발 배경

C프로그래밍 시험을 위해서 공부를 하다가 C언어 파일 입출력, 메모리 동적 할당 파트에서 엄청 재미를 느꼈습니다. 웹은 보안 상 파일을 다루기 어려운데, C에서는 파일 입출력에 관해서 다양하게 개발할 아이디어가 많이 떠올랐습니다.


제일 먼저 실무에 적용할 수 있는 건 이메일 전송용 간단한 HTML을 백오피스 웹 사이트를 이용하여 제작할 수 있게 만들었었는데,  시안 제안용 등 HTML 파일이 필요할 경우가 있습니다. 웹 개발에 대한 이해도가 높은 분이면 제작한 사이트에서 쉽게 소스 코드를 추출하여 만들 수 있는데 전혀 모르는 담당자분에게는 HTML 파일 제작 매뉴얼을 작성해드려야 하나 고민이 생겼습니다. 매번 파일을 만들기도, 코드를 알려드리기도 애매할 때 C의 파일입출력을 이용하여 실행 파일(.exe)를 만들어 드려야겠다. 생각이 났습니다. 

기존 이메일 HTML 작성 방식

  1. 이벤트 게시판에서 에디터를 이용하여 내용을 작성한다. 
  2. 이벤트 게시판 [복사하기] 버튼을 클릭하여 HTML 코드를 복사한다.
    * HTML 기본 구성 Tag는 없으며 body 안에 필요한 HTML Tag들이 있습니다.
  3. 이메일 전송 웹 사이트에 복사한 HTML 코드를 사용한다.

변경할 방식 

  • 기본 HTML의 구조는 C 프로그램 코드에서 선언하기
  • body 안의 내용은 사용자 입력으로 받아오기
  • 파일명은 "sample_" + 타임스탬프로 만들기

구현

기존 2번 방식 [복사하기] 버튼을 클릭하여 body 내용의 HTML 내용을 받아와 기본 HTML 구조와 합쳐 sample_2023062010914.html 파일을 만듭니다.

주요 기능

  • 시간함수 사용 
  • 정수에서 문자열 변환
  • 문자열 연결
  • 파일 입출력
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
#include<time.h>
#include<locale.h>
#pragma warning(disable:4996)

void main() {	
	struct tm* t;
	time_t base = time(NULL);
	t = localtime(&base);

	int year = t->tm_year + 1900;
	int month = t->tm_mon + 1;
	int day = t->tm_mday;  
	int hour = t->tm_hour; 
	int min = t->tm_min; 
	int sec = t->tm_sec; 

	// 총 12자리
	char time[27] = "sample_";
	char yTime[5];
	char mTime[3];
	char dTime[3];
	char hTime[3];
	char nTime[3];
	char sTime[3];

	// 10진수 문자 변환
	itoa(year, yTime, 10);
	itoa(month, mTime, 10);
	itoa(day, dTime, 10);
	itoa(hour, hTime, 10);
	itoa(min, nTime, 10);
	itoa(sec, sTime, 10);

	// 샘플파일 문자열 연결
	char* sFileName;
	sFileName = strcat(time, yTime);
	sFileName = strcat(sFileName, mTime);
	sFileName = strcat(sFileName, dTime);
	sFileName = strcat(sFileName, hTime);
	sFileName = strcat(sFileName, nTime);
	sFileName = strcat(sFileName, sTime);
	sFileName = strcat(sFileName, ".html");
	
	// 메일 내용 가져오기
	printf("내용 복사 붙여넣기 한 후 ENTER 키를 눌러주세요.\n");
	printf("eDM 내용 : ");
	char body[5000];
	gets_s(body, 5000);
	
	// HTML 
	char htmlStart[7000] = "<!DOCTYPE html>\
		<html>\
		<head>\
		<meta charset=\"utf-8\">\
		<title>SAMPLE</title>\
		</head>\
		<body>";
	char htmlEnd[15] = "</body></html>";
	char* html;
	html = strcat(htmlStart, body);
	html = strcat(html, htmlEnd);
	
	char ch;
	FILE *fp, *rfp;
	fp = fopen(sFileName, "w");
	//fp = fopen_s(&fp, sFileName, "wt+,ccs=UTF-8");

	if (fp == NULL) 
	{
		printf("파일 생성 오류");
	}
	else
	{
		printf("%s", "변환완료\n");
	}
	setlocale(LC_ALL, ".utf8");

	fputs(html, fp);
	fclose(fp);
}

실행 화면

결과

다음 도전 과제

실제로 파일은 생성되지만, 인코딩이 UTF-8로 만들어지지 않아서 한글이 깨지는 현상이 있습니다. 지금 코드에도 인코딩에 관련된 내용을 넣었지만 제대로 된 것은 없습니다. 조금 더 찾아보면 있을 것 같습니다.    

참고사이트
https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-170
https://dojang.io/mod/page/view.php?id=336
https://aawjej.tistory.com/8
https://shaeod.tistory.com/317
https://woo-dev.tistory.com/232
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=gmldbsdl6&logNo=220952124542
728x90