-2
如何在逐字符读取时区分PHP中的空行和行间距。总之,我想知道如何在通过字符读取char时找到空行。如果有任何疑问,请留言告诉我。 谢谢......如何在PHP中使用字符char读取字符时是否为空
如何在逐字符读取时区分PHP中的空行和行间距。总之,我想知道如何在通过字符读取char时找到空行。如果有任何疑问,请留言告诉我。 谢谢......如何在PHP中使用字符char读取字符时是否为空
您可以在缓冲区中收集当前行的字符,然后在看到行结束时进行计数。
$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
并且将字符计数减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 ...我遇到的问题是,每一行最后都有一个\ n字符,无论它是\ r \ n还是单个\ n的形式。因此,寻找\ n而fgetc()是不够的。所以,因为在每一行中都有\ n我无法区分空行和行尾。你能遵循我的草稿吗?问候 – Otag
我刚刚发现我的解决方案也无法正常工作。所以我仍在等待答案。问候Otag – Otag
你好@Olaf Dietsche。我会检查并通过正确的答案标记告诉你。谢谢你... – Otag