잡담소장소

정규식을 이용한 검색 및 파일 쓰기 in PHP 본문

Study ;3

정규식을 이용한 검색 및 파일 쓰기 in PHP

알 수 없는 사용자 2010. 9. 3. 14:04


 


드디어 정규식을 이용한 파일 검색 및 쓰기를 완성하였다 ;-;ㅋ
C#, C++만 배울때가지만해도 PHP나 ASP는 그닥 좋은 언아가 아니라고 생각했는데
PHP는 알면 알 수록 완전 편한 언어라는걸 알게되었다..'-'d
재밌다 :) 히히





/**
   * @file: SearchTRC.nwz
   * @brief: DB로그파일에서 TRC찾기 :)
   * @author: popo1211@neowiz.com
   * @version: $Revision:
   * @date: $Date:
   **/


  require "nwz.nwz";
  $fname = "dbwolf";

  $fo = fopen($fname.".txt", "r");        //dbwolf파일을 읽어옴
  $login_fi = fopen($fname."_LOGIN_TRC.txt", "w"); //LOGIN_TRC를 분석, 정리한 파일
  $passwd_fi = fopen($fname."_PASSWD_TRC.txt", "w"); //PASSWD_TRC를 분석, 정리한 파일

  fwrite($login_fi, "MSRL\t\tNUM_IP\t\tRAW_MAC\t\tGW_MAC\t\tMAC2\r\n");
  fwrite($passwd_fi, "MSRL\t\tNUM_IP\t\tMAC2\r\n");

  $arrLogin = array();
  $arrPasswd = array();
  while($readline = fgets($fo))
  {

    //읽은 단어가 LOGIN_TRC라면.. / /사이에 패턴을 넣는다. 매치하는 단어를 찾음
    if(preg_match("/LOGIN_TRC/", $readline))
    {
      $out = getLoginData($readline);
      cntData(&$arrLogin, $out);
      setData($login_fi, $out, "login");
    }

    //읽은 단어가 PASSWD_TRC라면..
    if(preg_match("/PASSWD_TRC/", $readline))
    {
      $out = getPasswdData($readline);
      cntData(&$arrPasswd, $out);
      setData($passwd_fi, $out, "passwd");
    }
  }
  fclose($fo);
  fclose($login_fi);
  fclose($passwd_fi);

  $login_fi = fopen($fname."_LOGIN_TRC_STAT.txt", "w");
  $passwd_fi = fopen($fname."_PASSWD_TRC_STAT.txt", "w");

  fwrite($login_fi, "[LOGIN_TRC_STAT] \r\n");
  fwrite($passwd_fi, "[PASSWD_TRC_STAT] \r\n");

  //DESC sort 및 파일 쓰기 - 자동으로 sorting해주는 함수가 있다 :) 우왕굳 :)
  arsort($arrLogin["MSRL"]); //asort(ASC), arsort(DESC)
  arsort($arrLogin["NUM_IP"]);
  arsort($arrLogin["RAW_MAC"]);
  arsort($arrLogin["GW_MAC"]);
  arsort($arrLogin["MAC2"]);
  setArrData($login_fi, $arrLogin);
  arsort($arrPasswd["MSRL"]);
  arsort($arrPasswd["NUM_IP"]);
  arsort($arrPasswd["MAC2"]);
  setArrData($passwd_fi, $arrPasswd);

  //파일 닫기
  fclose($login_fi);
  fclose($passwd_fi);

  //LOGIN_TRC에서 IP, MAC, MSRL 등 정보를 추출하여 반환
  function /* array */ getLoginData($str)
  {
    preg_match_all("/\(.*?\)[^,]/", $str, $arrMatch); //string에서 insert부분만 추출 
/*괄호안에 있는 모든 단어를 가져온다 하지만 콤마는 제외, ?가 들어감으로써 게으른 *를 수행한다. 괄호의 쌍이 2개인 문장일 때 하나로 가져오는게 아니라 나누어 가져오는 것을 게으른이라 표현..하더라 ;^)*/
    preg_match_all("/(\'(.*?)\')/", $arrMatch[0][1], $arrMatchValue); //작은 따옴표을 제외한 insert되는 값만 추출. 하위표현식에 따라 배열에 달리 저장된다.
    return $arrMatchValue[2]; //하위 표현식정의에 따른 값만 반환
  }
  //PASSWD_TRC에서 IP, MAC, MSRL 정보를 추출하여 반환
  function /* array */ getPasswdData($str)
  {
    preg_match_all("/\(.*?\)[^,]/", $str, $arrMatch);
    preg_match_all("/\'(.*?)\'/", $arrMatch[0][1], $arrMatchValue);
    return $arrMatchValue[1];
  }

  function cntData(&$arrRet, $arrMatch)
  {
    //다른 정보와의 연관없이 데이터들을 카운팅함
    if(count($arrMatch) > 8 )
    {
      /* 여기서 또 편한 PHP, 키값이 숫자뿐만아니라 string도 된다는 것 :) 그리고 초기화하지 않아도 알아서 셋팅된다. int 인지 string인지 'ㅅ'd */
      $arrRet["MSRL"][$arrMatch[0]] ++; 
      $arrRet["NUM_IP"][$arrMatch[4]] ++;
      $arrRet["RAW_MAC"][$arrMatch[5]] ++;
      $arrRet["GW_MAC"][$arrMatch[8]] ++;
      $arrRet["MAC2"][$arrMatch[9]] ++;
    }
    else
    {
      $arrRet["MSRL"][$arrMatch[1]] ++;
      $arrRet["NUM_IP"][$arrMatch[4]] ++;
      $arrRet["MAC2"][$arrMatch[5]] ++;
    }
  }

  function setData(&$fw, $arrMatchValue, $type)
  {
    if($type == "login")
      $str = "{$arrMatchValue[0]}\t\t{$arrMatchValue[4]}\t\t{$arrMatchValue[5]}\t\t{$arrMatchValue[8]}\t\t{$arrMatchValue[9]}\r\n";
    else
      $str = "{$arrMatchValue[1]}\t\t{$arrMatchValue[4]}\t\t{$arrMatchValue[5]}\r\n";

    fwrite($fw, $str);
  }

  function setArrData(&$fw, $arrData)
  {
    foreach($arrData as $index=>$value)
    {
      fwrite($fw, "===========$index========== \r\n");
      $cnt = 0;
      foreach($value as $k=>$v)
      {
        fwrite($fw, "$cnt: $k : $v \r\n");
        $cnt++;
        if($cnt > 9) //10위까지만 보여주긔~
          break;
      }
    }
  }
?>

 

반응형

'Study ;3' 카테고리의 다른 글

효과적인 보고서 쓰기  (0) 2010.10.28
jQuery를 이용한 visibility  (1) 2010.10.06
jQuery를 이용한 테이블의 같은 값 찾기 - in PHP  (0) 2010.10.05
Encrypt & Decrypt in PHP  (0) 2010.09.17
RegEx in PHP  (0) 2010.08.30
Comments