lu.se

Datavetenskap

Lunds Tekniska Högskola

Denna sida på svenska This page in English

Laboration 1 - Datarepresentation

Mål

Laborationen fyller två olika syften. En målsättning är att du ska bekanta dig med undervisningsformen datorlaboration och särskilt hur det är att genomföra en datorlaboration tillsammans med en studiekamrat. För att laborationen ska fullt ut fylla sitt syfte ska du därför så långt det är möjligt genomföra den i grupp om två studenter. Den andra målsättningen är att du praktiskt ska få bekanta dig med olika sätt att representera data, särskilt data i textform, samt arbeta med dessa olika former av datarepresentation.

Hjälpmedel

Under laborationens gång behöver ni ha tillgång till information om hur olika teckenstandarder representerar olika skrivtecken.

Hemarbete

  1. Gå till kursens webbsida, http://cs.lth.se/edaa05. Gå till undersidan som handlar om föreläsningar.
  2. Repetera innehållet ur föreläsningsbilderna från föreläsning 3.

Laborationsuppgifter – Teckenkodning

  1. Logga in på er Linuxdator i E-husets källare och skapa en lämplig arbetskatalog på ert konto. Detta görs lämpligen genom att starta ett terminalfönster och ge följande kommandon:

    cd
    mkdir edaa05
    cd edaa05
    mkdir lab1
    cd lab1

  2. Under laborationen kommer vi att arbeta med ett antal exempeltexter lagrade i textfiler. Kopiera dessa till katalogen du nyss skapade:

    cp /usr/local/cs/EDAA05/lab1/* .

    Kontrollera att ni nu har ett antal filer i katalogen:

    ls -l

  3. Kommandot cat (conCATenate) kan användas för att skriva ut innehållet i en textfil på skärmen. Prova att skriva ut innehållet i den första exempelfilen på skärmen:

    cat text1.txt

  4. Exempelfil 2 är en äldre textfil som skapades på det minidatorsystem som användes på D-utbildningen under 80-talet (DEC VAX 8000 med operativsystemet VAX/VMS). Prova att skriva ut textfilen på skärmen:

    cat text2.txt

  5. Det är uppenbarligen något underligt med innehållet i filen! Som ni kunde se av resultatet av kommandot ls -l ovan ska ju filen innehålla 164 tecken, men ändå verkar inget skrivas ut!

    Vi måste ta reda på vad problemet är. På Unix/Linux finns det en praktiskt verktyg vi kan använda när vi vill analysera innehållet i en fil: kommandot od (Octal Dump). Programmet skriver ut innehållet i en fil i ett format som gör att vi kan studera exakt vilka tecken som filen består av. Vi kan använda olika optioner för att styra utskriften från kommandot od. Några vanliga varianter av kommandot är:

    od -c – Visa skrivbara ASCII-tecken som sådana och övriga som escapesekvenser eller oktala tal.
    od -t x1 – Visa alla tecken som hexidecimala koder.
    od -t o1 – Visa alla tecken som oktala koder
    od -t u1 – Visa alla tecken som positiva decimala teckenkoder.

    Ni hittar mer information om od om ni skriver kommandot man od i terminalfönstret.

    Skriv ut textfilens innehåll på skärmen som ASCII och som hexadecimala teckenkoder:

    od -c text2.txt

    od -t x1 text2.txt

    Notera för att senare redovisa för din laborationshandledare svaret på följande frågor:

    a) Vilken teckenkodningstandard har troligen använts på VAX-datorn där filen skapades? Använd referenslänkarna överst på denna sida för att ta reda på teckenkodningen.

    b) Hur representerar VAX/VMS radslut?

  6. Vilken teckenkodning används och hur representeras radslut på er Linuxdator? Använd kommandot od för att ta reda på detta. Ledtråd: Om man inte anger någon fil som argument till od kommer programmet att läsa tecken från tangentbordet i stället för från den angivna filen. Starta od med lämplig option, men utan filnamn och skriv in lämplig text. Avsluta inmatningen med att trycka tangentbordskombinationen CTRL-D, vilket betyder slut på data.

    Notera för att senare redovisa för din laborationshandledare svaret på följande frågor:

    a) Vilken teckenkodningstandard använder Linuxdatorn sig av i terminalfönstret?

    b) Hur representerar Linux radslut?

    c) Diskutera med er handledare: Hur kan du med det du nu vet förklara den underliga utskriften från punkt 4?

  7. För att t.ex. göra enklare översättningar mellan olika teckenkodningar kan man använda kommandot tr (TRanslate characters).

    Kommandot tr läser tecken från standard in (normalt tangentbordet) och skriver resultatet på standard out (normalt terminalfönstret). Tecknen skrivs ut likadana som de lästes in – såvida inte tecknet finns med i den sträng som utgör det första argumentet till tr. Om så är fallet ersätts det med det tecken som står på motsvarande position i strängen som utgör det andra argumentet till tr. Prova följande exempel för att förstå principen:

    tr "abc" "def"

    Skriv in text från tangentbordet och se hur alla förekomster av "a", "b" eller "c" byts ut mot "d", "e" respektive "f". Avsluta inmatningen med CTRL-D.

    För att ange tecken som inte är direkt skrivbara, som radslutstecken och liknande, i argumenten kan man antingen skriva det som ett "\" direkt följt av tre oktala siffror som anger tecknets teckenkod, eller – för vissa vanliga specialtecken – ange speciella escapesekvenser. Kommandot tr "abc" "def" kan alltså också skrivas som tr "\141\142\143" "\144\145\146". Se kommandots man-sida för att ta reda på vilka de speciella escapesekvenserna är (för radslut och liknande):

    man tr

    För att läsa in texten från en fil i stället för från tangentbordet kan ni lägga till tecknet "<" följt av filnamnet sist på kommandoraden. Prova till exempel att byta ut alla "e" mot "X" i den första exempelfilen:

    tr "e" "X" < text1.txt

    Skriv ihop en kommandorad som med hjälp av tr översätter alla radslutstecken  i filen text2.txt till den kodning som används i terminalfönstret på Linux. Prova ert kommando och notera dess utseende för senare redovisning för din laborationshandledare.

    Kan ni skriva ut texten i filen på skärmen nu?

  8. Skriv ut texten i filen text3.txt på skärmen:

    cat text3.txt

    Vilken teckenkodning har använts i denna fil? Använd kommandot od för att se hur svenska tecken representeras och matcha mot tabellerna bakom referenslänkarna. Notera svaret för att senare redovisa för din laborationshandledare.

  9. Skriv ut texten i filen text4.txt på skärmen:

    cat text4.txt

    Notera för att senare redovisa för din laborationshandledare svaret på följande frågor:

    a) Vilken teckenkodningstandard har använts i filen? Använd kommandot od för att se kodningen!

    b) Vad är syftet med de tre första tecknen i filen?

    c) Hur representeras radslut i filen?

    d) Under vilket operativsystem kan vi misstänka att denna fil skapats (var hittar vi sådana radslut)?

  10. För att konvertera radsluten i en fil mellan Unix- och Windowsformat finns kommandona fromdos respektive todos i Linux. Använd man-sidan för kommandona för att ta reda på hur man kan använda dem för att konvertera filen text4.txt till Unix-format.

    Utför konverteringen!

  11. Programmet iconv är ett praktiskt verktyg för att i Unix/Linux konvertera en textfil från en teckenkodning till en annan. Läs man-sidan för kommandot för att ta reda på hur man använder kommandot:

    man iconv

    För att ta reda på namnen på de teckenkodningar som stöds, skriv:

    iconv --list

    Ja, det finns faktiskt så många möjliga teckenkodningar därute!

    Skriv ihop en kommandorad som med hjälp av iconv konverterar innehållet i filen text3.txt till den teckenkodning som används i terminalfönstret på Linux och skriver ut det på skärmen. Prova ert kommando och notera dess utseende för senare redovisning för din laborationshandledare.

Laborationsuppgifter – Datakomprimering

 Uppgift för er som har tid över.

  1. I detta moment ska vi undersöka hur väl olika typer av data lämpar sig för komprimering. Vi gör det genom att ni provar att komprimera ett antal olika filer och för var och en räknar ut hur mycket mindre den komprimerade filen blev relativt originalfilen. Vi använder oss av programmet gzip för att komprimera filerna. För var och en av filerna i listan utför ni följande kommando:

    gzipfilnamn

    Varje fil kommer att ersättas med en fil filnamn.gz i er arbetskatalog. Använd kommandot ls -l för att ta reda på storleken för originalfilen respektive den komprimerade filen och räkna ut kompressionsgraden, dvs med hur många procent vi lyckades komprimera filen.

    Filer att komprimera (dessa borde ha kopierats till er arbetskatalog i början av laborationen):

    WHATSNEW – stor textfil
    facade.jpg – JPEG-bild
    xvcg – körbart program
    algodat-eclipse-config.zip – redan komprimerad fil (annat kompressionsprogram)
    automatic_control.wav – ljudfil (Institutionslåt för Reglerteknik)

    Svara på följande frågor och notera svaren för senare redovisning för er laborationshandledare:

    a)
    Vilken fil gick att komprimera mest respektive minst?

    b) 
    Varför går vissa av filerna ovan att komprimera mer än andra?

  2. Redovisa för er laborationshandledare och radera därefter de komprimerade filerna för att spara plats på ert datorkonto.