Miten sekamerkkikoodatut tiedostot pelastetaan turvallisesti eräajossa: miksi rakensin tämän työkalun
Johdanto
Rakensin tämän työkalun yhdestä yksinkertaisesta syystä. Saman asian tekeminen käsin joka kerta oli liian työlästä.
Sisäisten järjestelmien CSV:t, Excelistä muunnetut CSV:t sekä Linuxin, Windowsin tai tietokantojen ulostulot. Kun lähde vaihtuu, myös merkistökoodaus, rivinvaihdot ja BOM vaihtelevat.
- Luulit UTF-8:ksi, mutta se olikin Shift_JIS
- Luulit LF:ksi, mutta se olikin CRLF
- Osa järjestelmistä toimii vain BOM:n kanssa, osa hajoaa BOM:iin
Tarkistus ja muunnos pelkällä silmämäärällä ei skaalaudu. Siksi tein työkalun, joka ottaa vastaan tiedostot mistä tahansa lähteestä ja yhtenäistää ulostulon kohdejärjestelmän vaatimuksiin.
Todellinen ongelma ei ole yksi rikkoutunut tiedosto
Jos yksi tiedosto hajoaa, sen saa yleensä korjattua. Vaikea tilanne on, kun 10 tai 100 tiedostoa tulee yhtä aikaa eri lähteistä.
Lisäksi jokaisella kohdejärjestelmällä on oma käsitys “oikeasta” muodosta.
- Järjestelmä A hyväksyy vain UTF-8 ilman BOM:ia
- Järjestelmä B toimii vakaammin UTF-8 + BOM -muodossa
- Järjestelmä C olettaa Shift_JIS:n; UTF-8 näyttää luettavalta, mutta tuonti epäonnistuu
Tällöin yleisohje “muunna kaikki UTF-8:aan” ei auta. Tarvitaan turvallinen ja toistettava toimintatapa kohteen mukaan.
Mitä tällä työkalulla halusin saavuttaa
Vain kolme periaatetta:
- Hyväksy tiedostot mistä tahansa lähteestä
- Muunna kohteen tuontivaatimusten mukaan
- Älä lisää virheitä edes eräajossa
Tämä ei ole muunnostekniikan esittely, vaan operatiivisen kitkan vähentämistä.
Menettely, jota käytän oikeasti
1. Päätä ensin ulostulon spesifikaatio
Aloita ulostulosta, älä syötteestä. Lukitse nämä kolme:
- Koodaus (UTF-8 / Shift_JIS jne.)
- Rivinvaihto (LF / CRLF)
- BOM (on / ei)
Jos tämä jää epäselväksi, tulos vaihtuu tekijän mukaan.
2. Pilko käsiteltävä aineisto pieniin eriin
Älä aja kaikkea kerralla. Jaa järjestelmän, ajanjakson tai tiedostotyypin mukaan ja aloita pienillä erillä.
Syy: epäonnistumisessa rollback on mahdollinen. Koko volyymin one-shot on nopea vain onnistuessaan.
3. Lukitse ehdot ja aja erämuunnos
Merkkikoodausmuuntimessa aseta ehdot kohdekohtaisesti ja pidä ne samoina. Älä muuta asetuksia kesken ajon. Toistettavuus on olennaista.
4. Älä hyväksy tulosta pelkän silmäilyn perusteella
“Tiedosto aukeaa, siis ok” on monen virheen alku. Vähintään tarkista:
- Rivimäärä ennen/jälkeen on sama
- CSV/TSV-sarakemäärä ei rikkoudu
�(korvausmerkki) ei lisäänny- Avainsarakkeiden (ID/koodi) pituus ja merkkityyppi säilyvät
Jos tarkistus ei läpäise, älä etene tuontiin.
BOM ei ole ideologiaa, vaan vastapuolen vaatimus
Keskustelu BOM vai ei BOM on käytännössä usein hyödytöntä. Ratkaisevaa on, miten vastapuolen järjestelmä lukee tiedoston.
- Jos vastapuoli on vakaa BOM:n kanssa, tuota BOM:n kanssa
- Jos BOM rikkoo, tuota ilman BOM:ia
Aseta etusijalle “muoto, joka ei riko vastapuolta” eikä “teoreettisesti oikea muoto”. Näin operointi toimii.
Työkalun arvo ei ole itse muunnoksessa
Todellinen arvo on kahdessa asiassa:
- Päätökset eivät riipu henkilöstä
- Toistuvien tarkistusten kustannus pienenee
Koodausvirheitä ei voi nollata täysin. Mutta samojen virheiden toistamisen voi lopettaa. Siksi tein työkalun, joka ottaa kaiken vastaan ja palauttaa käyttötarkoitukseen sovitetun tuloksen.
Yhteenveto
Tätä työkalua ei tehty idealistisesta teoriasta. Se tehtiin poistamaan toistuva ja rasittava koodauksen säätö arjen työstä.
Vastaanota eri lähteistä tulevat tiedostot, sovita koodaus/rivinvaihto/BOM kohteeseen ja palauta yhtenäinen ulostulo. Pelkkä tämän virran automatisointi helpottaa operointia merkittävästi.
Mojibaken käsittely ei ole tahdonvoimakysymys. Se pitää muuttaa toistettavaksi prosessiksi, jolla kuka tahansa saa saman tuloksen. Vasta silloin voidaan puhua turvallisesta eräpelastuksesta.