¸®ÆÑÅ丵 - ¸ðµâÈ­
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



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°³ÀÇ ´ÜÀ§·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.
  • ÀÎÀÚó¸® : ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀÎÀÚ¸¦ ºÐ¼®Çϰí ó¸®ÇÏ´Â ºÎºÐ
  • ÆÄÀÏÀбâ : ó¸®ÇÏ´Â ÆÄÀÏÀ» Àд ºÎºÐ
  • HTML ű×Á¦°Å : ÀÔ·ÂµÈ ¹®ÀÚ¿­¿¡¼­ HTML ű׸¦ Á¦°ÅÇÏ´Â ºÎºÐ
  • Ãâ·ÂºÎºÐ : HTMLű׸¦ Á¦°ÅÇϰí tokenizingµÈ ¹®ÀÚ¿­ µ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ´Ù.

ÀÎÀÚó¸® ¸ðµâ

»ç¿ëÀÚÀÇ ÀÎÀÚ¸¦ °Ë»çÇØ¼­ ÇÊ¿äÇÑ ¾×¼ÇÀ» ÃëÇÕ´Ï´Ù. µ¶¸³µÈ ÇÁ·Î¼¼½º¶ó°í º¼ ¼ö ÀÖ°ÚÁö¸¸ 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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.