문자를 읽는 동안 PHP에서 공백 행과 endofline을 구별하려면 어떻게합니까? 즉, char로 char을 읽는 동안 빈 줄을 찾는 방법을 알고 싶다. 의견이 명확하지 않은 부분이 있으면 알려주십시오. 감사합니다 ...PHP에서 char로 char을 읽는 중에 행이 비어 있는지 확인하는 방법
-2
A
답변
1
버퍼의 현재 줄 문자를 수집 한 다음 줄 끝이 보일 때 셀 수 있습니다. 당신이 볼 수 있듯이
$buffer = '';
while (($char = fgetc($fp)) !== false) {
if ($char != '\n') {
$buffer .= $char;
} else {
if (strlen($buffer) == 0) {
echo "Empty line\n";
} else {
echo "Non-empty line\n";
}
$buffer = '';
}
}
또는 당신이 읽는 동안 당신이 라인의 끝을 볼 때까지, 문자의 수를 유지
$count = 0;
while (($char = fgetc($fp)) !== false) {
if ($char != '\n') {
++$count;
} else {
if ($count == 0) {
echo "Empty line\n";
} else {
echo "Non-empty line\n";
}
$count = 0;
}
}
, 두 버전이 유사, 그것은 단지 당신이 필요 여부에 따라 달라집니다 이후에 라인.
당신이 즉시 \n
, 예를 들어, 전에 하나를 볼 때 \r
을 고려하려면 보상 할 수 이전 문자가 \r
인 경우
$cr = false;
$count = 0;
while (($char = fgetc($fp)) !== false) {
if ($char != '\n') {
$cr = false;
++$count;
if ($char == "\r")
$cr = true;
} else {
if ($cr)
--$count;
if ($count == 0) {
echo "Empty line\n";
} else {
echo "Non-empty line\n";
}
$count = 0;
}
}
$cr
는 사실이다. 따라서 개행 문자를보고 $cr
이 참이면 CRLF
이고 문자 수가 1 씩 감소합니다.
대안으로 전체 라인을 수집 할 수 있습니다 및
요청하지 비록if (strlen(trim($buffer)) == 0) {
echo "Empty line\n";
} else {
echo "Non-empty line\n";
}
, 전체 라인과 검사를 읽는 것은, 예를 들어,보다 효율적으로 할 수있는 길이보기 전에 공백을 잘라
while (($buffer = fgets($fp)) !== false) {
if (strlen(rtrim($buffer, "\n")) == 0) {
echo "Empty line\n";
} else {
echo "Non-empty line\n";
}
}
안녕하세요, 당신에게 @Olaf DIETSCHE 감사 ... 나는 발생한 문제는 모든 라인 그것이 \ r에 \ n 또는 하나의 \ n의 형태이든 끝에 \ n 개의 문자를 가지고 있다는 것입니다. 따라서 fgetc()가 충분하지 않을 때 \ n을 검색합니다. 그래서 각 줄에는 \ n이 있습니다. 빈 줄과 줄 끝을 구별 할 수 없습니다. 내 초안을 따라갈 수 있습니까? 감사합니다 – Otag
방금 내 솔루션도 작동하지 않는다는 것을 알았습니다. 그래서 나는 아직도 대답을 기다리고있다. 감사합니다 Otag – Otag
안녕하세요 @Olaf Dietsche. 확인하고 정답 마크를 알려 드리겠습니다. 고맙습니다 ... – Otag