2011-02-11 2 views
1

나는이 같은 텍스트 파일을 읽기 위해 노력하고있어 문제가있어 :PHP에서 파일 구문 분석하기. 개행을 어떻게 탐지합니까?

Joe 
Johnson 

Linus 
Tourvalds 

및 PHP는 그것을 구문 분석하는 동안, 나는 줄 바꿈을 감지 할 수 있어야합니다. 정확하게 $ newline을 정의하려고합니다. 나는 $ file 변수에서 줄의 배열을 반복하고있다.

while($line = next($file)) 
    if($line = $newline) 
     echo "new line"; 

문제는 내가 개행 문자와 일치하지 않는 것 같습니다. 나는 그것이 $ file 배열에 실제로 나타나고 있다는 것을 알고있다 :

while($line = next($file)) 
    echo $line; 

은 줄 바꿈과 모두를 사용하여 파일을 축 어적으로 출력한다. 나는 이미 "\ n", ""시도했는데 다음에 무엇을 시도해야할지 모르겠습니다. 작은 도움?

+1

"나는 라인의 배열을 통해 반복하고있어"

이 문제는 다음과 같은 솔루션에 의해 해결된다? –

+0

정확합니다. 어떻게 처음에'$ file' 배열을 얻었습니까? 그리고 왜 표준'foreach' /'for' 대신'next()'를 사용하고 있습니까? (이유가 있지만 너무 많지는 않음) ... – ircmaxell

+0

next()를 사용할 때 조심해서 요소를 반환하기 전에 포인터를 앞으로 내 보냅니다. (당신은 "조"를 그리워 할거야). – jpwco

답변

1
$file = file("path/to/file.txt"); 

// Incase you need to call it multiple times ... 
function isNewLine($line) { 
    return !strlen(trim($line)); 
} 

foreach ($file as $line) { 
    if (isNewLine($line)) { 
     echo "new line<br/>"; 
    } 
} 
0

어쩌면 이런 식으로 뭔가를 할 수 있을까요?

while($line = next($file)) { 
    if(in_array($line, array("\r", "\n", "\r\n"))) { 
     echo "new line"; 
    } 
} 
0

나는이 솔루션이 사람들에게 도움이 될 것이라고 생각합니다. Mac 또는 Windows에서 생성 된 csv를 구문 분석하는 경우에 작동합니다. Mac에서 만든 멀티 라인으로 csv를 읽는 것은 문제가됩니다. 즉, 루프의 각 행을 읽을 수는 없지만 모든 csv 데이터는 단일 행으로 읽습니다. 분할 이미 ​​파일의 라인을 가지고 그래서

//My CSV contains only one column 
$fileHandle = fopen("test.csv",'r'); 
$codesArray = array(); 
count = 0; 
while (!feof($fileHandle)) { 
$line = fgetcsv($fileHandle); 
if($line[0]!="") { 
    $data = str_replace("'", "", (nl2br ($line[0]))); 
    $dataArray = explode('<br />' ,$data); 
    foreach($dataArray as $data) { 
     $codesArray[] = trim($data); 
    } 
} 
} 
echo "<pre>"; 
print_r($codesArray); 
관련 문제