Создание простого текста процесса Сценария PHP в канале

Вот сценарий AWK, который переносит длинные линии и повторно переносит остатки, а также короткие строки:

awk -v WIDTH=72 '
{
    gsub("\t"," ")
    $0 = line $0
    while (length <= WIDTH) {
        line = $0
        more = getline
        gsub("\t"," ")
        if (more)
            $0 = line " " $0
        else
            $0 = line
            break
    }
    while (length >= WIDTH) {
        print substr($0,1,WIDTH)
        $0 = substr($0,WIDTH+1)
    }
    line = $0 " "
}

END {
    print
}
'

Существует сценарий Perl, доступный на CPAN, который делает очень хорошее задание переформатирования текста. Это назвало paradj (отдельные файлы). Чтобы сделать расстановку переносов, Вам также будет нужно TeX::Hyphen.

SWITCHES
--------
The available switches are:

--width=n (or -w=n or -w n)
    Line width is n chars long

--left (or -l)
    Output is left-justified (default)

--right (or -r)
    Output is right-justified

--centered (or -c)
    Output is centered

--both (or -b)
    Output is both left- and right-justified

--indent=n (or -i=n or -i n)
    Leave n spaces for initial indention (defaults to 0)

--newline (or -n)
    Insert blank lines between paragraphs

--hyphenate (or -h)
    Hyphenate word that doesn't fit on a line

Вот разность некоторых изменений, которые я внес для поддержки опции левого поля:

12c12
< my ($indent, $newline);
---
> my ($indent, $margin, $newline);
15a16
>   "margin:i" => \$margin,
21a23
> $margin = 0 if (!$margin);
149a152
>     print " " x $margin;
187a191,193
>   print "--margin=n (or -m=n or -m n)  Add a left margin of n ";
>   print "spaces\n";
>   print "                                (defaults to 0)\n";

0
02.11.2011, 18:16
1 ответ

У Вас почти был он. $argv является массивом, подобным жемчугу. $argv [0] является самим сценарием, как 0$ в оболочке или $ARGV [0] в жемчуге. $argv [1] был бы первым аргументом, переданным сценарию, но Ваше использование, вероятно, изменится, так как можно сделать кошку в сценарии PHP. Принятие Вашего сценария PHP stconvert, использование теперь было бы stconvert simplifiedstory > traditionalstory.

#!/usr/bin/php
<?php

define("MEDIAWIKI_PATH", "/home/a1/mediawiki-1.13.0/");
require_once "mediawiki-zhconverter.inc.php";

$text = shell_exec("cat $argv[1]");
echo MediaWikiZhConverter::convert($text, "zh-tw") , ",";

?>
2
28.01.2020, 02:38
  • 1
    это работает красиво. я предполагаю, что мне не была нужна та дополнительная запятая в конце эха... –  ixtmixilix 02.11.2011, 20:35
  • 2
    , я рад услышать это. –  Tim Kennedy 02.11.2011, 21:09
  • 3
    я - разработчик mediawiki-zhconverter, я также рад, что Вы находите мой код полезным :) –  tszming 03.11.2011, 04:42
  • 4
    Как общие сведения, для тех, которые ищут способ использовать stdin и stdout: PHP предопределил потоки и дескрипторы файлов, которые можно использовать. Например: echo str_replace('foo', 'bar', file_get_contents('php://stdin'); заменил бы все foo с bar в переданном по каналу входе. Если Вы хотите дескриптор файла, использовать STDIN. Например, при передаче по каналу файла CSV: while (($record = fgetcsv(STDIN))) { print_r($record); }. –  janmoesen 03.11.2011, 21:37

Теги

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