Avatar billede microserf Nybegynder
16. november 1999 - 11:58 Der er 9 kommentarer og
1 løsning

Tekst manipulation

Hejsa.

Jeg har brug for et script der kan tage en tekstfil og flytte nogle bestemte linjer til et andet sted i tekstfilen.

Hvem kan hjælpe?
Avatar billede erikjacobsen Ekspert
16. november 1999 - 12:30 #1
Du spørger ikke så konkret, så her er et eksempel, der flytter de 10
første linier nederst i filen (ikke testet).

open(F,"filens.navn");
@f=<F>;
close(F);

open(F,">filens.navn");
for ($i=10;$i<#@f;$i++) {
  print F $f[$i];
}
for ($i=0;$i<10;$i++) {
  print F $f[$i];
}
close(F);
Avatar billede microserf Nybegynder
16. november 1999 - 13:56 #2
Det ser umiddelbart godt ud. Det jeg helt konkret har brug for er:

Jeg har en fil med en lang række af breve der er ens opbygget (rykkere).

Ønske: Hver gang der optræder et bestemt ord, skal de følgende 5 linjer flyttes ned under nogle andre linjer.

Avatar billede erikjacobsen Ekspert
16. november 1999 - 14:31 #3
"nogle andre linier"...  Hehe, øh, lidt mere konkret. Et eksempel måske!
Avatar billede microserf Nybegynder
16. november 1999 - 14:42 #4
Hver gang der optræder et ord først på en linje... f.eks. "navn" så skal denne linje + de næste 4 linjer flyttes nedunder den næste linje, der starter med ordet "adresse"
Avatar billede erikjacobsen Ekspert
16. november 1999 - 15:03 #5
Klart nok. Det kan ikke blive lige nu, så lad os nu se om jeg kommer først...
Avatar billede erikjacobsen Ekspert
16. november 1999 - 19:53 #6
Her er så Perl-scriptet - men jeg kan se, at jeg har lavet en fejl.
Jeg må lige se at få tilføjet et test for "Erik Jacobsen", så jeg ikke
får en rykker... :-)

$navn="";

open(F,"navn.fil");
open(G,">ud.fil");

while ($l=<F>) {
if ($l=~/^[Nn]avn/) {
  for ($i=1;$i<=5;$i++) {
    $navn=$navn.$l;
    if ($i!=5) {
      $l=<F>
    }
  }
} elsif ($l=~/^[Aa]dresse/) {
  print G $l.$navn;
  $navn="";
} else {
  print G $l;
}
}
print G $navn;

close(G);
close(F);
Avatar billede microserf Nybegynder
17. november 1999 - 08:40 #7
erik... kan du lige forklare kort hvad scriptet gør.... jeg er næsten ny inden for Perl.
Avatar billede microserf Nybegynder
17. november 1999 - 08:42 #8
Og så er pointene i øvrigt dine.
Avatar billede erikjacobsen Ekspert
17. november 1999 - 10:21 #9
Jo, da.

Filen "navn.fil" åbnes, og læses igennem linie for linie:  $l=<F>

Hver gang en linie starter med Navn eller navn: if ($l=~/^[Nn]avn/)
gemmes den og de næste 4 linier i variablen $navn.

Hver gang en linie starter med Adresse eller adresse: elsif ($l=~/^[Aa]dresse/)
udskrives linien plus indholdet af $navn.

Til allersidst udskrives $navn for god ordens skyld, hvis der manglede
en linie med Adresse eller adresse. Og så nulstilles $navn passende
steder.

Udskrifter sker på filen G der er åbnet for skrivning. Noget på formen
/^[Aa]dresse/ er et regulært udtryk.

Det var vist det.
Avatar billede microserf Nybegynder
17. november 1999 - 10:49 #10
Mange tak... det virker perfekt. Vi er mange her, der er glade nu.
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