파일에서 다음 값을 찾을 좋은 방법이 뭐가 있을까요?
본문
파일내용은 (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" 이거였던걸로 기억하는데
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];
!-->