/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Finde noget i Array
Fra : Michael Andreasen


Dato : 23-04-03 00:46

Hej.. jeg er meget grøn, så bær over med mig :)

Jeg har en masse i @enmasse

Jeg ønsker at finde "### start ###" og "### slut ###" og slette alt
derimellem?

Kan man det? Hvis ja, er der nogen der kan give mig en ledetråd

--
Med Venlig Hilsen
Michael Andreasen




 
 
Peter Makholm (23-04-2003)
Kommentar
Fra : Peter Makholm


Dato : 23-04-03 08:00

"Michael Andreasen" <maskinen2000@hotmail.com> writes:

> Jeg har en masse i @enmasse
>
> Jeg ønsker at finde "### start ###" og "### slut ###" og slette alt
> derimellem?

Du har altså elementer der hedder sådan?

Jeg ville nok gøre det med en smart grep-komando:

@enmasse = grep {
not /^### start ###$/ .. /^### slut ###$/
} @enmasse;

En der er mere vandt til C eller ligende sprog ville nok lave en
whileløkke:

my @result = ();
my $ok = 1;
while ($elem = shift @enmasse) {
$ok = 0 if $elem eq "### start ####";
push @result, $elem if $ok;
$ok = 1 if $elem eq "### slut ####";
}
@enmasse = @result;

Eller noget ligende. Ingen af løsningerne har det godt med nestede
start/slut-tingester, men den sidste er let nok at få til det (tæl
hvor mange start-tags du mangler at slutte).

--
Peter Makholm | What if:
peter@makholm.net | IBM bought Xenix from Microsoft instead of buying
http://hacking.dk | DOS?

Michael Andreasen (23-04-2003)
Kommentar
Fra : Michael Andreasen


Dato : 23-04-03 10:03

"Peter Makholm" <peter@makholm.net> wrote in message
news:87u1cp3dii.fsf@xyzzy.adsl.dk...
> Jeg ville nok gøre det med en smart grep-komando:
>
> @enmasse = grep {
> not /^### start ###$/ .. /^### slut ###$/
> } @enmasse;
>
> En der er mere vandt til C eller ligende sprog ville nok lave en
> whileløkke:

Hej Peter

Tak for hjælpen.. Det virker perfekt. Denne løsning er nemmere for mig at
forstå fremfor C syntax løsningen, idet jeg kender grep fra Shell

Takker

--
Mvh
Michael



Tore Aursand (23-04-2003)
Kommentar
Fra : Tore Aursand


Dato : 23-04-03 08:16

On Wed, 23 Apr 2003 01:46:24 +0200, Michael Andreasen wrote:
> Jeg har en masse i @enmasse

En masse hva-for-noe? Jeg antar at det er elementer du prater om, men da
må du gi oss et eksempel på hva som er lagret.

> Jeg ønsker at finde "### start ###" og "### slut ###" og slette alt
> derimellem?

Mener du at din @enmasse ser noenlunde slik ut?

my @enmasse = (
'### start ###',
'noe',
'annet',
'### slut ###'
);

Høres litt merkelig ut å lagre noe slikt i en array. Er du sikker på at
du ikke prøver å lese inn en fil som inneholder dette?


--
Tore Aursand <tore@aursand.no>

"You know the world is going crazy when the best rapper is white, the best
golfer is black, France is accusing US of arrogance and Germany doesn't
want to go to war."

Michael Andreasen (23-04-2003)
Kommentar
Fra : Michael Andreasen


Dato : 23-04-03 09:53

"Tore Aursand" <tore@aursand.no> wrote in message
news:pan.2003.04.23.06.29.33.834123@aursand.no...
> On Wed, 23 Apr 2003 01:46:24 +0200, Michael Andreasen wrote:
> > Jeg har en masse i @enmasse
> Mener du at din @enmasse ser noenlunde slik ut?
>
> my @enmasse = (
> '### start ###',
> 'noe',
> 'annet',
> '### slut ###'
> );
>
> Høres litt merkelig ut å lagre noe slikt i en array. Er du sikker på at
> du ikke prøver å lese inn en fil som inneholder dette?

Ja det er korrekt.. Der er tale om en fil som jeg åbner og henter

Jeg har lige prøvet Peter's grep.. ser ut til at virke korrekt.

Mvh
Michael



Peter Makholm (23-04-2003)
Kommentar
Fra : Peter Makholm


Dato : 23-04-03 10:03

"Michael Andreasen" <maskinen2000@hotmail.com> writes:

> Ja det er korrekt.. Der er tale om en fil som jeg åbner og henter
>
> Jeg har lige prøvet Peter's grep.. ser ut til at virke korrekt.

Hvis der er tale om store filer som kan behandles linje for linje vil
jeg nok rette while-løkken lidt til så sorterer ud og behandler
linjerne i samme løkke. Det bliver noget mere hukommelseseffektivt.

Altså noget ala:

$in_comment = 0;
while(<>) {
$in_comment = 1 if /### start ###/;
if ($in_comment) {
$in_comment = 0 if /### stop ###/;
next;
}

... vider håndtering af inddata ...
}

--
Peter Makholm | Ladies and gentlemen, take my advice, pull down your
peter@makholm.net | pants and slide on the ice
http://hacking.dk | -- Sidney Freedman

Michael Andreasen (23-04-2003)
Kommentar
Fra : Michael Andreasen


Dato : 23-04-03 10:42

"Peter Makholm" <peter@makholm.net> wrote in message
news:87lly137t4.fsf@xyzzy.adsl.dk...
> Hvis der er tale om store filer som kan behandles linje for linje vil
> jeg nok rette while-løkken lidt til så sorterer ud og behandler
> linjerne i samme løkke. Det bliver noget mere hukommelseseffektivt.

Mener du fordi den anden metode åbner hele filen i mem? Filerne er typisk
<50kb

--
Mvh
Michael




Kjeld Flarup (24-04-2003)
Kommentar
Fra : Kjeld Flarup


Dato : 24-04-03 22:05

Peter Makholm wrote:
> Hvis der er tale om store filer som kan behandles linje for linje vil
> jeg nok rette while-løkken lidt til så sorterer ud og behandler
> linjerne i samme løkke. Det bliver noget mere hukommelseseffektivt.

Der må jeg nok erkende at jeg er et memory svin, filer på under 10MB læser jeg
blot ind i en streng og så vil m/start\n(.*?)\nstop/ms returnere den ønskede
substring.


--
------------------------- Med Liberalistiske Hilsner --------------------------
Civilingeniør, Kjeld Flarup - Mit sind er mere åbent end min tegnebog
Ådalen 8, Mogenstrup, 7800 Skive, Tlf: 40 29 41 49, Fax: 96 95 74 48
Den ikke akademiske hjemmeside for liberalismen - www.liberalismen.dk


Peter Makholm (23-04-2003)
Kommentar
Fra : Peter Makholm


Dato : 23-04-03 10:46

"Michael Andreasen" <maskinen2000@hotmail.com> writes:

> Mener du fordi den anden metode åbner hele filen i mem?

Jep. Når du først har læst filen ind i et array så ligger den i
hukommelsen.

--
Peter Makholm | I have no caps-lock but I must scream...
peter@makholm.net | -- Greg
http://hacking.dk |

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste