2012-07-29 2 views
4

약 25,000 줄의 텍스트 파일이 있습니다. 약 525kb.시작 부분에서 특정 패턴의 줄을 제거하십시오.

일부 줄의 처음에는 임의의 텍스트가 있습니다. 일부에는 긴 문자열의 세미콜론이 있습니다.

일부 문자는 세 개의 세미콜론과 공백을 포함하고 선택적으로 같은 줄에 더 많은 텍스트를 포함 할 수 있습니다. 이것들은 제가 제거하고자하는 라인입니다. 여기

는 .... 등

;;; Updated Time 20120706122706 
    ;;; Generic DEveloper Output 

    ;;; Some Random Comments 
    ;;; I got some more... 
    ;;; Yet another uneeded line 
    ;;; Thanks for using StackOverflow <http://stackoverflow.com>, or... 
    ;;; Not. 

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Banana Production 

    [Data_Release_Version] 
    Version=12586 
    Released=20120706122706 

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baseline Properties 

    [BaseLineProperties] 
    Comment=BaselineProperties 

----- 및 샘플이다.

4 개 이상으로 된 첫 줄에 도착하면; 줄에 ";;;"줄이 없으므로 나머지 파일이 필요합니다.

";;;"과 일치하지 않는 경우 모든 행을 읽고 다시 쓰는 대신 빠른 것을 찾으려고합니다.

파일은 ASCII (가능하면 UTF-8) 텍스트 유형 파일입니다.

아이디어가 있으십니까?

시간과 도움과 지식에 감사드립니다.

+2

당신이 다시 원하는 것을 설명하는 시도 할 수 있습니다. 매우 명확하지 않습니다. 4 개 이상의 세미콜론이있는 행을 제거 하시겠습니까? –

+0

";;;"로 시작하는 줄을 제거하고 세미콜론이 3 개 이하이거나 줄이 아닌 줄을 제거하려고합니다.세미콜론이 4 줄 이상 연속으로 나오면 줄 제거를 중지 할 수 있습니다. 기본적으로 처음부터 임의의 수의 줄이있는 머리글을 제거하려고합니다. –

답변

0

난 당신이 대답을 직접 준 생각 :

루프 (동안)에 라인으로 입력 파일 라인을 읽는 스크립트를 확인합니다. 1. 두 개의 조건이 충족되면 모든 행을 출력 파일에 씁니다. 1. 플래그 ("done")가 FALSE이고 2. 행이 ";;;"(공백이 아닌)으로 시작하지 않습니다. 3 개의 세미콜론으로 시작하는 줄이 제거됩니다. 더 많은 세미콜론을 포함하는 줄을 찾으면 플래그를 TRUE로 설정합니다. 따라서 나머지 줄은 검사하지 않고 복사됩니다.

1

의존합니다. 줄 바꿈을 시도한 다음 줄 바꿈을 사용하여 explode()를 수행합니다. 배열에 있으므로 건너 뛰는 foreach를 실행하면 strpos == 0이됩니다. -AND- strpos ! == false, 일치하지 않으면 계속해서 다음 줄로 건너 뛸 수 있습니다.

또 다른 옵션은 구문 분석하고 건너 뛰거나 fseek 등을 사용하는 것입니다. 무엇이 가장 빠를 것인가를 결정하는 여러 가지 요인에 따라 다릅니다.

나중에 내파하고 다시 줄을 추가 한 다음 파일을 밀어 넣거나 줄 바꿈을 사용할 수 있습니다. 산출물이 어디로 향하는 지에 따라 달라집니다. 내가 제안 무엇

4

file_get_contents()를 사용하여 문자열로 변수에 파일의 내용을 저장 한 다음 foreach 루프에서 다음, 모든 줄 바꿈 문자에 explode() 해당 문자열을 사용하여 라인이 3 세미콜론으로 시작하는 경우 확인 preg_match()을 사용하는 것입니다 공백이 있다면 다른 배열 인 $output에 넣으십시오. foreach 후에 implode()$output을 입력하고 줄 바꿈 문자를 추가하고 file_put_contents()을 사용하여 다른 파일에 인쇄하십시오. 희망이 도움이

:-) 코드 :

<?php 
$string = file_get_contents($filename); 
$array = explode("\n",$string); 
foreach($array as $arr) { 
    if(!(preg_match("^;;;\s",$arr))) { 
     $output[] = $arr; 
    } 
} 

$out = implode("\n",$output); 
file_put_contents($path,$out); 
?> 
관련 문제