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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
파일에서 다음 값을 찾을 좋은 방법이 뭐가 있을까요?

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];

 

 

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

회원로그인

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