如何逐字逐句地区分PHP中的空行和内行。总之,我想知道如何在通过char读取char时找到空行。如果有任何评论不清楚,请告诉我。 谢谢......
答案 0 :(得分: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;
}
}
正如您所看到的,两个版本都相似,只取决于您之后是否需要该行。
要考虑\r
,您可以在\n
之前看到一个时进行补偿,例如
$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
,则 \r
为真。因此,如果您查看换行符并且$cr
为真,则您有一个CRLF
并将字符数减一。
作为替代方案,您可以在查看长度
之前收集整行并修剪空白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";
}
}