묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
[질문]파일의 내용을 배열로해서 필요한 부분만 추출?
2002.12.12 14:43
아시는분은 아시겠지만 프리베틀넷을 돌리게되면 서버에 로그파일이 쌓이게 됩니다.
이 유저들의 개개의 파일에서 승과 패 그리고 아이디를 뽑으려고 합니다.
하지만 제가 php실력이 너무나 짧은관계로 며칠동안 찾아헤매며 이것 저것 짜집기해서 기본적인 틀을 만들었는데
문제가 있습니다.
우선 아래의 파일내용과 소스내용을 보면서 설명드리겠습니다.
우선 human이라는 확장자가 없는 파일의 내용입니다.
"Record\SEXP\0\last game"="29528437 1463065648"
"Record\SEXP\0\last game result"="WIN"
"Record\SEXP\0\losses"="6"
"BNET\acct\lastlogin_owner"="human"
"BNET\acct\lastlogin_clientver"="1.0.9.3"
"BNET\acct\lastlogin_clienttag"="SEXP"
"BNET\acct\lastlogin_clientexe"="starcraft.exe 02/21/02 20:54:04 1083392"
"BNET\acct\lastlogin_connection"="3530344847"
"BNET\acct\lastlogin_time"="1037888578"
"BNET\acct\firstlogin_owner"="RAZOR 1911"
"BNET\acct\firstlogin_clientver"="1.0.9.3"
"BNET\acct\firstlogin_clienttag"="SEXP"
"BNET\acct\firstlogin_clientexe"="StarCraft.exe 02/21/02 20:54:04 1083392"
"BNET\acct\firstlogin_connection"="3546871157"
"BNET\acct\firstlogin_time"="1037156064"
"BNET\acct\passhash1"="1b8f7a74da6f8f77a61af48cb1e7ec07b979572a"
"BNET\acct\userid"="3"
"BNET\acct\username"="human"
"Record\SEXP\0\wins"="11"
"Record\SEXP\0\draws"="2"
정확이 따옴표도 빠뜨리지 않고 보시는 그대로입니다.
제가 필요한것은 username의 뒷부분과 losses의 뒷부분 그리고 wins의 뒷부분입니다.
그래서 여기저기서 주워들은 이야기들로 아래와 같은 간단한 기본적인 틀을 만들었습니다.
-------------------------------------------------------------
$file = file("var/test/human");
while($data = each($file)) {
$data_1 = stripslashes($data[1]); //슬러시 짜르고
$data_2 = stripslashes($data_1); //슬러시 한번더 짜르고
$data_3 = nl2br($data_2); //줄바꿈하고
$data_4 = str_replace(" ", "+", $data_3); //공백을 +로 채우고
preg_match("/^("RecordSEXP[^[:space:]]losses"=")?([^"]+)"/", $data_4, $matches);
preg_match("/^("RecordSEXP[^[:space:]]+wins"=")?([^"]+)"/", $data_4, $matches_1);
preg_match("/^("RecordSEXP[^[:space:]]+disconnects"=")?([^"]+)"/", $data_4, $matches_2);
preg_match("/^("BNETacctusername"=")?([^"]+)"/", $data_4, $matches_3);
echo "losses : $matches[2]";
echo "win : $matches_1[2]";
echo "discon : $matches_2[2]";
echo "userid : $matches_3[2]" ;
}
----------------------------------------------------------------------------
제가 너무 모르는관계로 무식한 방법인지는 모르겠습니다.
이렇게 해서 출력물을 보면 아래와 같이 파일내용의 줄 수만큼 반복이 됩니다.
losses : win : discon : userid : losses : win : discon : userid : losses : 6win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : humanlosses : win : 11discon : userid : losses : win : discon : userid :
제가 원하는 출력물은
userid : human
losses : 6
win : 11
disscon :
이렇습니다.
제가 작성한것 가지고는 파일내용의 줄 수만큼 반복이 되어버리네요
어떻게 하면 될지 답변좀 부탁드립니다.
기왕이면 위와 같은 파일이 많이 있으면 한꺼번에 처리할 방법도 알려주시면 감사하겠습니다.
이 유저들의 개개의 파일에서 승과 패 그리고 아이디를 뽑으려고 합니다.
하지만 제가 php실력이 너무나 짧은관계로 며칠동안 찾아헤매며 이것 저것 짜집기해서 기본적인 틀을 만들었는데
문제가 있습니다.
우선 아래의 파일내용과 소스내용을 보면서 설명드리겠습니다.
우선 human이라는 확장자가 없는 파일의 내용입니다.
"Record\SEXP\0\last game"="29528437 1463065648"
"Record\SEXP\0\last game result"="WIN"
"Record\SEXP\0\losses"="6"
"BNET\acct\lastlogin_owner"="human"
"BNET\acct\lastlogin_clientver"="1.0.9.3"
"BNET\acct\lastlogin_clienttag"="SEXP"
"BNET\acct\lastlogin_clientexe"="starcraft.exe 02/21/02 20:54:04 1083392"
"BNET\acct\lastlogin_connection"="3530344847"
"BNET\acct\lastlogin_time"="1037888578"
"BNET\acct\firstlogin_owner"="RAZOR 1911"
"BNET\acct\firstlogin_clientver"="1.0.9.3"
"BNET\acct\firstlogin_clienttag"="SEXP"
"BNET\acct\firstlogin_clientexe"="StarCraft.exe 02/21/02 20:54:04 1083392"
"BNET\acct\firstlogin_connection"="3546871157"
"BNET\acct\firstlogin_time"="1037156064"
"BNET\acct\passhash1"="1b8f7a74da6f8f77a61af48cb1e7ec07b979572a"
"BNET\acct\userid"="3"
"BNET\acct\username"="human"
"Record\SEXP\0\wins"="11"
"Record\SEXP\0\draws"="2"
정확이 따옴표도 빠뜨리지 않고 보시는 그대로입니다.
제가 필요한것은 username의 뒷부분과 losses의 뒷부분 그리고 wins의 뒷부분입니다.
그래서 여기저기서 주워들은 이야기들로 아래와 같은 간단한 기본적인 틀을 만들었습니다.
-------------------------------------------------------------
$file = file("var/test/human");
while($data = each($file)) {
$data_1 = stripslashes($data[1]); //슬러시 짜르고
$data_2 = stripslashes($data_1); //슬러시 한번더 짜르고
$data_3 = nl2br($data_2); //줄바꿈하고
$data_4 = str_replace(" ", "+", $data_3); //공백을 +로 채우고
preg_match("/^("RecordSEXP[^[:space:]]losses"=")?([^"]+)"/", $data_4, $matches);
preg_match("/^("RecordSEXP[^[:space:]]+wins"=")?([^"]+)"/", $data_4, $matches_1);
preg_match("/^("RecordSEXP[^[:space:]]+disconnects"=")?([^"]+)"/", $data_4, $matches_2);
preg_match("/^("BNETacctusername"=")?([^"]+)"/", $data_4, $matches_3);
echo "losses : $matches[2]";
echo "win : $matches_1[2]";
echo "discon : $matches_2[2]";
echo "userid : $matches_3[2]" ;
}
----------------------------------------------------------------------------
제가 너무 모르는관계로 무식한 방법인지는 모르겠습니다.
이렇게 해서 출력물을 보면 아래와 같이 파일내용의 줄 수만큼 반복이 됩니다.
losses : win : discon : userid : losses : win : discon : userid : losses : 6win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : losses : win : discon : userid : humanlosses : win : 11discon : userid : losses : win : discon : userid :
제가 원하는 출력물은
userid : human
losses : 6
win : 11
disscon :
이렇습니다.
제가 작성한것 가지고는 파일내용의 줄 수만큼 반복이 되어버리네요
어떻게 하면 될지 답변좀 부탁드립니다.
기왕이면 위와 같은 파일이 많이 있으면 한꺼번에 처리할 방법도 알려주시면 감사하겠습니다.