개발/Computer Science
[C프로그래밍] HTML 생성 프로그램 만들기
향포레스트
2023. 6. 20. 01:11
728x90
개발 배경
C프로그래밍 시험을 위해서 공부를 하다가 C언어 파일 입출력, 메모리 동적 할당 파트에서 엄청 재미를 느꼈습니다. 웹은 보안 상 파일을 다루기 어려운데, C에서는 파일 입출력에 관해서 다양하게 개발할 아이디어가 많이 떠올랐습니다.
제일 먼저 실무에 적용할 수 있는 건 이메일 전송용 간단한 HTML을 백오피스 웹 사이트를 이용하여 제작할 수 있게 만들었었는데, 시안 제안용 등 HTML 파일이 필요할 경우가 있습니다. 웹 개발에 대한 이해도가 높은 분이면 제작한 사이트에서 쉽게 소스 코드를 추출하여 만들 수 있는데 전혀 모르는 담당자분에게는 HTML 파일 제작 매뉴얼을 작성해드려야 하나 고민이 생겼습니다. 매번 파일을 만들기도, 코드를 알려드리기도 애매할 때 C의 파일입출력을 이용하여 실행 파일(.exe)를 만들어 드려야겠다. 생각이 났습니다.
기존 이메일 HTML 작성 방식
- 이벤트 게시판에서 에디터를 이용하여 내용을 작성한다.
- 이벤트 게시판 [복사하기] 버튼을 클릭하여 HTML 코드를 복사한다.
* HTML 기본 구성 Tag는 없으며 body 안에 필요한 HTML Tag들이 있습니다. - 이메일 전송 웹 사이트에 복사한 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