aar
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Horex Так-с… :=) Вчера я тебя ввел в заблуждение по поводу Print merge. Точнее выражаясь, неправильно сказал о том, как должны быть распложены значения в таблице, которые будут использоваться для печати. Исправляюсь :=) Будет немного математики (если с ней возникнут проблемы, думаю, что Вдовин поможет :=) ). Вводятся обозначения: N – общее количество номеров, которые должны разместиться на страницах (одной или нескольких); M – количество номеров, размещаемых на одной странице; K – количество страниц, занимаемое N номерами, определяемое как округленный до ближайшего целого значения результат выполнения операции деления N/M; P – общее количество блоков из K страниц; значение номера повторяется на страницах до тех пор, пока не будут заполнены все N номеров. Теперь, с учетом этих переменных, таблица будет выглядеть так: | f1 | f2 | f3 | ... | fM | P | 1 | 2 | 3 | ... | M | 1 | 1+M | 2+M | 3+M | ... | 2*M | 1 | 1+2*M | 2+2*M | 3+2*M | ... | 3*M | 1 | ... | 1+K*M | 2+K*M | 3+K*M | ... | K*M | 1 | 1 | 2 | 3 | ... | M | 2 | 1+M | 2+M | 3+M | ... | 2*M | 2 | 1+2*M | 2+2*M | 3+2*M | ... | 3*M | 2 | ... | 1+K*M | 2+K*M | 3+K*M | ... | K*M | 2 | 1 | 2 | 3 | ... | M | 3 | 1+M | 2+M | 3+M | ... | 2*M | 3 | 1+2*M | 2+2*M | 3+2*M | ... | 3*M | 3 | ... | 1+K*M | 2+K*M | 3+K*M | ... | K*M | 3 | 1 | 2 | 3 | ... | M | P | 1+M | 2+M | 3+M | ... | 2*M | P | 1+2*M | 2+2*M | 3+2*M | ... | 3*M | P | ... | 1+K*M | 2+K*M | 3+K*M | ... | K*M | P | Пример. N = 32, M = 16, K = ceil(N/M) = 2, P = 32. В твоих обозначениях, N – количество вариантов, M – количество вариантов, которые можно расположить на одной странице, K – количество страниц, которое требуется, чтобы расположить 32 варианта по 16 вариантов на странице, P – количество команд-участников. | f1 | f2 | f3 | ... | f16 | P | 1 | 2 | 3 | ... | 16 | 1 | 17 | 18 | 19 | ... | 32 | 1 | 1 | 2 | 3 | ... | 16 | 2 | 17 | 18 | 19 | ... | 32 | 2 | 1 | 2 | 3 | ... | 16 | 3 | 17 | 18 | 19 | ... | 32 | 3 | ... | ... | ... | 1 | 2 | 3 | ... | 16 | 32 | 17 | 18 | 19 | ... | 32 | 32 | Как видно, происходит повторение блоками по K строк. Поля с именами f1–f16 располагаются возле надписей “Вариант №”, а поле P возле надписи “Команда №”, как на рисунке: Напоследок небольшой скрипт на перле, который формирует файл, который можно напрямую использовать как дата-файл. # script name: Horex. pl # perl.exe Horex.pl [--addnull] > datafile.txt use locale; # Включаем поддержку русского языка use POSIX "locale_h"; setlocale(LC_ALL, "Russian_Russia.1251"); use POSIX; # ceil() use Getopt::Long; # GetOptions() GetOptions ('addnull' => \$addnull); # Параметр --addnull в командной строке для добавления нуля у однознаковых цифр $n = 32; # Общее количество номеров, которые должны разместиться на страницах (одной или нескольких) $m = 16; # Количество номеров, размещаемых на одной странице $k = ceil($n/$m); # Количество страниц, занимаемое $n номерами $p = 32; # Общее количество блоков из $k страниц; значение номера повторяется на страницах до тех пор, пока не будут заполнены все $n номеров for ($j = 0; $j < $p * $k; $j = $j + $k) { # По строкам, количество которых равно произведению количества страниц, занимаемых одним блоком из $n номеров на количество $p таких блоков for ($l = 0; $l < $k; $l++) { # По блокам строк $ar[$j + $l][$m] = $j / $k + 1; if ($addnull) { $ar[$j + $l][$m] =~ s/^(\d)$/0$1/; } for ($i = 0; $i < $m; $i++) { # По столбцам, количество которых $m $ar[$j + $l][$i] = $i + 1 + $l * $m; if ($addnull) { $ar[$j + $l][$i] =~ s/^(\d)$/0$1/; } } } } # Вывод файла с данными для корела print $m + 1, "\n"; # Количество полей foreach (1..$m) { # Имена полей начинаются с буквы `f', за которой следует номер этого поля print "\\f$_\\"; } print "\\FFF\\\n"; # Имя поля блока for ($j = 0; $j < $p * $k; $j++) { for ($i = 0; $i < $m + 1; $i++) { print "\\", $ar[$j][$i], "\\"; } print "\n"; } __END__ Результатом работы скрипта с указанными значениями переменных является следующий дата-файл. 17 \f1\\f2\\f3\\f4\\f5\\f6\\f7\\f8\\f9\\f10\\f11\\f12\\f13\\f14\\f15\\f16\\FFF\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\01\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\01\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\02\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\02\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\03\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\03\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\04\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\04\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\05\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\05\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\06\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\06\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\07\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\07\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\08\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\08\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\09\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\09\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\10\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\10\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\11\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\11\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\12\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\12\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\13\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\13\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\14\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\14\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\15\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\15\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\16\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\16\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\17\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\17\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\18\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\18\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\19\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\19\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\20\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\20\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\21\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\21\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\22\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\22\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\23\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\23\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\24\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\24\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\25\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\25\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\26\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\26\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\27\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\27\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\28\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\28\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\29\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\29\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\30\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\30\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\31\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\31\ \01\\02\\03\\04\\05\\06\\07\\08\\09\\10\\11\\12\\13\\14\\15\\16\\32\ \17\\18\\19\\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\30\\31\\32\\32\ В мастере выбери Выбор из существующего файла, галочку на Incremental field data НЕ СТАВЬ, а в остальном действуй так, как я уже описал выше. Вот, пожалуй, и все. Если возникнут вопросы – обращайся в любое время :=)
| Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 09:32 07-04-2005 | Исправлено: aar, 09:36 07-04-2005 |
|