fgetc — как узнать, пуста ли строка при чтении char в char в Stack Overflow

Как различить пустую строку и endofline в PHP при чтении символ за символом. Короче говоря, я хочу знать, как найти пустую строку, читая char за char. Дайте мне знать, если что-то неясно с комментарием.
Спасибо…

-2

Решение

Вы можете либо собрать символы текущей строки в буфер, а затем посчитать, когда увидите конец строки.

$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";
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]