2011-07-26 2 views
0

관련된 날짜가 포함 된 연도가 포함 된 텍스트 파일이 있습니다. 저는 2009 년부터 파일 작업을하고 있지만 2011 파일에서 구조는 동일하며 2012 파일에 있습니다.관련 검색 정보가 표시된 PHP .txt 파일 검색

1 070109 
MON JUN 29........ THU JUL 09 
TUE JUN 30........ MON JUL 13 
WED JUL 01........ MON JUL 13 
THU JUL 02........ TUE JUL 14 
FRI JUL 03........ TUE JUL 14 
     CIVIL TRAFFIC 
MON JUN 29........ WED JUL 29 
TUE JUN 30........ THU JUL 30 
WED JUL 01........ FRI JUL 31 
THU JUL 02........ MON AUG 03 
FRI JUL 03........ MON AUG 03 

1 070209 
TUE JUN 30........ MON JUL 13 
WED JUL 01........ MON JUL 13 
THU JUL 02........ TUE JUL 14 
FRI JUL 03........ TUE JUL 14 
SAT JUL 04........ WED JUL 15 
     CIVIL TRAFFIC 
TUE JUN 30........ THU JUL 30 
WED JUL 01........ FRI JUL 31 
THU JUL 02........ MON AUG 03 
FRI JUL 03........ MON AUG 03 
SAT JUL 04........ TUE AUG 04 

내가 무엇을 할 수 있어야하는 각 제목 날짜 아래에 나열된 관련 날짜를 검색 할 수 있습니다 : 당신은 각 날짜 섹션 1로 시작하고 MMDDYY 형식으로 날짜 다음에 공간에서 볼 수 있듯이. 사용자가 070109의 날짜를 원한다면 "오늘의 법원 날짜"버튼을 선택할 수 있습니다. 법원 날짜가 다른 날짜가 필요할 경우 원하는 날짜를 입력하면 텍스트 파일에 "1 $ 날짜"가 검색되고 관련 정보가 검색되어 표시됩니다. 내 문제가있다 ...

나는 파일을 읽을 수 있었고 전체 파일을 디플레이 할 수 있었지만 "1 070109"를 찾고 다음 12 줄의 정보 만 표시하는 방법을 찾지 못했다.

+0

SQL 데이터베이스가 작업하기 쉬울 수 있습니다 나타내며,이 개 기록 또는 5 개 기록을 건너 뛸 수 있습니다. o.o – Tanoro

+0

데이터베이스에 감사드립니다. – Jacob

+0

예제를 기반으로 이중 개행을 기반으로 검색 할 수있는 것처럼 보입니다. 그게 효과가 있니? –

답변

0

각 날짜마다 12 개의 항목이 있다고 확신하는 경우 간단한 루프를 사용하여 12 회의 fgets 및 array_push를 수행 할 수 있다고 생각합니다. 결과적으로 12 개의 문자열 배열을 갖게됩니다.

+0

그리고 그 전에 fgets를 사용하여 목표 날짜를 얻습니다. 물론 데이터베이스만큼 효율적이지는 않습니다. – Jeremy

+0

예, 각 날짜에 12 개의 항목이 있습니다. –

0

텍스트 파일을 사용하려면 먼저 fopen()을 수행 한 다음 fseek()를 사용하여 필요한 곳에 파일 포인터를 배치해야합니다. 즉 모든 행이 동일하면 모든 행 (FRI JUL 03 ........ MON AUG 03과 같이)은 30 바이트입니다. 또한 줄의 각 집합 ("070109")에 대한 "머리글"은 8 바이트 길이라는 것을 알고 있습니다.

첫 번째 헤더를 건너 뛰려면 fseek ($ file, 8) + eol (CR 또는 CRLF를 사용하는 경우 1 또는 2 바이트 이상)이 필요합니다. crlf (1 바이트) 대신 cr을 사용한다고 가정 해 봅시다. 그것은 헤더를 9 바이트 길이로 만듭니다. 당신이 1 헤더와 12 행의 "기록"을 가지고 알고있는 경우

, 당신은 건너 뛸 수 있습니다 : 헤더 + EOL의

  • 9 바이트를
  • 30 * 12 + 30 (12 선 각 라인에 대한 EOL)는 등

을 .. +

당신이 그 날짜에 대한 올바른 정보를 것을 가정 볼 수있는 곳 날짜에 도착 원하는만큼 기록을 건너 뛸 수 있습니다 . 그냥 머리글 + 라인 + eol의 fseek 기능을 당신이 원하는 지점까지.

그래서 당신은 각 레코드는 날짜