GSV Skrevet 16. mars 2005 Del 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.. Lenke til kommentar
Torbjørn Skrevet 16. mars 2005 Del 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"; Lenke til kommentar
GSV Skrevet 17. mars 2005 Forfatter Del 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 Lenke til kommentar
Torbjørn Skrevet 17. mars 2005 Del 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 Lenke til kommentar
GSV Skrevet 18. mars 2005 Forfatter Del Skrevet 18. mars 2005 Det fungerte fint det !! Mange takk !! Lenke til kommentar
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å