Tekstbestanden en binaire bestanden
Teksbestanden en binaire bestanden
We stellen ons drie vragen:
- Wat zijn tekstbestanden?
- Wat is het verschil tussen tekstbestanden en binaire bestanden?
- Waarom kunnen we zeggen dat de meeste bestandstypes ongestructureerde data bevatten?
Sorry, je begrijpt het verkeerd. Met tekstbestanden bedoelen we in dit geval niet de documenten die je intikt in MS Word of LibreOffice. Uiteraard hebben ze wel wat elkaar gemeen. Een bestand uit MS Word is een tekstverwerkingsbestand. Als je het bewaart op je harde schijf, wordt het een binair en/of een gecomprimeerd bestand. Als we het over tekstbestanden hebben in de titel, dan doelen we op "platte tekst"-bestanden. Bestanden die enkel karakters bevatten die je op een toetsenbord kan intikken, maar geen opmaak of afbeeldingen. Als data-expert in spe is het van bijzonder groot belang dat je weet wat we met platte tekst bedoelen. Je zal als data-analist sowieso in teksteditors met platte tekstbestanden werken. Wat dit precies is, lees je zo meteen...
ASCII
De computer bewaart alle bestanden binair, als een reeks nullenen enen, want dat is de enige code die de meeste moderne computers verstaan. Elk bestand bestaat uit een vaak erg lange, maar toch eindige reeks nullen en enen. De computer bewaart ze op een opslagmedium (harde schijf, USB-stick...).Terwijl ik deze zin intik op mijn toetsenbord, vertaalt de computer de toetsaanslagen in nullen en enen, in bits die op hun beurt gegroepeerd zijn in bytes. Eén byte is een"groepje" van acht bits, de letter a vertaalt de computer bijvoorbeeld als de byte 01100001. In decimale getallen is dit 97. Elke toets en ook combinatie van toetsen(bijvoorbeeld SHIFT + A voor de hoofdletter A) krijgt zo een byte toegewezen. Vermits één byte uit 8 bits bestaat, beschikken we over 28 combinaties (2 tot de achtste macht), want elke bit kan ofwel 1 ofwel 0 zijn.In totaal kan je op die manier 256 combinaties vormen, of alle combinaties tussen00000000=0 en 11111111= 255
Hiervoor zijn natuurlijk afspraken gemaakt. In principe kan je om het even welk toetsenbord op om het even welk digitaal systeem dat tekstinvoer toelaat, aansluiten. De toetsaanslagen worden automatisch herkend. Dit komt omdat ze zo goed als allemaal ASCII ondersteunen. ASCII(American Standard Code for Information Interchange) is een standaard om Latijnse letters, cijfers, leestekens en eenaantal andere tekens en een reeks stuurcodes te koppelen aan een getal.De ASCII-tabel is een tweedimensionale rij of tabel. Zoek het gewenste teken en neem de binaire code die in de kopvan de rij is aangeduid. Plak daarachter vervolgens de inhoud van de kolomkop. Een spatie bestaat dus uit 0010gevolgd door 0000 of samengevoegd0 0 1 0 0 0 0 0, wat overeenkomt met het decimale getal 32.
In een teksteditor kan je enkel ASCII-tekens (of UTF-8-karakters, waarover later meer) invoeren. Je kan er je tekst niet mee opmaken of er bijvoorbeeld foto's aan toevoegen. Ik hoor je al denken: wat is daarvan het nut?Het grote voordeel is dat dit soort bestanden perfect uitwisselbaar zijn. Je hebt er geen speciale software voor nodig om de inhoud van die documenten te kunnen lezen.Een eenvoudige editor zoals Windows Kladblok of AdobeBrackets volstaan om het bestand te openen.Programmeercode of webpagina's kan je perfect in een editor openen, omdat ze enkel karakters kunnen opnemen die ondersteund worden door de ASCII- of UTF-standaarden.
Je hebt het misschien al meegemaakt. Je kopieert eentekst van Wikipedia en je plakt het in een MS Worddocument. Ook alle links die in de webpagina zaten en de opmaak, zijn mee gekopieerd. Wil je dit vermijden, dan plak je de tekst eerst in een teksteditor. Op die manier heb je enkel de "platte tekst".
UNICODE en UTF-8
ASCII werkt zoals je merkt perfect, maar pakweg Arabieren,Chinezen en Japanners, kortom iedereen die geen standaard (indo) Europees georiënteerde taal schrijft, bleef met ASCII wel aardig op zijn honger zitten. Er bestonden geen binaire codes voor het Arabisch of Chinees (eenChinese Jan met de pet kent ongeveer 7000 verschillen de karakters). Het recente Hanyu Cidian-Chinees beslaat zelfs56.000 karakters! Uitbreidingen op de de ASCII-tekenset waren noodzakelijk. De noodzaak om alle andere taalsystemen en codes op te nemen leidde tot UNICODE.De UNICODE-tekenset maakt het gebruik van alle mogelijke denkbare alfabetten en schriftsystemen in één document mogelijk. Niet dat je dit vaak nodig hebt, want je schrijft of tikt niet alle dagen in het Pau Cin Hau, het Bamum of Sharada, maar het gebruik van dingbats, wiskundige symbolen enz. kom je al wat vaker tegen. UNICODE is eenISO-standaard.De meest bekende tekenset van UNICODE is UTF-8 (8 bitUnicode Transformation Format). Moderne webpagina's zijn volgens deze norm gecodeerd waardoor ze om het even welk symbool standaard kunnen weergeven.
Binaire bestanden
Ook al bieden ASCII-bestanden heel wat voordelen, toch is het niet altijd de beste manier om bestanden te bewaren.Wanneer men het over BINAIRE bestanden heeft, dan gaat het over bestanden die niet volgens de ASCII-tekenset zijn gecodeerd. Er bestaan meerdere goede redenen om dit niet te doen.Voor het bewaren van de meeste bestanden zoals foto's, documenten uit een tekstverwerker, presentaties, films...gebruikt men een "binaire codering". ASCII zou in dat geval leiden tot te grote bestanden.Heel vaak gebruikt men bovendien compressietechnieken om bestanden een stuk kleiner te maken zodat ze minder ruimte in beslag nemen. Denk maar eens hoe snel je smartphone vol is, als je alle dagen foto's of filmpjes maakt.
Waarom geen ASCII?
Een voorbeeld: een letter "a" (niet de hoofdletter) op je toetsenbord vertaalt zich als de byte 01100001. Eén teken wordt vervangen door een reeks van 8 nullen en/of enen. Eencomputer gebruikt in dit geval dus 8 bits waar een mens slechts één teken nodig heeft. Dit geldt ook voor de cijfers op je toetsenbord. Tik je een 0, dan wordt dit volgens de ASCII-regels 00110000 en een 1 wordt 00110001. Het getal 256behandelt hij volgens de ASCII-tekenset als 3 afzonderlijkeASCII-karakters of 3 bytes en ziet er dan als volgt uit:00110010 00110101 00110110.
Een nogal gekke manier van doen als we enkel getallenwillen bewaren, want intern maakt ASCII reeds de vertaalslag naar decimale cijfers door aan elke toets of karakter eendecimaal getal te koppelen.Getallen kunnen veel eenvoudiger en compacter bewaard worden door ze niet als een reeks afzonderlijke karakters, maar als één geheel, als een echt getal te bewaren. 255 zal er dan uitzien als 1111 1111.Eén enkele byte 256 kan verschillende waardes bevatten.Gaan we naar 4 bytes dan krijgen we 4 miljard mogelijke combinaties. Het getal 4000000000 (4 miljard) zou op die manier slechts 4 bytes in beslag nemen.
Bewaren we het alsASCII, dan zou het 10 bytes aan ruimte oppeuzelen.Om die reden gebruikt men heel wat vormen van codering.Het zou ronduit dom zijn om bijvoorbeeld een afbeelding als een reeks ASCII-waardes (weliswaar binair gecodeerd) te bewaren. Een afbeelding van 1024 bij 768 pixels telt in totaal786432 pixels. Vermits elke pixel bestaat uit een mix van 256waardes rood, 256 waardes groen en 256 waardes blauw, dan zou het gecodeerd volgens de ASCII-tekenset onwaarschijnlijk veel ruimte in beslag nemen.