Toon posts:

[Perl] Patroonvergelijking

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een subroutine gemaakt om snel een bepaalde regel uit een table te selecteren:

code:
1
2
3
4
5
6
7
8
9
10
11
sub selRow {
   my $table = shift;
   my $selRow = shift;

   foreach $line(@{"$table"}) {
      if ($line =~ /$selRow/) {
         @{"${table}Details"} = split(/\|/, $line);
         last;
      }
   }
}
En deze roep ik als volgt aan:
code:
1
selRow("admins","^$form{'test'}\|$form{'test'}\|");

Toch krijg ik op de een of andere manier ten allen tijde de eerste row uit de table ipv de row die ik voor ogen heb. Het is me duidelijk dat de manier waarop ik aan patroonvergelijking wil doen niet helemaal werkt, maar wat ik ook probeer; het werkt niet... :(

Verwijderd

Topicstarter
Blijkbaar is de statement niet helemaal duidelijk; ik zal proberen te refrasen:
code:
1
2
$selRow = "^$var1\|$var2\|";
if ($line =~ /$selRow/) {


Deze if-statement werkt dus niet. Iemand die meer weet dan ik? :)

modbreak: je kan ook het edit-knopje gebruiken als je iets wilt aanpassen/verduidelijken aan je post.
Je topic omhoog kicken hoef je niet te doen na een uur. Kicken kan na 24h. Vroeger kicken wordt niet echt geapprecieerd, en is ook niet nodig aangezien je topic dan nog altijd zichtbaar is in de topiclijst.

[ Voor 50% gewijzigd door whoami op 23-10-2003 21:34 ]


  • Juup
  • Registratie: Februari 2000
  • Niet online
Dat lijkt me logisch. Je hebt een pipe teken '|' te veel.
Je matcht nu x of y of niks, en niks is altijd goed.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Topicstarter
Juup schreef op 23 October 2003 @ 21:25:
Dat lijkt me logisch. Je hebt een pipe teken '|' te veel.
Je matcht nu x of y of niks, en niks is altijd goed.
Ey thanx dude! Ik wil de pipe echter niet als "or" gebruiken, maar als letterlijke pipe in de te doorzoeken string...

De te doorzoeken $line is 1 regel uit een flatfile database die de pipe als scheidingsteken gebruikt. Dat betekent dat de =~ ook werkelijk naar een pipe moet zoeken en niet de pipe moet gebruiken alsof het 'or' of '||' is...

  • Juup
  • Registratie: Februari 2000
  • Niet online
Dan moet je hem in jouw geval triple escapen.
Eerst \\ voor 1 backslash en dan \| voor een pipe, samen wordt dat \| in de regexp.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.