ocehb: (Default)
[personal profile] ocehb
вот тут.
С однострочником не получилось (не влезла юстификация строки),

     1  #! /usr/bin/perl
     2  #
     3
     4  my ( $a1, $a2 ) = ( shift, shift );
     5
     6  sub A {
     7          my $str = scalar reverse $_[0];
     8          my ( $from, $to ) = ( " ", "  " );
     9          while (length $str < $a1) {
    10                  unless ($str =~ s#(\S)$from(\S)#$1$to$2#) {
    11                          $from .= " "; $to .= " ";
    12                  }
    13          }
    14          return scalar reverse $str;
    15  }
    16
    17  local $/;
    18
    19  foreach $a (map { s#\n# #g; s#  +# #g; $_ } split "\\s*\n\n+|\\s*\n(?=[[:upper:]])", <>) {
    20          if (length $a > $a1-$a2) {
    21                  my @a = grep { m#\S+# } split "(.{2,$a1})( +|\$)", " "x$a2 . $a;
    22                  my $l = pop @a;
    23                  print join "\n", map({ A $_ } @a), $l, "", "";
    24          }
    25          else {
    26                  print " "x$a2, $a, "\n\n"
    27          }
    28  }


Строка 17 — читаем файл полностью в память, структура текста такова, что приходится
использовать сложный регексп для деления на абзацы.

Строка 19 — делим текст на абзацы и нормализуем в одну строку с одним пробелон за раз.

Строка 20 — если строка короткая, то печатаем как есть (с отступом), если нет, то
Строка 21 — делим строку на подстроки не более $a1 символов, с границей по слову,
Строка 22 — последняя подстрока всега годна.
Строка 23 — юстифицируем строки кроме последней и печатаем.

Строка 6 — функция юстификации, прямо, как описано в задании, вставляем пробелы справа,
пока строка не вытянется.

Параметры:
1. желаемая ширина текста
2. отступ

Результаты:
# perl x.pl 40 2 test.txt
  Lorem ipsum

  Lorem   ipsum    dolor    sit    amet,
consectetur  adipisicing  elit,  sed  do
eiusmod tempor incididunt ut  labore  et
dolore magna aliqua. Ut  enim  ad  minim
veniam,   quis   nostrud    exercitation
ullamco laboris nisi ut  aliquip  ex  ea
commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur.

  Excepteur sint occaecat cupidatat  non
proident,  sunt  in  culpa  qui  officia
deserunt mollit anim id est laborum.

# perl -CSI x.pl 48 4 test.utf8
    Не совсем понятно, какое отношение системные
логи имеют к специфичным логам программы.

    Ну  и  кто  сказал  разработчикам  wot,  что
loggerd будет иметь  имено  те  ключи  какие  им
надо, а не как в журнале windows,  где  например
название   программы    в    логе    инсталляций
присутствует только  где-то  в  человекочитаемом
поле description у события.

#

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 6th, 2026 01:46 am
Powered by Dreamwidth Studios