Rivinvaihdot ja kappaleet datan käsittelyssä, luku 1 Tausta: miten kirjavuuteen päädyttiin:

Tekstinkäsittelyohjelmien käytännöt

Aluksi tekstin kirjoittamiseen ja muokkaamiseen tietokoneella käytettiin suhteellisen yksinkertaisia ohjelmia, editoreita (text editor), joita edelleenkin käytetään laajasti mm. pienten tekstien kirjoittamiseen sekä ohjelmointiin yms. Myöhemmin kehitettiin ohjelmia varsinaiseen tekstinkäsittelyyn, text processing tai word processing. Tällaisista ohjelmista ovat nykyisin kai tunnetuimpia MS Word, WordPerfect ja WordStar. Raja editorin ja tekstinkäsittelyohjelman, word processor, välillä on osittain aika häilyvä. Käytännössä tekstinkäsittelyohjelmaa käytetään, kun halutaan saada paperille tulostettava teksti tyylikkäässä muodossa. Teknisesti tärkeänä erona on useimmiten se, että editori tallentaa tekstin "pelkkänä tekstinä" (plain text) kun taas tekstinkäsittelyohjelma käyttää omaa erityistä (ohjelmasta ja jopa sen versiosta riippuvaa) dataformaattiaan, jossa on mukana myös tietoa käytetyistä kirjasinlajeista ym.

Tekstinkäsittelyohjelmiin on yleisesti toteutettu automaattinen rivinvaihto (automatic line wrap) siten, että käyttäjä voi kirjoittaa tekstiä jatkuvasti, huolehtimatta rivinvaihdoista. Ohjelma vaihtaa automaattisesti riviä, kun riville ei mahdu enempää; tällöin se käyttää jotain valmiiksi asetettua tekstin enimmäisleveyttä, joka on yleensä käyttäjän säädeltävissä.

Tietokoneiden käyttäjistä monet ovat tottuneet tähän niin, että hämmästyvät, jos asiat jossain tilanteessa eivät toimikaan sillä tavoin. Ja toisaalta monet toisenlaisiin ohjelmiin tottuneet ovat tottuneet painamaan enter-näppäintä aina, kun rivi uhkaa "tulla täyteen" eli niin pitkäksi kuin ohjelman ikkunaan mahtuu.

Luonnollinen ajatus on, että tällaisia automaattisia rivinvaihtoja ei tarvitse eikä ole syytäkään tallentaa tiedostoon. Kun tiedoston sisältämää tekstiä myöhemmin katsellaan, voi käytettävä ohjelma uudestaan jakaa sen eri riveille, mahdollisesti aivan erilevyiseksi. Vain tieto tekstin jakautumisesta kappaleisiin on tärkeää tallentaa tiedostoon; kappaleen sisällä ei tarvitse olla valmiita rivinvaihtoja. Tämän sinänsä hyvän idean toteuttamisessa tehtiin eräs onneton ratkaisu, jonka seurauksista kärsimme vielä pitkään: kappaleiden erottimeksi otettiin koodi, joka jo oli käytössä rivinvaihtona monissa muissa järjestelmissä.

Kun aiemmin rivinvaihtoja tarkoittaneita koodeja ruvettiin käyttämään kappaleen vaihdon merkkeinä, otettiin muita kontrollikoodeja rivinvaihtomerkeiksi. Esimerkiksi MS Wordissä VT-koodi, joka alkujaan tarkoitti pystysuoraa sarkausta (vertical tabulation), otettiin rivinvaihdon merkiksi. Tämä ja muunlaiset valinnat aiheuttivat vielä lisää kirjavuutta.

Ei tarvitse kuvitella, millaista sotkua tulee, kun yhdessä ohjelmassa CR tarkoittaa rivinvaihtoa ja toisessa kappaleen vaihtoa. Sellaiseen törmätään ATK-alalla jatkuvasti. Esimerkiksi jos MS Wordillä kirjoitettu teksti halutaan tallentaa "pelkkänä tekstinä", esim. käsiteltäväksi jollakin editorilla taikka muulla ohjelmalla, joka ei tunne Wordin omaa tiedostomuotoa, niin (Save As -valikon) vaihtoehto "Text Only" merkitsee sitä, että kustakin kappaleesta tulee yksi pitkä rivi. Vaihtoehto "Text Only with Line Breaks" tekee kustakin ruudulla näkyvästä rivistä yhden rivin tiedostoon. Tällöinkin rivinpituus voi olla sopimaton jatkokäsittelyä varten.

Käänteinen ongelma voi syntyä, kun tekstidataa siirretään editorilla tehdystä tiedostosta tekstinkäsittelyohjelmaan. Jos tiedostossa on rivien välissä rivinvaihtomerkit, jotka tekstinkäsittelyohjelma tulkitsee kappaleenvaihdoiksi, täytyy tehdä sopiva muunnos. Sitä ei kannata ruveta tekemään "käsin" eli poistamalla yksitellen jokainen rivinvaihto, ellei ole ihan pakko, koska siinä menee hermot ja tulee virheitä. Tarvittava muunnoshan on aika yksinkertainen ja siten ohjelmoitavissa: pitää korvata kaksi peräkkäistä rivinvaihtoa yhdellä rivinvaihdolla ja muutoin jokainen rivinvaihto välilyönnillä. (Tämä olettaen, että tekstissä ole jaettu sanoja eri riveille, mikä toisi omat ongelmansa.)

Yhtä dokumenttia tarkasteltaessa voidaan yleensä päätellä, mitä esimerkiksi CR-koodi siinä tarkoittaa. Kappaleethan ovat yleensä sen verran pitkiä, että jos kukin kappale on yhtenä rivinä, sen huomaa. Mutta yleisiä datankäsittelyohjelmia ja -tapoja on hankala tehdä niin, että ne osaavat jotenkin järkevästi käsitellä tekstiä, oli CR sitten rivien erotin tai kappaleenvaihto. Raportti Unicode Newline Guidelines sisältää tätä koskevia suosituksia, mutta ne ovat pakostakin "heuristisia" eli sisältävät sen, että kun ei voi tietää, täytyy arvata - mieluiten siten, että väärästä arvauksesta koituva haitta on mahdollisimman pieni. Aiheesta kertoo lisää kirjoitukseni Unicode line breaking rules: explanations and criticism.