Just nu i M3-nätverket
Gå till innehåll

Problem.


Fryer

Rekommendera Poster

Kör jag med nedanstående kod och får 9 träffar så visas bara 2 träffar,

men tar jag bort [1..50] så visas alla 9 träffarna.

Hur löser jag detta, om jag vill ha [1..50] kvar och visa alla träffar?

Tacksam för hjälp.

 

foreach $rad (@data[1..50]) {

 

@falt = split(/\|/,$rad);

 

if ($rad =~ /$sokord/i) {

 

print "$falt[0]:$falt[1]\n";

 

}

}

Länk till kommentar
Dela på andra webbplatser

Har du testat att använda en for-sats istället för foreach-satsen? Det är lite mer minnesödslande, men värt att testa :)

 

 

*fluff*

============================

”The future is already here,

it’s just unevenly distributed”

 

Länk till kommentar
Dela på andra webbplatser

Alltså:

 

for($i = 1; $i < 50; $i++) {

@falt = split(/\|/, $data[$i]);

if($data[$i] =~ /$sokord/i) {

print "$falt[0]:$falt[1]\n";

}
}

 

Är det vad du testat?

 

 

*fluff*

============================

”The future is already here,

it’s just unevenly distributed”

 

Länk till kommentar
Dela på andra webbplatser

Jag använde:

for ($a=1; $a < (@data) && $a < (50); $a++) {

men det ger väl samma resultat som din kod, får inte igång Apache just nu för att kunna testa ditt exempel.

Du vet inte annars hur man kan lösa det?

 

 

Länk till kommentar
Dela på andra webbplatser

Ja, det borde definitivt ge samma resultat (och egentligen inte skilja sig från en foreach-sats heller)... så frågan är varför du inte lyckas få "rätt" antal träffar...

 

Jag har svårt att se vad som kan gå "fel" men testa att langa över de 50 första raderna i en ny array och se om du får samma resultat...

 

 

*fluff*

============================

”The future is already here,

it’s just unevenly distributed”

 

Länk till kommentar
Dela på andra webbplatser

Att innan for- eller foreach-satsen lägga in:

 

@data2 = @data[1..50];

 

och köra loopen med @data2. Låter knäppt och jag har svårt att tro att det skulle fungera bättre men det är säkert värt ett försök iaf.

 

 

*fluff*

============================

”The future is already here,

it’s just unevenly distributed”

 

Länk till kommentar
Dela på andra webbplatser

Nu är jag ju nyfiken på hur det löste sig då :)

*fluff*

============================

”The future is already here,

it’s just unevenly distributed”

 

Länk till kommentar
Dela på andra webbplatser

På följande sätt:

 

 

$rakna = 0;

foreach $rad (@data) {

 

@falt = split(/\|/,$rad);

 

if ($rad =~ /$sokord/i) {

$rakna++;

if (0 * 50 <= $rakna -1 && $rakna -1 < 1 * 50) {

 

 

print "$falt[0]:$falt[1]\n";

 

}

}

}

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...