ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
óÀ½¿¡ ÁÖ¾îÁø ÁöÀúºÐÇÑ ¸ð½ÀÀÇ HTML ű×Á¦°Å±âÄڵ忡 ´ëÇÑ 1Â÷ ¸®ÆåÅ丵ÀÌ ³¡³µ½À´Ï´Ù. 1Â÷ ¸®ÆÑÅ丵Àº ¸ÅÁ÷³Ñ¹ö¸¦ ±âÈ£»ó¼ö·Î ´ëüÇ϶󿴽À´Ï´Ù. óÀ½Äڵ庸´Ù´Â ¾à°£ ´õ ÁÁ¾ÆÁø Äڵ尡 ¸¸µé¾îÁ³½À´Ï´Ù.
À̹ø¿¡´Â ¸ðµâÈ(:12)¿Í °ü·ÃµÈ ³»¿ëÀ» ´Ù·ç¾îº¼±î ÇÕ´Ï´Ù.
'ÁÁÀº ÄÚµå´Â °¡´ÉÇÑ ¸ðµâÈ µÇ¾î¾ß ÇÑ´Ù.´Â ¾ê±â´Â ¼ÒÇÁÆ®¿þ¾î °øÇÐ ÀÔ¹®´Ü°è¿¡¼ µéÀ» ¼ö ÀÖ´Â °Ý¾ðÀÔ´Ï´Ù. ¼Ò½ºÄڵ尡 ±æ¾îÁö¸é º¸±âµµ Èûµé°í, º¸±â Èûµç¸¸Å ¿¡·¯°¡ ¹ß»ýÇÒ È®·üµµ ¸¹½À´Ï´Ù. ¸¹Àº ºÎºÐ¿¡¼ ÄÚµåÀÇ Áߺ¹ÀÌ ¹ß»ýÇÒ ¼öµµ ÀÖ°ÚÁÒ.
ÄÄÇ»ÅÍ´Â ºü¸¥ ¿¬»ê¼Óµµ¸¦ ÀåÁ¡À¸·Î ±íÀ̿켱 °è»êÀ» ƯÈ÷³ª ÀßÇÏ´Â ±â°èÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ·ùÀÇ °è»êÀ» ÇÏ´Ùº¸¸é ¾Æ¹«·¡µµ Áߺ¹µÈ ¿¬»êÀÛ¾÷ÀÌ ¸¹¾ÆÁö°Ô µÇ´Âµ¥¿ä, ¸ðµâÈ´Â ÀÌ·¯ÇÑ ¿¬»êÀÛ¾÷À» À§ÇÑ Áߺ¹µÈ ÄÚµåÀÇ »ý»êÀ» ¸·¾ÆÁÖ°Ô µË´Ï´Ù. ÄÚµåÀÇ ¾çµµ ÁÙ¾îµé°Ô µÉ »Ó´õ·¯, ¸ðµâ´ÜÀ§·Î Å×½ºÆ®¿Í µð¹ö±ëÀÌ °¡´ÉÇÏ´Ï À¯Áöº¸¼ö ¿ª½Ã ½±°Ô µÇ°ÚÁÒ.
¸ðµâÈµÈ ´ÜÀ§ ÄÚµå´Â ´Ù¸¥ ºÎºÐ¿¡ Àç»ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ »ý»ê¼º¿ª½Ã ³ô¾ÆÁö´Â È¿°ú¸¦ ³ë¸± ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¸ðµâÈµÈ Äڵ带 ¸ð¾Æ¼ Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô ¸¸µç ÄÚµå¸ðÀ½À» ¶óÀ̺귯¸®¶ó°í ÇÕ´Ï´Ù.
¸ðµâÈ´Â À̸¦Å×¸é °øÁ¤ÀÇ ¼¼ºÐÈÁ¤µµ·Î º¸½Ã¸é µÉ°Å °°½À´Ï´Ù.
¾Æ·¡´Â ù¹øÂ° ¸®ÆåÅ丵 °úÁ¤À» °ÅÄ£ HTML ű×Á¦°Å ÇÁ·Î±×·¥ÀÔ´Ï´Ù. #include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
using namespace std;
const int MAX_BUF_SIZE=1024;
enum tag_token {TAG_LT = '<', TAG_GT='>'};
int main(int argc, char **argv)
{
int fd;
int readn;
int ridx;
int widx;
char rbuf[MAX_BUF_SIZE] = {0x00,};
char wbuf[MAX_BUF_SIZE] = {0x00,};
int lt_flag = 0;
// used tokenizing
char seps[] = "()|{}, \t.;&-[]\"\':`";
char *tr;
int tag_status = 0;
int offset = 0;
if (argc != 2)
{
fprintf(stderr, "Usage : %s [file]\n", argv[0]);
return 1;
}
if ((fd = open(argv[1], O_RDONLY)) < 0)
{
return 1;
}
while ((readn = read(fd, rbuf+offset, MAX_BUF_SIZE)) > 0)
{
ridx = 0;
widx = 0;
while(ridx < readn)
{
if (rbuf[ridx] == TAG_LT)
{
lt_flag++;
}
if (rbuf[ridx] == TAG_GT)
{
lt_flag--;
if (lt_flag == 0)
{
ridx++;
continue;
}
}
if (lt_flag == 1)
{
ridx++;
continue;
}
// Special Chracter Á¦°Å
if (rbuf[ridx] == '&')
{
int i =0;
char special[10] = {0x00,};
for(i = 0; i < 10; i++)
{
if (rbuf[ridx+i] == ';')
{
ridx = (ridx+i);
break;
}
}
}
if (rbuf[ridx] == '\n' || rbuf[ridx] == '\r')
wbuf[widx] = ' ';
else
wbuf[widx] = rbuf[ridx];
widx++;
ridx++;
}
tr = strtok(wbuf, seps);
while (tr != NULL)
{
printf("%s\n", tr);
tr = strtok(NULL, seps);
}
memset(rbuf, 0x00, MAX_BUF_SIZE);
memset(wbuf, 0x00, MAX_BUF_SIZE);
}
return 0;
}
ÈçÈ÷ ¸»ÇÏ´Â ÅëÂ¥½î½º·Î ÇϳªÀÇ ÇÔ¼ö(main ÇÔ¼ö)³»¿¡¼ ¸ðµç ÀÛ¾÷À» ó¸®Çϰí ÀÖ½À´Ï´Ù. À̰ÍÀ» ¿©·¯°³ÀÇ ´ÜÀ§ ¸ðµâ·Î ºÐ¸®Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½ÀÇ 3°³ÀÇ ´ÜÀ§·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.
ÀÎÀÚó¸® ¸ðµâ
»ç¿ëÀÚÀÇ ÀÎÀÚ¸¦ °Ë»çÇØ¼ ÇÊ¿äÇÑ ¾×¼ÇÀ» ÃëÇÕ´Ï´Ù. µ¶¸³µÈ ÇÁ·Î¼¼½º¶ó°í º¼ ¼ö ÀÖ°ÚÁö¸¸ main()ÇÔ¼ö¿¡ ¸Å¿ì Å©°Ô Á¾¼ÓÀÌ µÇ¹Ç·Î µû·Î ¸ðµâ·Î ºÐ¸®ÇÏ´Â °ÍÀº ¿ÀÈ÷·Á ÇÁ·Î±×·¥ÀÇ °¡µ¶¼ºÀ» ÇØÄ¥ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ °æ¿ì ´ÜÁö ÇϳªÀÇ ÀÎÀÚ¸¸ ÁÖ¾îÁö¹Ç·Î, ±»ÀÌ ¸ðµâÈ ÇÒ ÇÊ¿ä´Â ¾øÀ» °Å¶ó°í »ý°¢µË´Ï´Ù. ÇØ¼ if ¹®À» switch ¹®À¸·Î º¯°æÇϰí, getopt()¸¦ ÀÌ¿ëÇØ¼ ÀÎÀÚÀÇ Ã³¸®¸¦ Á» ´õ À¯¿¬ÇÏ°Ô ÇÏ´Â Á¤µµ·Î ¼öÁ¤À» ÇϰڽÀ´Ï´Ù. void help() { printf("Usage : ./parse [-h] [-f FILENAME]\n"); printf("-f : Input Source File\n"); printf("-h : This Message\n"); }; int main() { ... ... int test_argv = 0; while((c = getopt(argc, argv, "hf:")) != -1) { switch(c) { case 'h': break; case 'f': src_file = optarg; test_argv = 1; break; default: break; } } if (!test_argv) { help(); return 1; } ... ... } HTML Á¦°Å
¸¸¾à C++À» »ç¿ëÇϰí ÀÖ´Ù¸é, ÆÄÀÏÀÛ¾÷°ü·Ã Ŭ·¡½º¸¦ Çϳª ¸¸µé¾î¼ µ¿ÀÏÇÑ Å¬·¡½º³×ÀÓÀ¸·Î ¸Þ¼µå¸¸ ´Þ¸®Çؼ È£ÃâÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÏ¸é ÆíÇÒ°Ì´Ï´Ù. ±×·¸Áö¸¸ C½ºÅ¸ÀÏ·Î ÄÚµùµÈ ÀÌ ÇÁ·Î±×·¥Àº ÀÌ·¯ÇÑ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾ÊÀ» »ý°¢ÀÔ´Ï´Ù. ¹°·Ð ±¸Á¶Ã¼¿Í ÇÔ¼öÆ÷ÀÎÅ͸¦ »ç¿ëÇØ¼ ºñ½ÁÇÏ°Ô ±¸ÇöÇÒ ¼ö´Â ÀÖ°ÚÁö¸¸, ¿ÀÈ÷·Á ¸®ÆåÅ丵 ÀÔÀå¿¡¼ ³ª»Ü ¼öµµ ÀÖ°Ú±¸¿ä. Cµç C++¿¡¼µç °´Ã¼È¸¦ ÅëÇÑ Àº´ÐÀº ´ÙÀ½ ±âȸ¿¡ ´Ù·çµµ·Ï ÇϰڽÀ´Ï´Ù.
¿©±â¿¡¼ ÆÄÀϰü·Ã ÀÛ¾÷Àº ¼öÁ¤ÇÏÁö ¾Ê°í, ÀоîµéÀÎ ¹®¼¿¡¼ HTMLÀ» Á¦°ÅÇÏ´Â ºÎºÐ¸¸ ¸ðµâÈ Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
´ÙÀ½Àº ¸¸µé¾îÁø ÇÔ¼öÀÔ´Ï´Ù. int lt_flag = 0; char *html_trim(char *src, char *dst, int size) { int ridx = 0; int widx = 0; while(ridx < size) { if (src[ridx] == TAG_LT) { lt_flag++; } if (src[ridx] == TAG_GT) { lt_flag--; if (lt_flag == 0) { ridx++; continue; } } if (lt_flag == 1) { ridx++; continue; } if(src[ridx] == '&') { int i = 0; char specia[10] = {0x00,}; for (i = 0; i < 10; i++) { if (src[ridx+i] == ';') { ridx= (ridx+i); break; } } } if (src[ridx] == '\n' || src[ridx] =='\r') { dst[widx] = ' '; } else { dst[widx] = src[ridx]; } widx++; ridx++; } return dst; }
ÀÌÁ¦ main() ÇÔ¼ö´Â ¾Æ·¡¿Í °°ÀÌ ´Ü¼øÇØÁ³½À´Ï´Ù.
int main(int argc, char **argv) { int fd; int readn; int ridx; int widx; char rbuf[MAX_BUF_SIZE] = {0x00,}; char wbuf[MAX_BUF_SIZE] = {0x00,}; int lt_flag = 0; int test_argv=0; int c; char *src_file; // used tokenizing char seps[] = "()|{}, \t.;&-[]\"\':`+#="; char *tr; int tag_status = 0; int offset = 0; while((c = getopt(argc, argv, "hf:")) != -1) { switch(c) { case 'h': break; case 'f': src_file = optarg; test_argv = 1; break; default: break; } } if (!test_argv) { help(); return 1; } if ((fd = open(src_file, O_RDONLY)) < 0) { return 1; } while ((readn = read(fd, rbuf+offset, MAX_BUF_SIZE)) > 0) { html_trim(rbuf, wbuf, readn); tr = strtok(wbuf, seps); while (tr != NULL) { printf("%s ", tr); tr = strtok(NULL, seps); } memset(rbuf, 0x00, MAX_BUF_SIZE); memset(wbuf, 0x00, MAX_BUF_SIZE); } return 0; } make¸¦ ÅëÇÑ ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏ
ÀÌ·¸°Ô ¸ðµâÀ» ºÐÇÒ½ÃÄÑ ³õÀ¸¸é, °¢°¢ÀÇ ¸ðµâÀ» Æ÷ÇÔÇÏ´Â ¼Ò½ºÆÄÀÏÀ» µû·Î ¸¸µé¾î¼ °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·² °æ¿ì ¼öÁ¤µÈ ºÎºÐ¸¸ ÄÄÆÄÀÏÀÌ µÇ±â ¶§¹®¿¡, ÄÄÆÄÀÏ ½Ã°£À» ÁÙÀÏ ¼ö ÀÖ´Ù´Â ÀÕÁ¡À» ¾òÀ» ¼öµµÀÖ½À´Ï´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº make °ü·Ã¹®¼¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|