在 PHP 中按字符读取字符时如何知道该行是否为空
How to know if the line is empty while reading char by char in PHP
如何在逐字符阅读时区分 PHP 中的空行和行尾。简而言之,我想知道如何在逐字符读取时找到空行。让我知道是否有任何不清楚的评论。
谢谢...
您可以将当前行的字符收集到缓冲区中,然后在看到行尾时进行计数。
$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;
}
}
如果前一个字符是 \r
,$cr
为真。因此,如果您查看换行符并且 $cr
为真,则您有一个 CRLF
并将字符数减一。
作为替代方案,您可以在查看长度之前收集整行和 trim 空格
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";
}
}
如何在逐字符阅读时区分 PHP 中的空行和行尾。简而言之,我想知道如何在逐字符读取时找到空行。让我知道是否有任何不清楚的评论。 谢谢...
您可以将当前行的字符收集到缓冲区中,然后在看到行尾时进行计数。
$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;
}
}
如果前一个字符是 \r
,$cr
为真。因此,如果您查看换行符并且 $cr
为真,则您有一个 CRLF
并将字符数减一。
作为替代方案,您可以在查看长度之前收集整行和 trim 空格
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";
}
}