1. PHP / Говнокод #5175

    +164

    1. 1
    2. 2
    3. 3
    4. 4
    $data_array = file('./dir/file.txt'); //Прочитали файл в массив
    $count = count($data_array); //Подсчитали количество элементов массива
    $chislo = rand(0,$count-1); //Так как элементы массива имеют ключи с 0 до $count-1
    echo $data_array[$chislo]; //Вот вам и произвольная строка из файла

    Основная говнистость в том, что это статья, т.е. человек этому учит других, ни в чём не повинных людей.

    Запостил: DeaDrash, 07 Января 2011

    Комментарии (49) RSS

    • Прочтём весь файл в память, что-бы прочитать один элемент файла... :D

      Впрочем, надеюсь, что этот массив в ПХП делается через отображение файлов на память, чем через его полное чтение...

      Но не удивлюсь, если ПХП действительно прочитает весь файл. :D
      Ответить
      • "Чтобы" пишется слитно. К.о.
        Ответить
        • К.О. нерусь
          "что-бы"
          Ответить
          • Ты не русский что ли? Какое ещё что-бы? Через дефис пишутся -то, -либо, -нибудь и кое-
            Ответить
            • http://ru.wiktionary.org/wiki/чтобы
              Ответить
              • Следуя вашей логике "безграмотный" должно писаться как "без-гра́-мот-ный".
                Ответить
              • Тебе напомнить кто пишет википедии? о_О
                http://www.gramma.ru/RUS/?id=4.41
                вот правильная ссылка. Если и это не поможет, буду сканировать орфографический словарь.
                Ответить
                • ужас, в интернете такая тотальная безграмотность, что уже память и интуиция начинает путаться
                  Ответить
            • нерусский
              Ответить
              • Примечание 3. Иногда слитное или раздельное написание не с прилагательным определяется возможностью двоякого толкования текста: Яблоко невкусное (утверждается, что оно плохое). - Яблоко не вкусное(отрицается, что оно вкусное).
                http://www.gramma.ru/RUS/?id=4.53
                Ответить
          • очень даже русь )
            Ответить
    • Мне стыдно, но я когда-то делал так же и знал, что это неправильно, но знать не знаю, как сделать по-другому. Подскажите, пожалуйста.
      Ответить
      • fopen && fseek && fgets && fclose.
        Ответить
      • вот лично я брал бы filesize файла, делал rand(0, filesize), потом fseek на эту позицию, потом возвращался бы назад fseek'ом до \n (или начала файла), потом получал бы всю строку через fgets, ну и fclose.

        извращение, но зато не грузит весь файл в память.
        Ответить
        • Говнокод 5175 может не грузить весь файл в память, если PHP правильно реализован, например, на основе проецируемых на адресное пространство файлов..
          Ответить
          • С чего бы?
            Это же не связка с ресурсом. А тупое считывание и запись в массив.
            Ответить
            • >А тупое считывание и запись в массив.
              При такой тупой реализации этого процесса в PHP, это, конечно, работать быстро не будет. При правильном - работало бы быстро.
              Ответить
              • воообще то такие "массивы" в пхп5 реализуемы.
                я делал как-то :)
                ведет себя как массив. подчитывает из файла. ниче постыдного в том что нахуячено не вижу - все от задач зависит.
                Ответить
                • Это может делать и сама ОС при проецировании файлов на адресное пространство, что более эффективно вашего способа. К тому же своих велосипедов не пришлось бы писать, если бы PHP был верно реализован...
                  Ответить
                  • если бы у бабушки был хуй она была бы дедушкой. ога
                    Ответить
                    • Не ога.
                      Женщин отличает от мужчины не наличие "причиндалов" (сейчас всякие операции проводят), а потенциальная запрограммированная возможность вынашивать и рожать детей (XX-хромосома).
                      Ответить
                      • пхп умеет рожать дебилов
                        а потом их имеет
                        Ответить
                        • Соглашусь, что с PHP начинать светлый путь в программирование не стоит. Это может оставить трудно исправимый отпечаток на программисте. Впрочем, время и желание исправиться - всё исправят.
                          Ответить
                          • Программирование лучше начинать с перфокарт. Это развивает волю: нужно быть очень терпеливым и внимательным, потому что если допустишь ошибку, кнопки backspace нет - надо всё переделывать сначала. Это развивает абстрактное мышление: прежде чем кодить, нужно хорошенько продумать алгоритм и предусмотреть побочные эффекты.
                            Ответить
                            • Играя в компьютерные игры лучше начинать с 8-биток. Это развивает волю: нужно быть очень терпеливым и внимательным, потому что если просрешь жизнь, сейва нет - надо всё проходить сначала. Это развивает задротские навыки.
                              http://www.youtube.com/watch?v=rIW-vLTwtmI
                              Ответить
                            • >прежде чем кодить, нужно хорошенько продумать алгоритм и предусмотреть побочные эффекты.
                              Согласен.
                              Ответить
        • А если надо знать номер строки при этом?
          Ответить
          • Можно пронумеровать все строки изначально. Как вот индексы в базе данных.
            1строка -> 0
            2строка -> 1423 (позиция, с которой начинается)
            3строка -> 3124
            ...

            и хранить как filename.txt.index.

            Но такая каша для реально больших файлов. Для маленьких #5175 вполне сгодится.
            Ответить
            • Да, действительно. Спасибо.
              Ответить
            • >Для маленьких #5175 вполне сгодится.
              Только вот некоторые обучившиеся этому методу применяют его для всех файлов...
              Ответить
            • а вообще для хранения структурированных (табличных) данных все же больше подходят БД. Файлы уже актуальны только в специфичных случаях (импорт\экспорт особого формата)
              Ответить
              • Естественно. Но важно понимать в чём соль/перец/сахар. Иначе и работа с БД грозит превратится в ещё больший говнокод.
                Ответить
          • показать все, что скрытоНаверное можно так
            $key = array_rand(file("aa.txt"));
            echo array_search($key, array_flip(file("aa.txt")));


            Но вот мне интересно, а в этом случае файл всё равно будет полностью загружен в память?
            Ответить
            • file читает файл в массив, её работа заканчивается; array_rand берёт строку из массива, отдаёт номер строки, её работа тоже заканчивается. Друг о друге они не знают, поэтому действовать как-то иначе, чем так, как от них ожидается, они не будут. Если бы была функция file_rand_line, она не читала бы весь файл. Это вроде очевидно, нет?
              Ответить
            • Ещё хлеще говнокода...
              Решили загрузить файл в память 2 раза?
              Ответить
        • замечательный метод. только идея проебана.
          отношения вероятностей выбора строк пропорциональны отношению длинн строк. и где тут нормальное распределение?
          Ответить
          • Его никто не просил.
            Если нужно => метод2.
            Ответить
            • >>//Вот вам и произвольная строка из файла
              это конечно же не просьба.

              да дофига же методов. я про то, что ваш - работает не так.
              Ответить
              • У нас разные понимания слова "произвольная". ( http://goo.gl/ln6s8 )

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

                  >> вольность, безосновательность, необоснованность, свобода
                  и проч. синонимы как-бы согласуются с концепцией автора, согласно которой, строка выбирается из списка функцией, дающей распределение близкое к нормальному(rand(0,$count-1);), и не делающей различий между строками.

                  у вас же вероятность выбора строки основывается на ее длинне, привязана к ее длинне, оправдывается ее длинной, или как вам еще написать, чтобы вы поняли, что слово всем понятно, но вы совершенно не по делу ерзаете, глупо ошибившись предположением?

                  и потом - глупости пишите. вы в файл тыкаете так: rand(0, filesize), а это замечательный способ получить нормальное распределение по байтам.

                  говнокоды, в последнее время, стали добрее и глупее. а что поделать-с. рак-с.
                  Ответить
                  • >Я согласен
                    Не хватило? Нужно было написать "О, да, я такой дурак. Сразу не понял. Конечно, это всё так, а не так, как у меня. И да, не лучший вариант для распределения вероятности строкам, а не байтам.."?

                    Не стоит придираться к предложением. Русский язык не имеет чёткого синтаксиса.
                    Ответить
                    • Конечно же стоит. И безусловно имеет. Вы же поняли, куда и какое слово надо вставить, чтобы не осталось недосказанности.

                      "я согласен" не хватило вам. зачем было давать ссылку на странную подборку синонимов и завршать свой пост синтаксически не полным предложением? только для того, чтобы чувствовать себя лучше? ставить за собой последнее слово?

                      вот и сейчас, когда нам все понятно и мы со всем согласны вы указываете мне, чего делать не стоит и рассуждаете о русском языке. попробуйте общаться по-другому - без лишних слов. может быть вам не понравится, но, я вас уверяю, опыт окажется полезным.
                      Ответить
                      • Мне похуй, но сами оцените, сколько ошибок синтаксиса в этом вашем посте.
                        Ответить
    • а по-моему, это интуитивное решение (хотя и не из лучших), а говно в пхп.
      лучше бы пхп предоставлял простую связку с файлом.
      Ну вот например, перл умеет работать с dbm файлами как с хешем, и если хеш читать через each, то из файла берется только одна пара ключ-значение, а не весь файл.
      Быть может, не лучший пример, но на мысли наталкивает
      Ответить
      • з.ы. это я к тому, что операции fopen fseek fgets fclose уж слишком низкоуровневы
        Ответить
    • > //Вот вам и произвольная строка из файла
      sic!
      Ответить

    Добавить комментарий