파일에서 다음 값을 찾을 좋은 방법이 뭐가 있을까요?

파일에서 다음 값을 찾을 좋은 방법이 뭐가 있을까요?

QA

파일에서 다음 값을 찾을 좋은 방법이 뭐가 있을까요?

본문

파일내용은 (a.txt)

---------------------------------------------------

1

사용내역 : xxx

시간 - yyy

 

2

사용내역 : yyy

시간 - xxx

 

3

사용내역 : zzz

시간 - kkk

장소 - ddd

---------------------------------------------------

이런 형식입니다.

장소 항목이 들어가기도 하고 들어가지 않기도 하는 랜덤입니다.

제가 추출하고 싶은 항목은 "3" 입니다.

 

저 내용이 10개일 수도 있고(이땐 10) 2개 일 수도 있고(이땐 2) 100개 일 수도 있고(이땐 100) 너무 들쭉날쭉입니다.

즉 맨 마지막 항목의 숫자를 추출하고 싶은데......

count함수를 이용해보려 했으나 이것도 정형화 된부분이 아니라 애매하고

좋은 아이디어가 있을까요?

이 질문에 댓글 쓰기 :

답변 4

운영체제가 리눅스이고 shell_exec 명령이 사용 가능하다면..


$filepath = "파일경로";
$n = 4;
$lastlines = explode("\n", trim(shell_exec("tail -{$n} {$filepath}")));
$found = $lastlines[0];

이렇게 하시면 되고.. shell_exec 명령 사용이 안되고 파일 크기가 별로 크지 않고 메모리 여유가 있다면


$filepath = "파일경로";
$n = 4;
$data = file($filepath);
$lastlines = array_slice($data, count($data)-$n, $n); 
$found = $lastlines[0];

이렇게 하시면 될듯요

헐 n값을 3으로 하니까 바로 되는데  array_slice <-- 요걸로 했습니다.
파일의 숫자(1, 2, 3...) 밑의 항목이 어떤건 5줄, 어떤걸 2줄 어떤건 6줄 이렇게 비형식적인데
상관 없을까요?

보니까 마지막 항목의 라인을 좀 감안해야 하나 보네요....
이게 3줄일때도 있고 4줄일때도 있고 그 이상일때도 있어서...
좋은 아이디어 감사합니다.

상관있죠;;; 문제를 잘못 봤었네요..


$filepath = "파일경로";
$data = file($filepath);
$n_data = count($data);
$found = false;
for($i=$n_data-1; $i>=0; $i--) {
    if(is_numeric($data[$i])) {
        $found = $data[$i];
        break;
    }
}
if($found !== false) {
   // 값 발견했음
}

제일 마지막 라인부터 거꾸로 오면서 숫자값만 있는건지 체크하면 되겠네요

내용 갯수 별로 구분부터 하는게 맞을거 같아요.

 

예를 들면 한줄씩 읽을 수 있을거고

다음줄이 "\n" 이거였던걸로 기억하는데

 

1. row씩 읽기

2. 읽은 row에서 \n만 있는 마지막 row찾기

3. 마지막 row를 찾았으면 마지막 row의 다음 row를 읽기

4. 마지막 row를 못 찾았으면 가장 첫 row의 값 읽기

굳이 저 파일형식을 유지하실이유가 무엇일까요?

 

파일형식을 .csv / .xls / .json 과 같은 정형적인 포멧으로 변환을 먼저 하는게 우선일것같네요

 

.txt의 비정형파일을 읽어서 강제로 설정하는 에너지보다 정형화된 패턴을 만들어서 진행하시는게 빠를것같습니다.


간단하게 다음처럼 할 수 있겠네요
$data = file("a.txt");
$nn = count($data)-4;
if( is_numeric($data[$nn]) $num =$data[$nn];
else if( is_numeric($data[$nn+1]) $num =$data[$nn+1];

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 18
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT