Как может я переход на новую строку строка в Perl?

Вы можете преобразовать свой результат filter в нужный вам тип:

const array: (string | null)[] = ["foo", "bar", null, "zoo", null];
const filterdArray = array.filter(x => x != null) as string[];

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

const array2: (string | number)[] = ["str1", 1, "str2", 2];
const onlyStrings = array2.filter(x => typeof x === "string") as string[];
const onlyNumbers = array2.filter(x => typeof x === "number") as number[];

( код на детской площадке )

10
задан brian d foy 5 June 2009 в 17:27
поделиться

4 ответа

s/(.{70}[^\s]*)\s+/$1\n/

Занимает первые 70 символов, затем останавливается на следующем пробеле, захватывая все в процессе. Затем выдайте захваченную строку, опуская пробелы в конце и добавляя новую строку.

Это не гарантирует, что ваши строки будут обрезаны строго на 80 символов или что-то в этом роде. Нет никакой гарантии, что последнее слово, которое он потребляет, не будет длиной в миллиард символов.

13
ответ дан 3 December 2019 в 13:25
поделиться

Посмотрите на такие модули, как Text :: Wrap или Text :: Autoformat .

В зависимости от ваших потребностей, даже базовая утилита GNU сворачивается (1) может быть вариантом.

23
ответ дан 3 December 2019 в 13:25
поделиться

Ответ Велбога начинается с первого пробела после 70 символов. Этот недостаток состоит в том, что длинные слова, начинающиеся ближе к концу строки, образуют слишком длинную строку. Я бы посоветовал вместо этого перенести последний пробел в первый, скажем, 81 символ или перенести его на первый пробел, если у вас есть «слово»> 80 символов, чтобы только действительно неразрывные строки были слишком длинными:

s/(.{1,79}\S|\S+)\s+/$1\n/g;

В современном Perl :

s/(?:.{1,79}\S|\S+)\K\s+/\n/g;
7
ответ дан 3 December 2019 в 13:25
поделиться

Вы можете получить гораздо больше контроля и надежности, используя Text :: Format

use Text::Format;
print Text::Format->new({columns => 70})->format($text);
5
ответ дан 3 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: