Toon posts:

[perl] open() functie vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb wat problemen met Perl open(). Ik wil graag een file maken in een subdirectory. Het ziet er ongeveer als volgt uit.

my $produkt="produkt_dir";
my $vzn_nummer="01234";


ik heb d:\test\produkt_dir\01234\. Die bestaat dus gewoon. En mijn Perl programma staat in d:\test. Vandaar uit draai ik het dus.


Dit gaat fout. Ik krijg XXX. Hoe los ik dat op?

open(WH, ">$produkt\\$vzn_nummer\\bestandje.txt") or die "XXX";

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Je geeft geen station + directory vooraf mee. Weet je zeker dat produktdir\01234\ een subdirectory is van de huidige werkdirectory? Probeer het eens met een hardcoded path (dus gewoon de volledige string handmatig opgeven en kijk waar het mis gaat.

|_____vakje______|


Verwijderd

Topicstarter
CyberSnoop: Hardcoded path inclusief driveletter zou wel werken denk ik, dat heb ik wel vaker gebruikt. In dit programma is het juist de bedoeling dat het niet hardcoded is aangezien de scalar $produkt 6 x wijzigt in een loop en scalar $vzn_nummer wijzigt 4000 keer.

ik heb al geprobeerd "d:\\test\\$produkt\\vzn_nummer" maar dat werkte ook niet. Eigenijk wil ik die drive letter ook helemaal niet meegeven trouwens. Wat wel werkt is 'd:\test\produkt_dir\01234\bestand.txt' maar dit laatste is dus helemaal niet de bedoeling. Het moet variabel zijn. In het verleden ben ik al eens eerder tegen hetzelfde aangelopen. Toen heb ik het opgelost door met chdir eerst de dir in te gaan dan bestand maken en dan met chdir .. weer terug maar dit vind ik zo'n akelige oplossing. Het moet toch gewoon netjes kunnen ?

  • Red Sonja
  • Registratie: Juli 2001
  • Laatst online: 01-07 13:16

Red Sonja

Linux: power to de wortel

Probeer eens wat foutmeldingen eruit te persen, dan weet je hopelijk wat meer:


my $produkt="produkt_dir";
my $vzn_nummer= '01234';
open(WH, ">$produkt\\$vzn_nummer\\bestandje.txt") or die ("Can't open $produkt\\$vzn_nummer\\bestandje.txt: $!\n");

And the beast shall be made legion. Its numbers shall be increased a thousand thousand fold. The din of a million keyboards like unto a great storm shall cover the earth, and the followers of Mammon shall tremble. from The Book of Mozilla, 3:31


Verwijderd

Topicstarter
Ik krijg de indruk dat het jullie wel lukt? Op Windows? Ik zal er morgen nog eens kritisch naar kijken. Ik heb thuis alleen Linux. Op Linux gaat het wel goed.

code:
1
2
3
4
5
6
7
8
#/usr/bin/perl

my $a = "dir1";
my $b = "dir2";
mkdir "$a";
mkdir "$a/$b";
open(wh, ">$a/$b/test.txt") or die "xxx";
close(wh);


Ik ga morgen bovenstaande code eens proberen op Windows.

Verwijderd

Topicstarter
Ha! opgelost. Tjonge wat dom. ik had staan per ongeluk :

code:
1
mkdir "$a\\$b\n";

en dan een stukje verderop:
code:
1
open (wh, ">$a\\$b\\test.txt") or die "xxx";


De fout zat in de mkdir regel. lol. Bedankt allemaal.
Pagina: 1