Gå til innhold

Anbefalte innlegg

Hei !

 

Jeg trenger å åpne en fil, trekke ut en streng fra filen, modifisere strengen, finne annen fil med den modifiserte strengen , og deretter flytte/kopiere filen samtidig som den blir får et helt nytt navn.

 

Eks.

 

Filen som skal åpnes heter Ny_fil.dat (filnavn vil endre seg fra gang til gang) - det vil alltid bare være en fil i denne katalogen, med etternavnet .dat

 

Hvis jeg åpner filen ser den slik ut (kun førstelinja er interessant):

 

HR;Originalt_filnavn.dat;;;;;

.....

.....

 

Her må jeg altså etter "HR;" trekke ut alt som finnes til den finner neste ";"

 

Da sitter jeg igjen med en streng som inneholder "Originalt_filnavn.dat"

 

Programmet må deretter bytte ut ".dat" med ".res"

Deretter må filen med navnet "Originalt_filnavn.res" letes opp i f.eks. katalogen Temp. Deretter må filen kopieres/flyttes til en ny katalog, samtidig som den får et helt nytt filnavn - f.eks. "Ressursfil.txt"

 

 

Og til sist : Er det mulig at dette scriptet kan starte et annet script ?

 

 

Jeg ber ikke om å få koden ferdig tygget :), men trenger kommandoene for å åpne en fil, plukke ut en streng fra-til, kopiering og renaming av filer.

 

Noen som kan hjelpe ?

Er rimelig fersk på dette området. Leste litt i manualen... men synes det var vanskelig..

Lenke til kommentar
Videoannonse
Annonse

# trenger funksjoner fra denne modulen senere.

use File::Copy

 

# finne fil som heter .dat:

($filename) = glob "*.dat";

 

# åpne fil for lesing:

open FILE, $filename;

 

# hente alt innhold:

local $/;

$content = <FILE>;

 

 

# finne streng slik du angir:

($new_filename) = $content =~ /HR;(.*)?;/ or die "didnt find new filename\n";

 

# bytte ut endelse:

$new_filename =~ s/\.dat$/.res/;

 

# finn fil i katalogen Temp

glob("Temp/$new_filename") or die "didnt find $new_file in Temp/\n";

 

# kopier denne filen annensteds

copy("Temp/$new_filename", "annetsted/Ressurs.txt");

 

# kjøre annet skript - er det perl eller noe annet?

exec "/some/other/skript";

# eller:

# do "somefile.pl";

 

# skal du fange innhold?

# $result = qx{/some/other/skript};

 

# eller vise innhold som evt. kommer:

# system "/some/other/skript";

Lenke til kommentar

Hei Torbjørn, og takk for svar.

 

Du skriver :

 

# finne fil som heter .dat:

($filename) = glob "*.dat";

 

Her definerer du variabelnavn, og oppretter den i samme øyeblikk, ikke sant ? Hvorfor setter du det i parentes ? Ser at du ikke gjør det senere når du oppretter f.eks. $content.

 

Hvordan kan jeg her spesifisere hvilken katalog den skal lete i ?

Fila vil alltid ligge under denne katalogen.

Blir det ($filename) = Katalognavn/ "*.dat"; ?

 

På spørsmålet ditt; Dette skriptet skal starte et annet perlskript som ligger i en annen katalog.

 

- Geir

Lenke til kommentar

Angående variabel i parentes:

 

 

i perl kan du sette flere variable i samme sleng slik, vha en liste:

 

($a,$b,$c) = (1,2,3);

 

her settes de 3 variablene henholdsvis til 1, 2 og 3

 

glob returnerer en liste (les perldoc -f glob). jeg angir således at jeg vil sette variabelen til det første elementet i denne lista.

 

($filename) = glob "*.dat";

 

 

 

argumentet til glob er det du bruker for å matche filstien, så det blir ganske enkelt slik:

 

glob "Katalognavn\\*.dag"; # \\ på windows

 

 

 

do "filename.pl"; for å kjøre andre perlskript

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...