Что нового

Баг Обнаружено два бага функции _FileCountLines

Oki

Продвинутый
Сообщения
452
Репутация
62
Обнаружены два бага в функции _FileCountLines. Долго не удавалось понять, где есть баг в скрипте, а оказалось, что они в функции. Эти баги можно объявить фичами, но в таком случае следует переписать описание функций, включая и описание в англоязычном сообществе.

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

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

2. После отработки функции указатель текущей позиции оказывается в конце файла, а не там, где его оставили (и не в начале файла, если из него ещё ничего не читалось в явном виде.

Природа этих багов понятна. Когда они известны, очевидна реализация, к ним приводящая. Поэтому вряд ли что-то надо чинить, кроме справки на различных языках.

Off topic. По непонятным причинам форум отказался признавать во мне ранее зарегистрированного и писавшего, а повторная регистрация того же никнейма была воспринята в качестве первой регистрации. Я не ошибаюсь: у меня сохранился скриншот первой регистрации. Тоже баг, но не языка, а форума сообщества. :smile:
Сообщение автоматически объединено:

Если кому-то всё-таки очень нужна реализация задекларированной в описании функции, то это легко сделать доступными средствами.
Код:
Local $sFile, $hFile, $iPos

$sFile = @ScriptDir & "test.txt"
$hFile = FileOpen($sFile)

; Здесь можно предварительно работать с файлом.

$iPos =FileGetPos($hFile)
FileSetPos($hFile, 0, 0)
$CountLines = _FileCountLines($hFile)
FileSetPos($hFile, $iPos, 0)

; Здесь можно продолжить работу с файлом с того же места, где он был оставлен.
Пожалуй, этот код тоже не мешало бы добавить к описанию функции с пояснением назначения.
Сообщение автоматически объединено:

Ровно неделю "ожидает одобрения перед размещением". Это такая борьба со спамерами?
 
Последнее редактирование:
Верх