The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Можноли сократить..??, !*! xtc, 16-Дек-03, 01:00  [смотреть все]
мне нужно все пробелы подряд заменить на 1 пробел

типа:
1071360152.546    219 192.168.0.141 TCP_MISS/304 95 GET http://linux.perm.ru/projects/sams/img/1.jpg - DEFAULT_PARENT/212.192.101.11 -
на:
1071360152.546 219 192.168.0.141 TCP_MISS/304 95 GET http://linux.perm.ru/projects/sams/img/1.jpg - DEFAULT_PARENT/212.192.101.11 -

Пробовал всякое разное, :) первое что придумал вот :))

$line =~ s/(\s\s\s\s\s\s)|(\s\s\s\s\s)|(\s\s\s\s)|(\s\s\s)|(\s\s)|(\s)/ /g;

Можно ли это сократить? я просто не мог понять как сделать чтоб сразу несколько на один, кроме этого :(((((


Если можно, помагите.

Заранее очень благодарен.

  • Можноли сократить..??, !*! XMan, 01:21 , 16-Дек-03 (1)
    Лаба что ли ? У меня товарищ недавно тоже перл проходил в универе. Говорит, там народ приносил километры бумаги, на которых было решение задания, типа такого:

    Найти в тексте все строки, в которых третье слово содержит 3 буквы n подряд или больше чем 5 букв m в произвольном порядке, и вывести эти строки.

    Хотя это всё укладывается в одно одну строку условия. Судя по всему, твоё решение из той же оперы :)

    ---

    $line =~ s/\s+/ /g;

    Можно более правильно, но менее красиво:

    $line =~ s/\s{2,}/ /g;

    PS. И не забывай делать chomp($line) перед обработкой, а то ведь перенос - это тоже пробельный символ. Или замени \s на пробел, если уверен, что табуляции нигде в строке нету :)

    • Можноли сократить..??, !*! xtc, 01:35 , 16-Дек-03 (2)
      >$line =~ s/\s+/ /g;

      Вроде пробовал так, щас еще проверю


      >Можно более правильно, но менее красиво:
      >
      >$line =~ s/\s{2,}/ /g;
      >
      >PS. И не забывай делать chomp($line) перед обработкой, а то ведь перенос
      >- это тоже пробельный символ. Или замени \s на пробел, если
      >уверен, что табуляции нигде в строке нету :)

      Пишу прогу для обработки логов сквида в реальном времени..... Ж)))

      А вот такую херь плохо кушаю :))
      Щас еще раз проверю $line =~ s/\s+/ /g; Ну помойму делал так.


    • Можноли сократить..??, !*! xtc, 01:38 , 16-Дек-03 (3)
      >$line =~ s/\s+/ /g;

      Сработало :)) Я заместо плюса ставил * Ж)) и плюс ставил спереди :))

      >Можно более правильно, но менее красиво:
      >
      >$line =~ s/\s{2,}/ /g;

      Спасиб..  просто уже так давно сижу, разбирался с File::Tail :))

      И я в общем говоря всегда плохо понимал все Эти замены :)) не всегда они мне надобились. :)

      Спасиб еще раз.

    • Можноли сократить..??, !*! xtc, 01:43 , 16-Дек-03 (4)
      >
      >$line =~ s/\s{2,}/ /g;

      а можно расшифровать Это?? что к чему 2 и запятая?




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру