/ 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
hvordan kan man få filnavn på en pipe ?
Fra : Thomas Bøjstrup Joha~


Dato : 11-08-03 20:52

OS er windows

jeg bruger et perl script som bruger pipes til at hente data ind og ud
igen, det virker også helt fint men jeg kunne godt tænke mig at ændre
lidt på script og til det har jeg brug for filnavn på pipe og jeg har
prøve lidt med agumentes, men da det er en pipe kan jeg ikke
få fat i dem via agumentes

eks. på kommandoline: c:\perl\perl.exe c:\dir\script.pl < indputfil.txt > outputfil.txt


hvordan kan jeg få filenavn på ind- og outputfilen ?




ps. jeg er ikke gode til perl, så jeg håber i vil hjælpe

--
Mvh
Thomas Bøjstrup Johansen

------------------------------------------------------------------------
MSN messenger at Home: tooms@post1.tele.dk

Subscribe to http://www.KbAlertz.com and get notified every time Microsoft publishes new Knowledgebase or Support articles



 
 
Flemming Frandsen (12-08-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 12-08-03 14:30

Thomas Bøjstrup Johansen wrote:
> OS er windows

Jeg føler med dig.


> eks. på kommandoline: c:\perl\perl.exe c:\dir\script.pl < indputfil.txt > outputfil.txt
> hvordan kan jeg få filenavn på ind- og outputfilen ?

Det kan du ikke.

Lad programmet arbejde med filerne direkte i stedet for at bruge STDIN
og STDOUT.

Så din kommando linie bliver:
c:\perl\perl.exe c:\dir\script.pl indputfil.txt outputfil.txt

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Thomas Bøjstrup Joha~ (12-08-2003)
Kommentar
Fra : Thomas Bøjstrup Joha~


Dato : 12-08-03 18:19

> > eks. på kommandoline: c:\perl\perl.exe c:\dir\script.pl <
indputfil.txt > outputfil.txt
> > hvordan kan jeg få filenavn på ind- og outputfilen ?
>
> Det kan du ikke.
>
> Lad programmet arbejde med filerne direkte i stedet for at bruge STDIN
> og STDOUT.
>
> Så din kommando linie bliver:
> c:\perl\perl.exe c:\dir\script.pl indputfil.txt outputfil.txt

problemet er at det et kæmpe perl script som skal updaters fra tid til anden
og jeg vil helst ikke ændre på dets virke måde, men bare lave en lille
ændrening
i bund af script uden at ændre på andet.
kan man ikke "læse" hvad kommando line script er starte med også finde det

den måde ? det kan man da i andre sprog så vidt jeg husker



Thomas Bøjstrup Johansen



Flemming Frandsen (12-08-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 12-08-03 19:33

Thomas Bøjstrup Johansen wrote:
>>>eks. på kommandoline:
>>> c:\perl\perl.exe c:\dir\script.pl < indputfil.txt > outputfil.txt
>
> kan man ikke "læse" hvad kommando line script er starte med også
finde > det på den måde ? det kan man da i andre sprog så vidt jeg husker

Well din kommando linie er:
c:\perl\perl.exe c:\dir\script.pl

< indputfil.txt > outputfil.txt betyder at det program der kører
c:\perl\perl.exe skal skifte STDIN og STDOUT ud med de to filer, det
betyder at det er cmd.exe der ved hvad filerne hedder ikke perl eller
dit perlscript.

Det du må gøre er at lave om på dit script så det får navnene på filerne
og så åbner dem selv.

> problemet er at det et kæmpe perl script som skal updaters fra tid til anden

Det har ikke noget at sige.


> og jeg vil helst ikke ændre på dets virke måde,

Det er jo det du er i gang med.


> men bare lave en lille ændrening
> i bund af script uden at ændre på andet.

Der skal ikke ændres i ret meget:
1) Start med at læse parametrene:
my $inputfn = $ARGV[0];
my $outputfn = $ARGV[1];

2) Åben filerne:
open INPUT, "<$inputfn" or die "screaming($inputfn): $!";
open OUTPUT, ">$outputfn" or die "screaming($outputfn): $!";

3) Ændr resten af scriptet til at bruge INPUT i stedet for STDIN, det
kan være lidt svært da STDIN er default for mange operationer, men når
du har search+replacet STDIN med INPUT så kig efter <> og lav det om til
<INPUT>, hold også øje med read().

4) Ændr resten af scriptet til at bruge OUTPUT i stedet for STDOUT, det
kan være lidt svært da STDOUT er default for mange operationer, men når
du har search+replacet STDOUT med OUTPUT så kig efter print ... og lav
det om til print STDERR ... (bmk: ingen komma efter STDERR).

5) luk filerne:
close INPUT;
close OUTPUT;

Når det så er gjort vil dit script virke som før med den nye kommandolinie:

c:\perl\perl.exe c:\dir\script.pl indputfil.txt outputfil.txt

Når du har fundet ud af hvorfor det alligevel ikke virkede kan du
begynde på at lave de ændringer du snakkede om før.

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Adam Sjøgren (12-08-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 12-08-03 19:58

On Tue, 12 Aug 2003 20:33:11 +0200, Flemming wrote:

> Der skal ikke ændres i ret meget: 1) Start med at læse parametrene:
> my $inputfn = $ARGV[0]; my $outputfn = $ARGV[1];

> 2) Åben filerne: open INPUT, "<$inputfn" or die
> "screaming($inputfn): $!"; open OUTPUT, ">$outputfn" or die
> "screaming($outputfn): $!";

> 3) Ændr resten af scriptet til at bruge INPUT i stedet for STDIN,
> det kan være lidt svært da STDIN er default for mange operationer,
> men når du har search+replacet STDIN med INPUT så kig efter <> og
> lav det om til <INPUT>, hold også øje med read().

> 4) Ændr resten af scriptet til at bruge OUTPUT i stedet for STDOUT,
> det kan være lidt svært da STDOUT er default for mange operationer,
> men når du har search+replacet STDOUT med OUTPUT så kig efter print
> ... og lav det om til print STDERR ... (bmk: ingen komma efter
> STDERR).

> 5) luk filerne: close INPUT; close OUTPUT;

Er der noget galt i at springe 3, 4, og 5 over, og i stedet for 2 gøre
ca. sådan:

close(STDIN);
close(STDOUT);

open(STDIN, $inputfn) or die "Couldn't read $inputfn, stopping";
open(STDOUT, ">$outputfn") or die "Couldn't write $outputfn, stopping";

?


Mvh.

--
"Cookie Monster Karaoke. This is what ``industrial'' Adam Sjøgren
has become." asjo@koldfront.dk

Flemming Frandsen (12-08-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 12-08-03 20:11

Adam Sjøgren wrote:
> Er der noget galt i at springe 3, 4, og 5 over, og i stedet for 2 gøre
> ca. sådan:
>
> close(STDIN);
> close(STDOUT);
>
> open(STDIN, $inputfn) or die "Couldn't read $inputfn, stopping";
> open(STDOUT, ">$outputfn") or die "Couldn't write $outputfn, stopping";

Nej, men det er jo helt ufatteligt let, så det er næsten snyd...


.... men jeg er sikker på at den næste der skal ændre i scriptet bliver
overrasket:)

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Thomas Bøjstrup Joha~ (12-08-2003)
Kommentar
Fra : Thomas Bøjstrup Joha~


Dato : 12-08-03 21:02

tak for info Flemming og Adam, jeg vil prøve at se om jeg kan få det til at virke




