Guest User

Untitled

a guest
Nov 20th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. function getWord() //Возврашает слово из словаря
  2. {
  3. $FILENAME = "slovar.txt"; //Имя файла
  4. $LINE_DELIMITER = "n"; //Разделитель строк в файле
  5. $MAX_LINE_LEN = 255 + strlen($LINE_DELIMITER); //Максимальная разумная длина одной строки
  6. $TRIPLE_BUFFER = $MAX_LINE_LEN * 3; //Берем немного с запасом
  7. $fileLen = filesize($FILENAME); //Длина файла
  8. if (empty($fileLen) || $fileLen < $TRIPLE_BUFFER) { //На всякий случай проверим длину файла
  9. throw new ErrorException("Файл слишком мал");
  10. }
  11. $rnd = rand(0, $fileLen - $TRIPLE_BUFFER); //Случайная позиция для чтения
  12. $handle = fopen($FILENAME, "r"); //Открываем файл для чтения
  13. fseek($handle, $rnd); //Устанавливаем указатель в случайном месте файла
  14. $stream = fread($handle, $TRIPLE_BUFFER); //Читаем начиная со случайной позиции
  15. $lines = explode($LINE_DELIMITER, $stream); //Разбиваем текст на строки
  16. $lineCount = count($lines); //Считаем количество прочитанных строк
  17. $randomLine = ""; //Инициализируем нашу случайную строку
  18. $startAtLine = ($rnd !== 0) ? 1 : 0; //Пропускаем первую строку, так как она может быть обрезана
  19. for ($i = $startAtLine; $i < $lineCount; $i++) { //Ищем случайную строку
  20. if (!empty($lines[$i])) { //Пропускаем пустые строки
  21. $randomLine = $lines[$i]; //Ну и наконец, вот наша случайная строка
  22. break;
  23. }
  24. }
  25.  
  26. return $randomLine;
  27. }
Add Comment
Please, Sign In to add comment