12. marts 2004 - 14:20Der er
20 kommentarer og 1 løsning
læs og skriv til en fil.
I nedenstående kode skal der læses fra filen liste.txt. Brugeren skal indtaste et navn, som så tjekkes mod de navne, der er på listen. Hvis navnet er på listen, skal der udskrives, at det er godkendt og vice versa. Men hvordan får jeg læst fra liste.txt? Desuden skal resultatet udskrives til en fil, fx output.txt. Sorry, men jeg har sikkert overset et eller andet meget simpelt...
#!/usr/bin/perl
$filename = "liste.txt";
open $inputstream, "<$filename";
print "Indtast et navn: "; $x = readline(stdin);
if ($x = liste.txt) { "Navnet xxx er godkendt. \n"; } else { "Navnet xxx er ikke godkendt. \n"; }
for det første så skal du bruge "eq" til at sammenligne strenge i perl
dertil kommer at du kun har åbnet filen for læsning - men du skal køre den i en løkke ala
use FileHandle; my $filename = "liste.txt"; my $filehandle = new FileHandle ("< $filename");
print "indtast navn:"; my $x=readline(stdin); my $line; while (<$fh>) { chomp; $line = $_; if ($x eq $line) { print "navnet $x er godkendt \n"; } else { print "navnet $x er ikke godkendt\n"; }
hov dels en fejl og for at få resultatet i en fil:
use FileHandle; my $filename = "liste.txt"; my $filename = "output.txt"; my $fh = new FileHandle ("< $filename"); my $oh = new FileHandle ("> $outfile");
print "indtast navn:"; my $x=readline(stdin); my $line; while (<$fh>) { chomp; $line = $_; if ($x eq $line) { print $oh "navnet $x er godkendt \n"; } else { print $oh "navnet $x er ikke godkendt\n"; }
use strict; use FileHandle; my $filename = "liste.txt"; my $outfile = "output.txt"; my $fh = new FileHandle ("< $filename"); my $oh = new FileHandle ("> $outfile");
print "indtast navn:"; my $x=readline(stdin); my $line; while (<$fh>) { chomp; $line = $_; if ($x eq $line) { print $oh "navnet $x er godkendt \n"; } else { print $oh "navnet $x er ikke godkendt\n"; } } exit 0;
Desværre, stadig ikke. Den siger "Global symbol "$outfile" requires explicit package name" og "Bareword "stdin" not allowed while "strict subs in use". Hvad det så en betyder.. kan nr. 2 rettes ved at slette strict og my?
ok, nu får jeg ingen fejlmeddelelser, men til gengæld er det eneste der sker, at den siger "tryk på en vilkårlig tast" efter jeg har tastet navnet ind...
use strict; use FileHandle; my $filename = "liste.txt"; my $outfile = "output.txt"; my $fh = new FileHandle ("< $filename"); my $oh = new FileHandle ("> $outfile");
print "indtast navn:"; my $x=readline(stdin); my $line; while (<$fh>) { chomp; $line = $_; if ($x eq $line) { print $oh "navnet $x er godkendt \n"; print "navnet $x er godkendt \n"; } else { print $oh "navnet $x er ikke godkendt\n"; print "navnet $x er ikke godkendt\n"; }
use strict; use FileHandle; my $filename = "liste.txt"; my $outfile = "output.txt"; my $fh = new FileHandle ("< $filename"); my $oh = new FileHandle ("> $outfile");
my $found = 0;
print "indtast navn:"; my $x=readline(stdin);
while (<$fh>) { if ($x eq $_) { $found =1; } }
if ($found == 1) { print $oh "navnet $x er godkendt \n"; print "navnet $x er godkendt \n"; } else { print $oh "navnet $x er ikke godkendt\n"; print "navnet $x er ikke godkendt\n"; }
use strict; use FileHandle; my $filename = "liste.txt"; my $outfile = "output.txt"; my $fh = new FileHandle ("< $filename"); my $oh = new FileHandle ("> $outfile");
my $found = 0;
print "indtast navn:"; my $x; chomp($x=<STDIN>);
while (<$fh>) { chomp; if ($x eq $_) { $found =1; } }
if ($found == 1) { print $oh "navnet $x er godkendt \n"; print "navnet $x er godkendt \n"; } else { print $oh "navnet $x er ikke godkendt\n"; print "navnet $x er ikke godkendt\n"; }
hmm, jeg sidder godt nok på en windows, men det skulle da ikke gøre så meget i denne forbindelse. Det virker som om, den ikke kan læse ordentligt fra liste-filen... Men det kan være, jeg overser noget på min egen computer... Men tak for hjælpen i hvert fald :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.