Avatar billede snowball Novice
03. december 2003 - 20:51 Der er 8 kommentarer og
1 løsning

Læs linier i fil alt efter indput

Hej.

Jeg står og mangler et relativt simpel Perl script, men da min viden om Perl er meget lille, håber jeg at der lige er en her der vil hjælpe mig.

Jeg har brug for et script hvor man kan angive en tekst som input til scriptet. Alt efter hvad der er angivet som input, skal den hente 2 linier i en txt fil. Formatet af filen er som nedenstående:

:InOut
1
2
:InSpam
3
4
:InVirus
5
6

De tre linier der starter med : er dem som kan gives som input, så hvis man f.eks. angiver InSpam som input, så skal scriptet returnere 3 og 4 (hver tal i hver sin print sætning). Formatet af txt filen kan sagtens ændres hvis det bliver nødvendigt.

På forhånd tak.

Mvh.

Snowball
Avatar billede erikjacobsen Ekspert
03. december 2003 - 21:32 #1
Sådan?

if ($#ARGV<0) {
  die "Du mangler et argument på kommandolinien";
}

$tekst = $ARGV[0];

open F,"<input1.txt" or die "Filen pist væk";
w: while (<F>) {
  if (/^:$tekst/) {
    while (<F>) {
      if (/^[^:]/) {
        print;
      } else {
        last w;
      }
    }
  }
}
close F;


et par tests:

C:\erik\perl>perl input1.pl
Hello, World...
Du mangler et argument pÕ kommandolinien at input1.

C:\erik\perl>perl input1.pl
Du mangler et argument pÕ kommandolinien at input1.

C:\erik\perl>perl input1.pl InSpam
3
4

C:\erik\perl>perl input1.pl InSpamxxx
Avatar billede erikjacobsen Ekspert
03. december 2003 - 21:33 #2
if (/^:$tekst/) {

bør rettes til

if (/^:$tekst$/) {
Avatar billede snowball Novice
03. december 2003 - 22:08 #3
Umiddelbart virker det som det skal. Har dog 2 rettelser som jeg gerne vil have lavet.

1) Når den skal udskrive de 2 værdier, så udskriver den også en extra blank linie - kan du fjerne den blanke linie ?

2) Hvis det der er angivet som input ikke findes, så skal den bare returnere to linier med 0.

Snowball
Avatar billede erikjacobsen Ekspert
03. december 2003 - 22:17 #4
Hmm, der er eet linieskift på hver linie  -  skal der ikke være det?
Avatar billede snowball Novice
03. december 2003 - 22:22 #5
Tjo, men så skal der nok kun være et linieskift på den første linie hvis det er det der skal til for at den sidste blanke linie ikke kommer med.

Snowball
Avatar billede snowball Novice
04. december 2003 - 15:11 #6
Grundlæggende virker scriptet og det virker også i den sammenhæng jeg skal bruge det. Du må dog gerne lave de 2 rettelser hvis det er noget der lige er hurtigt at rette :)

Under alle omstændigheder skal du lige lave et svar hvis du vil have dine velfortjente point :)

Snowball
Avatar billede snowball Novice
05. december 2003 - 13:15 #7
Erik,

Jeg vil meget gerne ha' rettet nr. 1 hvis det er muligt. Nr. 2 er ikke vigtig.

Snowball
Avatar billede snowball Novice
10. december 2003 - 10:14 #8
Nå, men du må jo sige til hvis vil have de 50 point.

Snowball
Avatar billede erikjacobsen Ekspert
10. december 2003 - 10:18 #9
Nå, jeg havde helt glemt dig - det er ligemeget med point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester