Avatar billede svanhovd Nybegynder
10. oktober 2002 - 15:43 Der er 6 kommentarer og
1 løsning

STDIN og STDOUT

Jeg har følgende script :

: # *-*-perl-*-*
  eval 'exec perl -w -S  $0 ${1+"$@"}'
    if 0;  # if running under some shell

die "Usage: $0 infilename outfilename\n" if $#ARGV < 1;

($infilename, $outfilename) = @ARGV;

open(INFILE,  "<$infilename");  # open for reading
open(OUTFILE, ">$outfilename"); # open for writing

# read one line at a time:
while (defined($line=<INFILE>)) {
    ($x, $y) = split(' ', $line); # extract x and y value
    $fy = myfunc($y);  # transform y value
    printf(OUTFILE "%g  %12.5e\n", $x, $fy);
}
close(INFILE); close(OUTFILE);

sub myfunc {
    my ($y) = @_;
    if ($y >= 0.0) { return $y**5.0*exp(-$y); }
    else          { return 0.0; }
}

Hvordan ændrer jeg scriptet, så det benytter STDIN og STDOUT istedet for eksplesit at lese/skrive til filen?

Jeg har forstået det sådan, at det (ideelt set), kun skulle behøves at ændre i liniene :

open(INFILE,  "<$infilename");  # open for reading
open(OUTFILE, ">$outfilename"); # open for writing
Avatar billede thomasledet Nybegynder
10. oktober 2002 - 15:53 #1
det lyder rimeligt... STDIN og STDOUT er bare filehandles som sådan... og kan bruges ganske som var det filer...
Avatar billede svanhovd Nybegynder
10. oktober 2002 - 16:00 #2
OK, men hvad er syntaxen? :-)

Det er tydeligvis ikke nok kun at ændre "open(INFILE,  "<$infilename");" til "STDIN(INFILE,  "<$infilename");"
Avatar billede thomasledet Nybegynder
10. oktober 2002 - 16:19 #3
erhm... slet linierne

open(INFILE,  "<$infilename");  # open for reading
open(OUTFILE, ">$outfilename"); # open for writing

og brug i stedet STDIN, hvor du ser INFILE og STDOUT, hvor du ser OUTFILE... hvis jeg har forstået dit spørgsmål korrekt...
Avatar billede thomasledet Nybegynder
10. oktober 2002 - 16:20 #4
linien

close(INFILE); close(OUTFILE);

bør også slettes ved samme anledning
Avatar billede svanhovd Nybegynder
10. oktober 2002 - 16:52 #5
linjen while "(defined($line=<INFILE>)) {", må jeg vel ændre på en måde, så scriptet ved hvornår det skal behandle input fra STDIN.

OK, dårlig forklaret, men jeg håper du forstår hvad jeg mener.
Avatar billede thomasledet Nybegynder
10. oktober 2002 - 18:16 #6
prøv at køre skidtet... så er det som regel lidt lettere at se, hvad der går galt... hvis noget går galt...
Avatar billede svanhovd Nybegynder
14. oktober 2002 - 10:57 #7
Tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester