#!/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?
$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?
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
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
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
Niin tuohon listaukseen jäi testauksesa käyttämäni tiedostopolku:
$tied = '/home/miksuh/test';
Korvaa tuo sillä alkuperäsellä mikä sun listauksesa oli.