[Perl] wie kan me hiermee helpen?

Pagina: 1
Acties:

  • shadax
  • Registratie: Mei 2000
  • Niet online
Heyy, ik wil een txt bestand om kunnen zetten naar een tabel.

txt bestand ziet er als volgt uit van de invoer bijvoorbeeld:

X0,X1,X2,X3,X4
P0,P1,P2,P3,P4

Dit is wat ik heb gedaan:

#! perl -w

open(INF,"<invoer.txt") or die "Can't open albums.txt for writing: $!";
open(OUTF,">tabel.txt") or die "Can't open table.txt for writing: $!";
@ary = <INF>;
print OUTF "<html>
<head>
<title>Muziek</title>
</head>";
close(INF);
foreach $line (@ary) {
chomp($line);
@ar = split(/,/, $line);
print OUTF " <tr>
<td>$ar[0]</td>
<td>$ar[1]</td>
<td>$ar[3]</td>
</tr> ";
}
print OUTF "</table>
</body>
</html>";
close(OUTF);

De invoerfile gooi ik in array @ary, elke regel gaat steeds in $line zitten, die regel zet ik dan weer in een array @ar om de 0e 1e en 3e element te kunnen opvragen!

HIer komt dus mijn probleem: $ar[0] drukt ie goed af, maar als alleen $ar[1] opvraag dan geeft ie als foutmelding dat variabele niet geinitialiseerd is. Als ik @ar afdruk dan geeft ie netjes alles in ar wel gewoon weer dus best vreemd....

Wie weet wat ik moet verbeteren of heeft zelf een andere manier ?

Ik hoor het graag, grtz O

  • tomato
  • Registratie: November 1999
  • Niet online
Ik snap je probleem niet zo goed, het werkt toch gewoon :?

De code zou nog iets meer perlish kunnen, maar dat vind je vast niet echt belangrijk toch?

  • shadax
  • Registratie: Mei 2000
  • Niet online
nee hij doet het dus niet, hij doet het wel als ik dit doe: print OUTF " <tr>
<td>$ar[0]</td>
</tr> ";
maar niet als ik dit doe: print OUTF " <tr>
<td>$ar[0]</td>
<td>$ar[1]</td>
<td>$ar[3]</td>
</tr> ";

en dat wil ik dus hebben, en ik zie nie wat ik fout doe snappie....

  • tomato
  • Registratie: November 1999
  • Niet online
Bij mij doet je code het gewoon.

Alleen als je 'use strict' gebruikt zou ie gaan klagen over niet geinitialiseerde variabelen (@ary, $line, @ar), maar je gebruikt geen 'use strict' dus dat zou hier geen probleem moeten zijn.

Ik vermoed dat het aan je invoer ligt. Ik zie ook op de eerste regel dat je 'invoer.txt' opent, maar in de waarschuwingsmessage staat er dat 'albums.txt' niet geopend kan worden. Open je niet de verkeerde file :?

Dat zou ook logisch zijn, wanneer je een bestand opent waar niet genoeg komma's op iedere regel voorkomen zul je deze foutmelding krijgen...

  • tomato
  • Registratie: November 1999
  • Niet online
shadax: Wie weet wat ik moet verbeteren of heeft zelf een andere manier ?
Niet beter ofzo, maar even voor de mop je code wat 'opgeschoond':
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl

use strict;
use warnings;

my $input = "in.txt";
my $output = "out.txt";

open(INPUT, "<$input") or die "Can't open $input for writing: $!";
open(OUTPUT, ">$output") or die "Can't open $output for writing: $!";

print OUTPUT "<html>
<head>
<title>Muziek</title>
</head>";

while (<INPUT>) {
    print "<tr>";
    chomp;
    map { print OUTPUT "<td>$_</td>" } split(/,/);
    print "</tr>";
}

print OUTPUT "</table>
</body>
</html>";

close(INPUT);
close(OUTPUT);

Zie alleen net dat ik hier alle velden in de tabel zet, dus ook 2 en 4. Anyway, het idee is er ;)

Toch moet je oude code nog gewoon werken...

  • shadax
  • Registratie: Mei 2000
  • Niet online
nee ik gebruik geen strict en ik lees gewoon goeie invoerfile in ik was vergeten die album.txt in invoer.txt te veranderen, maar hij blijft maar foutmelding geven........ bij die code van jou trouwens ook een foutmelding, can't locate warnings.pm in @inc :?.

  • tomato
  • Registratie: November 1999
  • Niet online
shadax: bij die code van jou trouwens ook een foutmelding, can't locate warnings.pm in @inc :?.
Hmmm, ipv van 'use warnings' kun je ook gewoon de -w optie gebruiken zoals jij ook deed.

Geef de exacte foutmeldingen eens door en de inhoud van invoer.txt.

  • shadax
  • Registratie: Mei 2000
  • Niet online
ik heb die warnings door -w vervangen en nu geeft ie als melding <tr></t> en dat stuk of 50 keer achter elkaar.

de invoerbestand kan je zelf gewoon maken met een regel maar die moet wel steeds 5 woorden bevatten met kommaas ertussen...

  • tomato
  • Registratie: November 1999
  • Niet online
shadax: ik heb die warnings door -w vervangen en nu geeft ie als melding <tr></t> en dat stuk of 50 keer achter elkaar.
Ah, ik had hem eerst naar stdout laten printen, de <OUTPUT> had ik er later in geplaatst. Toen had ik twee regeltjes vergeten aan te passen:
code:
1
2
3
print OUTPUT "<tr>";
en
print OUTPUT "</tr>";

Maar verder doet ie het toch echt gewoon hier...
Pagina: 1