Jo, dělení omezením délky stringu je dobrý nápad.
Ten byte v závorce říká, že to pole má mít tolik prvků, kolik je rozsah typu byte. Technicky je to v pořádku, ale taky bych to napsal jinak :-).
Read nebo Readln? Věčné dilema :-). Radši sem hodím kompletní souhrn toho, co která dělá, s ohledem na načítaný typ:
Read(string) - čti ze souboru a ukládej do proměnné v parametru jednotlivé znaky tak dlouho, dokud nenarazíš na konec řádku, konec souboru nebo konec proměnné, do které načítáš.
Čili: čtení se zarazí o konec řádku (Eoln(soubor) bude true) a bude tam čekat a vracet prázdné řetězce tak dlouho, dokud se nepoužije Readln.
Readln(string) - jako Read(string) a potom přeskočí zbytek aktuálního řádku (je-li nějaký) a skočí na začátek dalšího.
Čili: jakmile zavolám Readln, přijdu z aktuálního řádku o všechno, co se nevešlo do proměnné v parametru.
Read(číslo) - čti a přeskakuj všechny mezery a konce řádků, dokud nenarazíš na jiný znak; čti znaky až do nejbližší mezery nebo konce řádku; načtenou sekvenci zkus převést na číslo; jestli OK, ulož ji do proměnné v parametru, jinak hoď I/O chybu "Invalid numeric format".
Čili: tímhle můžu načíst třeba celý soubor, ale musí v něm být čistě jenom čísla a nic jiného.
Readln(číslo) - začátek stejný jako u Read(číslo) a nakonec přeskoč celý zbytek řádku, na kterém to číslo bylo, a nastav se na začátek dalšího.
Čili: tímhle můžeme přečíst jenom první číslo na každém řádku, ale jestli za tím číslem na řádku budou nějaká nečíselná data, program mi nespadne.
Na konci souboru (když Eof(soubor)=true) vrací stringové Read a Readln prázdný řetězec, číselné nulu (bez I/O chyb).