/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
intet output til fil?
Fra : Thomas Skyt


Dato : 20-07-04 01:20

Hej,

jeg har nedenstående stump kode, som bare nægter at skrive til
fil-handlen.

   open BARF, ">data/nummernavne.txt" or die("ARGH!\n");
   for($i = 0; $i < $countArray-1; $i++) {
      $langArray[$i] =~ m/([0-9]{7})/s;
      $memberNumber[$i] = $1;
   
      $langArray[$i] =~ m/[0-9]{7}>(.*)<\/a>/s;
      $memberName[$i] = $1;

      $memberCount = CountMembers($memberNumber[$i]);

      print BARF "$memberNumber[$i]:$memberName[$i]:$memberCount\n";
   }
   close(BARF);

Ved kørsel af rutinen er der inkl. BARF 2 filer åbne og filen bliver
oprettet, men der kommer intet indhold i den (den forbliver på 0 bytes).
To andre filer, som scriptet åbner og arbejder med i samme bibliotek får
fint det indhold de skal have.

Er der nogen der har en god ide?

/Thomas

 
 
Adam Sjøgren (20-07-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 20-07-04 01:43

On Tue, 20 Jul 2004 02:20:24 +0200, Thomas wrote:

>   open BARF, ">data/nummernavne.txt" or die("ARGH!\n");
>   for($i = 0; $i < $countArray-1; $i++) {

[...]

>      print BARF "$memberNumber[$i]:$memberName[$i]:$memberCount\n";
>   }
>   close(BARF);

> Ved kørsel af rutinen er der inkl. BARF 2 filer åbne og filen bliver
> oprettet, men der kommer intet indhold i den (den forbliver på 0
> bytes). To andre filer, som scriptet åbner og arbejder med i samme
> bibliotek får fint det indhold de skal have.

Er du sikker på at $countArray er større end 1, altså at du
overhovedet kommer ind i løkken?


Mvh.

--
"Mr. Cotton's... parrot. Same question." Adam Sjøgren
asjo@koldfront.dk

Thomas Skyt (20-07-2004)
Kommentar
Fra : Thomas Skyt


Dato : 20-07-04 01:55

On Tue, 20 Jul 2004 02:43:18 +0200, Adam Sjøgren wrote:

> On Tue, 20 Jul 2004 02:20:24 +0200, Thomas wrote:
>> Ved kørsel af rutinen er der inkl. BARF 2 filer åbne og filen bliver
>> oprettet, men der kommer intet indhold i den (den forbliver på 0
>> bytes). To andre filer, som scriptet åbner og arbejder med i samme
>> bibliotek får fint det indhold de skal have.
>
> Er du sikker på at $countArray er større end 1, altså at du
> overhovedet kommer ind i løkken?

Jeps, for når jeg sætter den til at udskrive til STDOUT kommer der fint
noget.

Kan det mon hænge sammen med at den lukke alle filehandles når man
foretager et kald til en subrutine?

/Thomas

Adam Sjøgren (20-07-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 20-07-04 02:27

On Tue, 20 Jul 2004 02:54:30 +0200, Thomas wrote:

> Jeps, for når jeg sætter den til at udskrive til STDOUT kommer der
> fint noget.

> Kan det mon hænge sammen med at den lukke alle filehandles når man
> foretager et kald til en subrutine?

Du skal nok vise lidt mere af dit program før det er muligt at hjælpe
dig med at finde fejlen - den snip du har vist virker:

== barf.pl =
#!/usr/bin/perl

use strict;
use warnings;

my $i;
my $countArray=3;
my @langArray=("1234567>et</a>", "7654321>to</a>");
my @memberNumber;
my @memberName;
my $memberCount;

sub CountMembers {
return 42;
}

   open BARF, ">data/nummernavne.txt" or die("ARGH!\n");
   for($i = 0; $i < $countArray-1; $i++) {
      $langArray[$i] =~ m/([0-9]{7})/s;
      $memberNumber[$i] = $1;
   
      $langArray[$i] =~ m/[0-9]{7}>(.*)<\/a>/s;
      $memberName[$i] = $1;

      $memberCount = CountMembers($memberNumber[$i]);

      print BARF "$memberNumber[$i]:$memberName[$i]:$memberCount\n";
   }
   close(BARF);
== =

== kørsel =
$ mkdir data
$ ./barf.pl
$ cat data/nummernavne.txt
1234567:et:42
7654321:to:42
$
== =


Du bruger vel ikke filehandle't "BARF" andre steder, f.eks. i
CountMembers, vel?


Mvh.

Adam

--
"Some people like cupcakes better. Adam Sjøgren
I for one care less for them!" asjo@koldfront.dk

Tore Aursand (20-07-2004)
Kommentar
Fra : Tore Aursand


Dato : 20-07-04 08:58

On Tue, 20 Jul 2004 02:20:24 +0200, Thomas Skyt wrote:
> open BARF, ">data/nummernavne.txt" or die("ARGH!\n");

Unødvendig bruk av " og du har glemt (?) å skrive ut $! når/hvis noe
går galt;

open( BARF, '>', 'data/nummernavne.txt' ) or die "$!\n";

Se dokumentasjonen:

perldoc -q vars
perldoc perlvar

Jeg ser i tillegg at du fremdeles ikke benytter verken 'strict' eller
'warnings'. Vennligst gjør det; det kan avsløre mye som det blotte øye
ikke klarer.

> for($i = 0; $i < $countArray-1; $i++) {

Dette er C-kode. Når jeg ser på innholdet i resten av løkken, ser det
ut til at du har valgt en dårlig måte å lagre informasjonen du
behandler på.

Det hadde vært fint om du kunne postet hele koden, evt. gitt en URL til
hvor vi kan lese den.

> $langArray[$i] =~ m/([0-9]{7})/s;
> $memberNumber[$i] = $1;
>
> $langArray[$i] =~ m/[0-9]{7}>(.*)<\/a>/s;
> $memberName[$i] = $1;
>
> $memberCount = CountMembers($memberNumber[$i]);
>
> print BARF "$memberNumber[$i]:$memberName[$i]:$memberCount\n";

Bruk _aldri_ resultatet av en match uten å vite at match-en faktisk
matchet. :) I dette tilfellet ser det ut til at du er "better off" med
noe slikt:

if ( $langArray[$i] =~ m/([0-9]{7})/s ) {
$memberNumber[$i] = $1;
if ( $langArray[$i] =~ m/[0-9]{7}>(.*)<\/a>/s ) {
$memberName[$i];
$memberCount = CountMembers( $memberNumber[$i] );
# ...
}
}

> Er der nogen der har en god ide?

Ikke annet enn hva jeg har oppgitt ovenfor, spesielt med tanke på
'strict' og 'warnings'. For å finne ut mer trenger jeg å se mer av
koden, spesielt hva f.eks. 'CountMembers()' gjør.


--
Tore Aursand <tore@aursand.no>
"Nothing is certain but death and taxes. Of the two, taxes happen
annually." (Joel Fox)

Tore Aursand (20-07-2004)
Kommentar
Fra : Tore Aursand


Dato : 20-07-04 09:09

On Tue, 20 Jul 2004 09:57:46 +0200, Tore Aursand wrote:
> if ( $langArray[$i] =~ m/([0-9]{7})/s ) {
> $memberNumber[$i] = $1;
> if ( $langArray[$i] =~ m/[0-9]{7}>(.*)<\/a>/s ) {
> $memberName[$i];
> $memberCount = CountMembers( $memberNumber[$i] );
> # ...
> }
> }

Når jeg ser enda litt nærmere på koden, så er det vel mulig å
kombinere de to if-ene ovenfor?

if ( $langArray[$i] =~ m/([0-9]{7})>(.*)<\/a>/s ) {
$memberNumber[$i] = $1;
$memberName[$i] = $2;
# ...
}


--
Tore Aursand <tore@aursand.no>
"I am become Death, shatterer of worlds." (J. Robert Oppenheimer, upon
witnessing the explosion of the first atomic bomb.)

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste