Vstupní soubor je sekvenčně čten, komponenta po komponentě je transformována do tiskové podoby. Provádí se ošetření stránkování, tisk hlaviček a patiček.
Pro rozdělení souborů se používají tyto standardní procedury a funkce:
assign, reset, read, close
Nejjednodušší tiskové programy mají za úkol převedení informací ze sekvenčních souborů do tvaru vhodného pro zobrazení na znakové tiskárně. Bez ohledu na typ znakové tiskárny je třeba si uvědomit, že rozměr papíru je konečný, a to jak do šířky, tak i do délky papíru.
Šířka stránky je dána typem tiskárny, typem použitého písma, standardně je šířka 80/132 znaků na rychlotiskárnách, na jehličkových tiskárnách lze tisknout i více znaků. V grafickém módu lze na tiskárnách tisknout drobnějším nebo naopak zvětšeným písmem. Standardně lze oproti psacímu stroji (60 úhozů na řádku) počítat 72 znaků na běžnou šířku stránky A4 na výšku. Využití větších šířek papíru činí problémy s archivací a přenosem v aktovkách, užívají se i speciální pořadače na rozšířený nebo dvojitý A4 formát. Všeobecně lze maximálně doporučit tisk na standardní formát.
V tiskárnách se používá jednak nekonečný papír, jednak jednotlivé stránky. Nekonečný papír po stranách vybavených perforací, je rozdělen naříznutím na jednotlivé stránky formátu nepatrně většího než A4 na výšku. Toto zvětšení je obvykle užito pro strojové rozdělení a oříznutí na běžný A4 formát. Tiskárny standardně vynechávají na konci stránky a na začátku stránky malý prostor pro toto oříznutí i bez programového řešení. Tuto funkci lze u tiskárny s nekonečným papírem vypnout, např. pro tisk souvislého grafu nebo tabulky dvojité výšky. Standardně se počítá maximální počet řádek na stránce 60-65.
Tisknout lze na čistý nebo předtištěný papír. Při tisku na předtištěný papír (na rychlotiskárně) se většinou jedná o větší počet stran a program musí na začátku vytisknout zkušební stránku(y), dotázat se operátora, zda je tiskárna dobře nastavena. Ten ji eventuálně mechanicky přestaví a potvrdí správné nastavení. Teprve potom lze kvalitně tisknout data do formuláře. Pro tyto obtíže se pro menší počet tištěných stránek dává přednost tisku na čistý papír, kdy se formulář dotiskne k datům. Proto jsou vhodné tiskárny v grafickém modu.
Každou stránku lze rozdělit na tyto hlavní části:
Hlavička se tiskne na začátku každé stránky a obsahuje datum, čas, číslo stránky, jméno projektu, jméno sestavy. Obtížně se tiskne celkový počet stran sestavy, neboť to by vyžadovalo nejdřív tisknout celou sestavu do souboru a spočítat počet stran a potom v druhém průchodu doplnit celkový počet stran na každou stránku.
Vlastní informace se tisknou do jedné nebo více řádek. Více řádek se používá, pokud se informace o určité datové entitě nevejde do jedné řádky, přitom je třeba dát pozor na čitelnost sestavy vhodným rozmístěním datových polí, tiskem prázdných řádek, odsazením v pokračujících řádkách tak, aby byl jasně vidět identifikační údaj.
V setříděných sestavách ekonomických dat se provádí tisk mezisoučtů změně části identifikačního údaje. Například pokud se tisknou ekonomické výkony za závod, provoz, dílnu a stroj, tiskne se jeden mezisoučet při změně dílny za danou dílnu, druhý při změně provozu za daný provoz, při změně závodu za celý závod a nakonec výkon za celou společnost.
Tisk patičky se provádí na konci každé stránky. Je vhodné, aby patičky obsahovaly vysvětlivky a zkratky použité na dané stránce a tím zvýšily čitelnost sestavy i bez manuálu.
Na konci každé sestavy je třeba tisknout zprávu o konci sestavy, např. celou řádku znaků, řetězec „Konec sestavy“ apod. To je nutné zejména tehdy, je-li sestava dělena na samostatné stránky a je třeba mít jistotu, že jde opravdu o konec a neschází náhodou několik řádek na poslední stránce. Dále lze na poslední stránku umístit souhrnné vysvětlivky a sdělení pro uživatele.
Stránkování lze řídit jednoduchým algoritmem. Na začátku programu je třeba do čítače řádek na stránce umístit dostatečně velké číslo. Před každým tiskem tiskové řádky nebo související skupiny otestovat, zda čítač řádek nepřevyšuje maximální počet řádek na stránce. Pokud ano, pak se tiskne patička (s výjimkou 1. tisku), stránkuje se, tiskne se hlavička a nuluje se čítač řádek. Po tisku řádky nebo skupiny řádek se čítač řádek patřičně inkrementuje. Inkrementaci je třeba provést i při tisku mezisoučtů. V konzolové aplikaci se tisk stránky provádí odesláním znaku o ordinální hodnotě 12 (FF, Form Feed).
Následující příklad pro tisk souboru s udaným typem záznam. Jedná se o část úlohy na automatické zpracování telefonního seznamu. Je uveden příklad, vstupní data a ukázka výstupní sestavy. V příkladu je vykomentářováno stránkování.
program teltisk;
{/**
*
* Autor: Kopecek Datum: 2.10.2003
*
* Funkce: Tisk zmen. telefonniho seznamu
*
**/}
uses
sysutils;
const
NAME_LEN = 25;
ADRE_LEN = 45;
NUM_LEN = 8;
MAXRADEK = 6;
type
typ_jmeno = array[1..NAME_LEN] of char;
typ_adresa= array[1..ADRE_LEN] of char;
typ_cislo = array[1..NUM_LEN] of char;
typ_zmen = record
typ : char;
dvoutecka: char;
jmeno : typ_jmeno;
adresa : typ_adresa;
cislo : typ_cislo;
znacik0: char;
znacik1: char;
znacik2: char;
end;
var
strana,radka: integer;
zmen: typ_zmen;
upd: file of typ_zmen;
prn: text;
procedure tiskhlav(var r,s:integer);
begin
{if s > 0 then write(prn,chr(12)); }{strankovani}
r := 0;inc(s);
writeln(prn);
write(prn,
'Projekt: PPVS/teltisk Prehled zmen telefonu Datum: ');
writeln(prn,DateToStr(Date));
write(prn,
'Sestava:01 ===================== Cas: ');
writeln(prn,TimeToStr(Time));
write(prn,
' Strana:',strana:3);
writeln(prn);
writeln(prn,
'typ jmeno adresa cislo');
writeln(prn);
end;
procedure tiskzmen(s:typ_zmen);
var i:integer;
begin
write(prn,s.typ);
write(prn,s.dvoutecka);
for i := 1 to NAME_LEN do write(prn,s.jmeno[i]);
for i := 1 to ADRE_LEN-2 do write(prn,s.adresa[i]); {-2 kvuli sirce papiru}
for i := 1 to NUM_LEN do write(prn,s.cislo[i]);
writeln(prn);
end;
{ Uvodni sekce - otevreni souboru }
begin
assign(upd,'telef.upd');
{$i-}
reset(upd);
{$i+}
if ioresult <> 0 then begin
writeln('Chyba pri otevirani souboru telef.upd');
exit;
end;
assign(prn,'teltisk.prn');
rewrite(prn);
radka := 100;
strana:= 0;
{Hlavni zpracovani}
while not eof(upd) do begin
read(upd,zmen);
if radka > MAXRADEK then tiskhlav(radka,strana);
tiskzmen(zmen);
inc(radka);
end;
{Zaver programu - tisk zaveru sestavy a zavreni souboru}
writeln(prn);
writeln(prn,'KONEC ZPRACOVANI TELEFONNIHO SEZNAMU');
close(prn);
close(upd);
end.
Příklad vstupního souboru:
V:Bond James U Viktora Kozeneho, Bahamy 007 *
R:Klos Hans Cholera 123, Varsava 456258 *
Z:Goldring Heinrich rue Victoire 111, Boneville 456 *
V:Stirlitz Joachim von Unter den Linden, Berlin 45678912*
V:Minarik Pavel kdesi ve skrytu 95175345*
V:Philby Kim Oxford Street, London 1112223 *
V:Wennerstroem Eric Tukholma 5, Stockholm 55544466*
V:Kosmodemjanskaja Zoja Prospekt Lenina 111, Moskva 14725833*
V:Hari Mata rue d'Austerlitz 1, Paris 11122277*
Příklad výstupní sestavy:
Projekt: PPVS/teltisk Prehled zmen telefonu Datum: 10.10.2003
Sestava:01 ===================== Cas: 18:27:27
Strana: 1
typ jmeno adresa cislo
V:Bond James U Viktora Kozeneho, Bahamy 007
R:Klos Hans Cholera 123, Varsava 456258
Z:Goldring Heinrich rue Victoire 111, Boneville 456
V:Stirlitz Joachim von Unter den Linden, Berlin 45678912
V:Minarik Pavel kdesi ve skrytu 95175345
V:Philby Kim Oxford Street, London 1112223
V:Wennerstroem Eric Tukholma 5, Stockholm 55544466
Projekt: PPVS/teltisk Prehled zmen telefonu Datum: 10.10.2003
Sestava:01 ===================== Cas: 18:27:27
Strana: 2
typ jmeno adresa cislo
V:Kosmodemjanskaja Zoja Prospekt Lenina 111, Moskva 14725833
V:Hari Mata rue d'Austerlitz 1, Paris 11122277
KONEC ZPRACOVANI TELEFONNIHO SEZNAMU