Как удалить пустые строки в txt файле при помощи скрипта на php.

    Вчера мне пришлось столкнуться с одной маленькой проблемой.
    Мне надо было собрать базу синонимов, чтоб каждая строчка соответсвововала одной паре. После определенных манипуляция я получил базы такого вида:

    а в случае если|ну а если
    а вообще|короче говоря
    а вы не знали|неужели вы еще не знали
    а не|но не
    а потом уж|после чего и
    а также|а еще
    а то и|а может быть

    а хотите нет|а можете нет
    абстрактная|отвлеченная
    абстрактного|отвлеченного
    абстрактную|отвлеченную
    абстрактные|отвлеченные
    абстрактный|отвлеченный
    абстрактным|отвлеченным
    абстрактных|отвлеченных
    абсурд|бред
    абсурд|нелепость
    абсурдная|бредовая
    абсурдная|бредовая

    М вот возник вопрос, как удалить пустые строки. Что я не делал, как не пытался, облазил пол Интернета, так ни чего придумать не смог. НУ вот подвернулся один простой, но выручивший меня скрипт. Он мне очень помог, поэтому я решил выложить его для всех.
    Он прост как валенок, но сами понимаете, когда нужны валенки их не бывает под рукой!

    <?php
    $url=«base5.txt»;
    $link="$url";
    $file=fopen($link,«r»);
    if ($file)
    {
    $rf = fread($file, filesize($link));
    fclose($file);
    }
    else
    {
    echo«fuck»;
    fclose($file);
    exit;
    }
    $txt = trim(preg_replace('/[\r\n]+/m',"\n",$rf));
    $openFile = fopen($url, 'w+');
    fwrite($openFile, $txt );
    fclose($openFile)
    ?>

    Надеюсь, он вам поможет! Спасибо за внимание!

    Комментарии 49

    • НЛО прилетело и опубликовало эту надпись здесь
        0
        неоптимально, лучше сделать file('file.txt'), после чего например unset все пустые элементы
          0
          Я просто хотел поделится кодом, который мне помог. Я не силен в php, поэтому если можете предлагайте свои решения. Чтобы впредь знать.
            +2
            Я бы написал так:
            file_put_contents($url, trim(preg_replace('/[\r\n]+/m',"\n", file_get_contents($url))));
              +8
              Смысл в том, что на этом ресурсе публикуются более серьёзные решения.
                0
                Нет просто пишу свои мысли.
                  +5
                  Да, плохо дело, если вы мыслите PHP-кодом, ещё и кривым.

                  Хабрахабр — это IT-сообщество, а не форум по PHP.
                  Многие хабралюди каждый день по работе пишут десятки таких решений, но вы не задумывались, почему они не публикают всё это здесь?

                  Советую спрятать запись и больше такого сюда не писать.
                +17
                grep -v '^$' file.txt
                  +1
                  Я не знаток PHP, но по-моему загружать весь файл в память обрабатывать его там регулярным варажением неоптимально. Не проще ли построчно?
                    +2
                    Вот вам одна строчка кода, которая решает все ваши проблемы:
                    file_put_contents('output.txt', array_filter(file('input.txt')));
                      +1
                      array_filter не прокатил, я проверил =)
                      file_put_contents('output.txt', array_filter(array_map('trim', file('input.txt'))));
                        +3
                        Да, я чуточку стормозил. Вот так лучше всего будет наверно:

                        file_put_contents('output.txt', array_filter(file('input.txt'),'trim'));
                      0
                      а хотите нет|а можете нет
                      абстрактная|отвлеченная
                      абстрактного|отвлеченного
                      абстрактную|отвлеченную
                      отвлеченные
                      абстрактный|отвлеченный
                      абстрактным|отвлеченным
                      абстрактных|отвлеченных

                      а кто подскажет как удалить из приведенного файла
                      строки где нет символа |
                        0
                        file_put_contents('output.txt', array_filter(array_map(create_function('$v', 'return preg_replace('/^[^\|]*$/', '', $v);'), file('input.txt'))));
                          +3
                          grep -v '^$' file.txt | grep '|'
                          :-p
                            +4
                            Туплю. Можно ж ещё проще
                            grep '|' file.txt
                            +2
                            Открываете Excel, копируете фал в столбец A, в столбце B прописываете формулу
                            =ЕСЛИ(ЕОШИБКА(НАЙТИ("|";A1));"";A1)

                            Задача сводится к предыдущей :)

                            P.S. Если кто не понял — это шутка.
                            +1
                            In VIM:
                            %g/^$/ d
                              0
                              В одну строку код мне всегда нравится. Позже проверю.
                                0
                                Однако зачастую читабельность такого кода несколько ниже, хотя решение всегда кажется более элегантным, конечно.
                                +6
                                $link="$url";
                                о, я счас кончу…
                                  –2
                                  Честно говоря не понимаю вас. Человек только начинает во всём разбираться — почему нельзя указать на ошибки нормальным языком?
                                    –6
                                    Спасибо за поддержку. Люди наровят поставить минус или типа того, как правило не всегда сами хорошо подкованы.
                                    Их я назвываю школьнегофобы я про них уже писал однажды на блоге

                                    Не дай бог вам стать Школьнегом в глазах коренных жителей форума. Ситуация примерно такая: человек пытается высказать свое мнение и поделится с форумчанами своими идеями, но тут просыпаются они — ШкольнегоФобы. Как правило, их целые стаи, любая новая идея или отхождение от правил вызывает у них недоумение, в постах летят грубости и унижения к создателю топика. Его обзывают: школьник, Школьнег, малолетка, писун и т.д. Честно скажу я в шоке.

                                    С пеной у рта люди пытаются доказать, что вы некий школьник, который плохо учится и ничего не понимает в жизни. Непонятно одно, почему все так боятся школьников. Мочить Школьнега — это девиз настоящего ШкольнегоФоба.
                                    Давайте задумаемся и сделаем портрет – того самого постера, который со знанием дела, числит Школьнега по первым словам, для того чтобы унизить и оскорбить. У него в запасе всегда есть пару крылатых фраз и ссылок на прикольные картинки.

                                    Очень странно, почему же он так не любит школьников, он кричит, что их надо банить налево и направо, так в чем же дело. По-моему глубокому убеждению, этим люди как раз и есть те самые настоящие Школьнеги, да еще какие.
                                    Думаю, в школе их многие знают под кличкой (Don’t speak) или подобной. Они крадутся вдоль стенки в надежде не попасть в руки Школьнегов из своей школы, но вот беда попадают. Их унижают, притесняют и обижают. Может быть, именно поэтому, приходя, домой, они хватают клавиатуру и начинают утверждаться в виртуальном мире, может быть, поэтому в каждом новом посте они видят подвох, нажимая на клавиши, они боятся, что скоро их позовет отец или мать.
                                    Лично мое мнение, Школьнег — это нормальное явление, но плохую эмоциональную окраску ему дают именно ШкольнегоФобы. Стоит задуматься, кто опасней — школьник, который в силу своего возраста много еще не знает или этот, затаившийся кусок отрицательных эмоций и комплексов, готовый облить грязью любого по делу и без дела, а на следующий день получить лещей от своих сверстников.
                                    Борьба с ШкольнегоФобией дело компетентных людей, если вы очень часто кричите по форумам, что вычислили очередного Школьнега, задумайтесь, не больны ли вы этим страшным недугом. Обратитесь к родителям, может они смогут решить ваши проблемы.

                                    Что может быть страшнее, чем Школьнег-ШкольнегоФоб. Будьте осторожны, старайтесь не идти на поводу у взрослых ШкольнегоФобов. Они умны и проницательны. Они могут сравнять с землей, осмеять и выставить дураком любого, но они не могут признаться себе в слабости.
                                      +15
                                      Вы случайно этот текст заготовили не перед тем, как топик публиковать?
                                        +1
                                        Либо заготовил задолго до, либо вообще не он — talk. maulnet. ru / topic7151.html?mode=threaded&pid=91724
                                        Пробелы в ссылке нужно конечно убрать
                                          0
                                          о… спасибо за ссылку. теперь ясно что автор еще и плагиатор
                                            0
                                            Кстати я не плагиатор, а настояший автор этой статьи. На форуме ссылка стоит на мой блог.
                                          0
                                          почему-то тоже об этом подумал как только раскрыл его коммент :)
                                        0
                                        Указываю нормальным языком: Автор, здесь ошибка!
                                          +1
                                          Там нет ошибки. Там просто не красиво написано.
                                            –1
                                            Спасибо! =)
                                              +5
                                              Это не ошибка, а код, написанный по стандарту Strict Indian Style
                                                +2
                                                Боже, как тогда выглядит transitional?!
                                              0
                                              Не думаю, что Хабр — это именно место обучения чистокодированию на PHP
                                                0
                                                Именно поэтому я, также как и многие, не стал указывать ни одной ошибки, а просто их проигнорировал.
                                                  +1
                                                  Вы меня сейчас просто подставляете. Сейчас, когда я по вашей просьбе уличил еще одну грубейшую оплошность несколькими комментариями ниже :)
                                              0
                                              Да, у меня тоже вызывают бури эмоций такие конструкции )
                                              +5
                                              Кстати, если оставить в посте только код и перенести в КодоБред, может выйти из минуса. =)
                                                +2
                                                При должном везении, даже попасть на главную
                                                +5
                                                Автор, ну это не смешно.
                                                То что вы не знаете PHP не дает вам морального права публиковать решение простейшей задачки. Это статья уровня форума для новичков PHP, но никак не Habrahabr. Извините, но статье минус. Карму не трогаю, вам ее и так уже опустили.
                                                  +2
                                                  $file=fopen($link,«r»);
                                                  if ($file)
                                                  {
                                                  } else {
                                                  [B]fclose($file);[/B]
                                                  }

                                                  Автор, здесь ошипко!!! ( fclose(false) )
                                                    0
                                                    Я вас прошу, давайте не будем.
                                                      0
                                                      Хорошее у вас сегодня настроение. =)
                                                        +4
                                                        Знаете, в чем ваша ошибка?
                                                        В том, что правильно было написать в личку автору про все недочеты и объяснить, почему так не надо делать. Вот это было бы достойное поведение.

                                                        А вы сейчас просто издеваетесь. Да, вы всё правильно говорите, но сейчас ваше поведение ничуть не красивее приведенного кода.
                                                          0
                                                          >Знаете, в чем ваша ошибка?
                                                          У меня нет проблем.

                                                          >А вы сейчас просто издеваетесь.
                                                          У вас своя призма восприятия, у меня своя. Я рад что вы знаете, как нужно правильно поступать и уверен что вы всегда поступаете правильно. И я вас за это не виню.
                                                            +1
                                                            > В том, что правильно было написать в личку автору
                                                            Исторически сложилось, что на хабре для того что-бы написать сообщение нужно было быть другом друга или еще что-то еще. Как сейчас — не знаю, но осадок остался, личными сообщениями пользуюсь только по личным делам, которые не сообтветствуют теме топика. В данном случае, как бы вам не казалось, где бы следовало писать об этой ошибке (я наверное вас смутил своим несерьезным написанием этого слова, прошу прощения), мое сообщение полностью относится к топику автора и я не считаю целесообразным тратить нейронный процеес на обдумывание, куда посместить комментарий.
                                                          +2
                                                          Уникальный контент генерите?)
                                                            0
                                                            а автор не из тех блого-спамеров, которых сейчас прижали с помощью Parasite Eliminator?
                                                            ))

                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                            Самое читаемое