"Adam Sjøgren" <spamtrap@koldfront.dk> skrev i en meddelelse news:87he4maekq.fsf@virgil.koldfront.dk...
> On Tue, 12 Aug 2003 20:33:11 +0200, Flemming wrote:
>
> > Der skal ikke ændres i ret meget: 1) Start med at læse parametrene:
> > my $inputfn = $ARGV[0]; my $outputfn = $ARGV[1];
>
> > 2) Åben filerne: open INPUT, "<$inputfn" or die
> > "screaming($inputfn): $!"; open OUTPUT, ">$outputfn" or die
> > "screaming($outputfn): $!";
>
> > 3) Ændr resten af scriptet til at bruge INPUT i stedet for STDIN,
> > det kan være lidt svært da STDIN er default for mange operationer,
> > men når du har search+replacet STDIN med INPUT så kig efter <> og
> > lav det om til <INPUT>, hold også øje med read().
>
> > 4) Ændr resten af scriptet til at bruge OUTPUT i stedet for STDOUT,
> > det kan være lidt svært da STDOUT er default for mange operationer,
> > men når du har search+replacet STDOUT med OUTPUT så kig efter print
> > ... og lav det om til print STDERR ... (bmk: ingen komma efter
> > STDERR).
>
> > 5) luk filerne: close INPUT; close OUTPUT;
>
> Er der noget galt i at springe 3, 4, og 5 over, og i stedet for 2 gøre
> ca. sådan:
>
> close(STDIN);
> close(STDOUT);
>
> open(STDIN, $inputfn) or die "Couldn't read $inputfn, stopping";
> open(STDOUT, ">$outputfn") or die "Couldn't write $outputfn, stopping";
>
> ?
>
>
> Mvh.
>
> --
> "Cookie Monster Karaoke. This is what ``industrial'' Adam Sjøgren
> has become." asjo@koldfront.dk



Adam Sjøgren (12-08-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 12-08-03 20:26

On Tue, 12 Aug 2003 21:11:08 +0200, Flemming wrote:

> Adam Sjøgren wrote:
>> Er der noget galt i at springe 3, 4, og 5 over, og i stedet for 2
>> gøre ca. sådan: close(STDIN); close(STDOUT); open(STDIN, $inputfn)
>> or die "Couldn't read $inputfn, stopping"; open(STDOUT,
>> ">$outputfn") or die "Couldn't write $outputfn, stopping";

> Nej, men det er jo helt ufatteligt let, så det er næsten snyd...

TIMTOWTDI.


Mvh.

--
"Mercurychrome.. - Waitin', when the wound's Adam Sjøgren
scraped raw Bones... - The biggest stitches that asjo@koldfront.dk
you ever wore"

René Allan Larsen (12-08-2003)
Kommentar
Fra : René Allan Larsen


Dato : 12-08-03 18:17

In article <KuSZa.3836$KM4.38@news.get2net.dk>, Thomas Bøjstrup Johansen wrote:
>
> OS er windows
>
> jeg bruger et perl script som bruger pipes til at hente data ind og ud
> igen, det virker også helt fint men jeg kunne godt tænke mig at ændre
> lidt på script og til det har jeg brug for filnavn på pipe og jeg har
> prøve lidt med agumentes, men da det er en pipe kan jeg ikke
> få fat i dem via agumentes
>
> eks. på kommandoline: c:\perl\perl.exe c:\dir\script.pl < indputfil.txt > outputfil.txt
>
>
> hvordan kan jeg få filenavn på ind- og outputfilen ?

Det kan du ikke. "<" og ">" behandles af kommandolinjefortolkeren og *ikke* af perl.

Hvorfor har du egentlig brug for filnavnet?

MVH, René


Thomas Bøjstrup Joha~ (12-08-2003)
Kommentar
Fra : Thomas Bøjstrup Joha~


Dato : 12-08-03 18:27

> > hvordan kan jeg få filenavn på ind- og outputfilen ?
>
> Det kan du ikke. "<" og ">" behandles af kommandolinjefortolkeren og
*ikke* af perl.
>
> Hvorfor har du egentlig brug for filnavnet?
fordi jeg skal lave nogen fil oparaion efter at hoved script har lavet sin
del og perl script
bliver starte af et andet program som starte dette script rigtig mange gang
og hvis jeg bare
lave et nyt perl script også starte det lige efter det andet script, vil jeg
jo starte perl fortolkern
op to gang på hver start og det går ikke fordi det vil bruge alt for mange
resouser på system.
hvis nu jeg hade eks. 150000 starter af dette script hver dag så betyder det
jo en del at start
to script i stedet for et............. håber det her giver mening om hvor
det skal laves sådan



Thomas Bøjstrup Johansen



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