Rivinvaihdot ja kappaleet datan käsittelyssä, luku 3 Erityisongelmia:

FTP-siirto

Tiedostojen siirtämisessä FTP:llä on kaksi eri siirtomuotoa, tekstimuotoinen ("ascii") ja binaarinen (binary, "image").

Binaarinen siirto tarkoittaa datan kopiointia sellaisenaan, ja sitä käytetään mm. kuvatiedostoille, tekstinkäsittelyohjelmien omissa formaateissa oleville dokumenteille sekä käännetyille ohjelmille - ylipäänsä kaikkeen, mikä ei ole tekstiä.

Tekstimuotoinen siirto poikkeaa tästä siten, että FTP-ohjelma ehkä pyrkii tekemään merkkikoodimuunnoksen siitä merkkikoodista, joka lähdekoneessa on käytössä, siihen merkkikoodiin, joka kohdekoneessa on käytössä. Esimerkiksi tällainen siirto Ebcdic-koodia käyttävästä koneesta Unix-koneeseen merkitsisi sitä, että kunkin merkin esitys muuntuu Ebcdicin mukaisesta Asciin tai esim. ISO Latin 1:n mukaiseksi. Asioita hankaloittaa se, että merkkikoodeista on eri versioita käytössä ja että yhden järjestelmän sisälläkin voi olla eri merkkikoodeja.

FTP-ohjelma saattaa yrittää "arvata" esimerkiksi tiedostonnimen perusteella, onko parempi käyttää binaarista vai tekstisiirtoa. Arvaus menee usein pieleen, joten on parempi, että käyttäjä määrää tavan. Esim. suositussa WS_FTP-ohjelmassa on painonapit tätä varten (ASCII ja Binary).

Tekstimuotoisessa siirrossa voi myös rivinvaihtojen esitys muuttua. Jos PC:stä siirretään tekstitiedosto esim. Unix-koneeseen, on syytä käyttää tekstimuotoa silloinkin, kun se ei merkkikoodien takia olisi tarpeen. Jos nimittäin siirretään binaarimuodossa, niin tulos voi olla muutoin normaali mutta esimerkiksi Emacsilla katsottaessa jokaisen rivin lopussa näkyy ^M. Tämä on Emacsin tapa kertoa, että siellä on CR eli "control-M", joka on Unixissa aivan ylimääräinen merkki. Ohjelmasta riippuu, haittaako CR, mutta ei siitä mitään hyötyäkään ole. Jos tiedosto olisi siirretty tekstimuodossa, olisi rivinvaihdon esitys Unixin normaali LF eikä CR LF. Mutta asian voi toki korjata jälkikäteenkin, esimerkiksi Emacsin korvauskäskyllä, kontrollikoodit control-Q:lla "lainaten":

  1. Mene tiedoston alkuun.
  2. Paina ESC-näppäintä ja sitten %-näppäintä; tulostuu Query replace:
  3. Näppäile control-Q control-M ja paina returnia tai enteriä; tulostuu Query replace ^M with:
  4. Paina returnia tai enteriä; tulostuu Query replacing ^M with : (? for help)
  5. Paina !-näppäintä; nyt Emacs suorittaa korvaukset, ja tilariville tulostuu Replaced n occurrences.

Kyseisen muunnoksen voi toki tehdä myös erilaisilla ns. työkaluohjelmilla Unixissa, esim. tr-ohjelmalla näin:
tr -d '\015' < vanhatiedosto > uusitiedosto