GSV Skrevet 16. mars 2005 Skrevet 16. mars 2005 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..
Torbjørn Skrevet 16. mars 2005 Skrevet 16. mars 2005 # 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";
GSV Skrevet 17. mars 2005 Forfatter Skrevet 17. mars 2005 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
Torbjørn Skrevet 17. mars 2005 Skrevet 17. mars 2005 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå