← Back to team overview

sslug-teknik team mailing list archive

Re: udskrive udsnit af tekstfil.

 

On Thu, 3 Aug 2000, Anders Lund wrote:

> On Wed, 02 Aug 2000, you wrote:
> > Jeg har en temmelig lang tekstfil, som jeg ønsker at kunne
> > søge i.
> >
> > Data i filen står i blokke, som er adskilt af blanke linier.
> > Alle linier undtagen den første i hver blok er indrykket med blanktegn.
> > De fleste blokke indeholder kun et par linier tekst, og normalt
> > søger jeg efter tekst, som står i starten af en blok, så
> > hidtil har jeg klaret mig med grep -A 10 "^tekst" datafil.txt
> >
> > For at afgrænse til at udskrive en blok har jeg prøvet følgende:
> > grep -A 100 "^tekst" datafil.txt | grep -v -A 100 "^[[:space:]]*$"
> >
> > Er det virkelig ikke muligt at få grep til at skrive alle
> > linier imellem to matches? Eller er det bare mig, som ikke
> > har set lyset?
> >
> 
> UNDSKYLD - jeg sender denne igen, da jeg lavede en typo!
> 
> Perl, selvfølgelig!
> Her er et hint:
> 
> open <FILE>, $file or die "kunne ikke åbne $file: $!\n";
> # sæt record seperator til blank linie,
> # virker kun hvis der ikke er blanke tegn ([\s\t\0] på blanke linier.
> $/ = \n\n;
> # find en post der starter med $text
> @found = grep { /^$tekst/} <FILE>;
> close FILE;
> # udskriv til STDOUT
> print shift @found; 

Tak for hjælpen til Anders og de andre, som forsøgte at give gode råd.

Jeg prøvede at kigge på csplit, men kunne ikke få det til andet
end at splitte ved hvert linieskift.

Programmet her virkede desværre heller ikke, men da jeg fik fat i
"Sam's teach yourself Perl" fra biblioteket, fandt jeg ud af, at
hvis jeg satte $/ = "" ville Perl bruge dobbelt linieskift som
input separator, og det virkede.

Efter lidt mere roden rundt har jeg endda fået lavet et program
som virker fint ud fra dit eksempel. Nu er jeg så igang med at
lave det om til et program, som kan søge på alle mulige kriterier.
Jeg havde overvejet at konvertere tekstfilen til en egentlig
database, men så skulle jeg også lave et program til det, da
der kommer en ny version af tekstfilen ca. hver måned.

Endnu en gang tak for hjælpen.

Med venlig hilsen

Ole

-- 
Windows: Where do you want to go today?
MacOS: Where do you want to be tomorrow?
Linux: Are you coming or what?



Follow ups

References