Perl ja tiedoston lukeminen

#!/usr/bin/perl
$tied = '/home/matti/p/asm1.s';
open (INFO, $tied);   #avataan tiedosto luettavaksi
#muuttuja INFO sisältää koko tiedoston kokoisen merkkijonon.
print ;      #tulostaa koko (teksti)tiedoston sisällön
read INFO,$c,1;    #pitäisi lukea yksi tavu tiedostokahvasta INFO muuttujaan $c. Mutta ei lue.
print $c; #ei tulosta mitään.
close (INFO);      #suljetaan tiedosto

Ylläoleva ei anna mitään virheilmoituksia.

Miten lukea yksittäinen tavu (8 bittiä) tiedostosta?
4336
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

koitas laittaa sulkuihin
read (INFO,$c,1);

lisäksi kannattaa aina käyttää parametriä -w vielä koodin ollessa kesken tai kun on jotain vikaa

#!/usr/bin/perl -w

Äänestä
  • Kokeilin tota itse laita näin niin toimii.
    Siis älä tulusto tossa välissä totä INFOa kokonaan.

    #!/usr/bin/perl
    $tied = '/home/matti/p/asm1.s';
    open (INFO, $tied); #avataan tiedosto luettavaksi
    #muuttuja INFO sisältää koko tiedoston kokoisen merkkijonon.
    #print ; #tulostaa koko (teksti)tiedoston sisällön
    read INFO,$c,1; #pitäisi lukea yksi tavu tiedostokahvasta INFO muuttujaan $c. Mutta ei lue.
    print $c; #ei tulosta mitään.
    close (INFO); #suljetaan tiedosto

    Äänestä

Ongelmana tuossa on se, että kun tiedoston tulostaa kokonaan ennen tavun lukemista, niin sillon avattua tiedostokahvaa vastaava tiedosto-osoitin osottaa tiedoston loppuun, eikä sieltä lopusta tietenkään ole enää mitään luettavissa. Jos tiedoston haluaa tulostaa kokonaan ja sitten lukea tavun, niin tiedosto-osoitin pitää eka siirtää takas tiedoston alkuun, tai muuhun haluttuun kohtaan. Eli näin:

#!/usr/bin/perl
$tied = '/home/miksuh/test';
open (INFO, $tied); #avataan tiedosto luettavaksi
#muuttuja INFO sisältää koko tiedoston kokoisen merkkijonon.
print ; #tulostaa koko (teksti)tiedoston sisällön
seek(INFO, 0, 0); #siirtää tiedosto-osoittimen tiedoston alkuun
read INFO,$c,1; #lukea yhden tavun tiedostokahvasta INFO muuttujaan $c.
print $c; #ei tulosta mitään.
close (INFO); #suljetaan tiedosto

Äänestä
  • Niin tuohon listaukseen jäi testauksesa käyttämäni tiedostopolku:

    $tied = '/home/miksuh/test';

    Korvaa tuo sillä alkuperäsellä mikä sun listauksesa oli.

    Äänestä

Kommentoi aloitusta


Matti.W kirjoitti:

#!/usr/bin/perl
$tied = '/home/matti/p/asm1.s';
open (INFO, $tied);   #avataan tiedosto luettavaksi
#muuttuja INFO sisältää koko tiedoston kokoisen merkkijonon.
print ;      #tulostaa koko (teksti)tiedoston sisällön
read INFO,$c,1;    #pitäisi lukea yksi tavu tiedostokahvasta INFO muuttujaan $c. Mutta ei lue.
print $c; #ei tulosta mitään.
close (INFO);      #suljetaan tiedosto

Ylläoleva ei anna mitään virheilmoituksia.

Miten lukea yksittäinen tavu (8 bittiä) tiedostosta?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu