Přejít na obsah


Fotka

GSAK a MFILTER Where=Name IN...


  • Pokud chcete vložit odpověď, přihlašte se
11 odpovědí na toto téma

#1 ToRo61

ToRo61

    Advanced Member

  • Members
  • PipPipPip
  • 505 příspěvků(y)

Publikováno 02 červen 2011 - 19:19

Chtěl bych si v makru GSAKu definovat MFILTER pomocí výčtu hodnot.
Funguje mě toto:
MFILTER Where=Name IN ('0110-1.0','0110-2.0' )
Chtěl bych si ale ten seznam pro IN generovat z více hodnot. Zkoušel jsem něco jako:
$s = "'0110-1.0','0110-2.0'"
MFILTER Where=Name IN ($s)
ale to mě nefunguje :(
Neporadil by mě někdo, jak ten výčet hodnot do $s naplnit? Díky.
  • 0

#2 petegeo

petegeo

    Advanced Member

  • Members
  • PipPipPip
  • 1 005 příspěvků(y)

Publikováno 03 červen 2011 - 6:46

Treba... $s = 10 $f = "+1" MFILTER Where=Name IN ($s,$f )
  • 0

#3 ToRo61

ToRo61

    Advanced Member

  • Members
  • PipPipPip
  • 505 příspěvků(y)

Publikováno 03 červen 2011 - 8:27

OK, díky.
Ale já mám ten výčet hodnot dynamický a mívám v něm desítky hodnot.
Řešení 'co hodnota, to jedna proměnná' se moc nehodí :(
  • 0

#4 rsc_cz

rsc_cz

    Advanced Member

  • Members
  • PipPipPip
  • 876 příspěvků(y)

Publikováno 03 červen 2011 - 9:59

ToRo61 napsal/a:
OK, díky.
Ale já mám ten výčet hodnot dynamický a mívám v něm desítky hodnot.
Řešení 'co hodnota, to jedna proměnná' se moc nehodí :(


Jak se dostaneš k tomu seznamu, podle kterého chceš filtrovat? Filtrovat s případně dá i podle části názvu nebo kódu
  • 0

#5 ToRo61

ToRo61

    Advanced Member

  • Members
  • PipPipPip
  • 505 příspěvků(y)

Publikováno 03 červen 2011 - 17:05

Jsem rád, že se rsc_cz chytil ;) ... za můj dotaz stejně může jen on...
Seznam načítám ze souboru lovim.ggt (GeoKuk). Ten jsem dosud přetavil do reg. výrazu (RE) a pak jsem použil něco jako:
Where=g_regex( $all_lines, Name ) OR g_regex( $all_lines, Code )
Když jsem ale GSAK nakrmil trochu nestandardními WPT (např. typu Czech Geodetic Point), tak mě RE díky hladovosti, začal vybírat body navíc, které jsem v lovim.ggt neměl.

Napadlo mě tedy, že bych upravil WHERE tak, aby hledal opravdu podle přesných jmen/kodů WPT, tj. chtěl jsem použít to Where=Name IN.
Můj problém je ten, že nevím jak sestavit syntakticky správný řetězec, který by obsahoval více hodnot, a který by šel použit proto Where=Name IN ($s).
Možná jsem se na to IN příliš upnul, ale používám to na jiných platformách. Kdyby měl někdo jiný nápad, tak se zlobit nebudu :)
  • 0

#6 petegeo

petegeo

    Advanced Member

  • Members
  • PipPipPip
  • 1 005 příspěvků(y)

Publikováno 03 červen 2011 - 17:12

Problem je, ze prikaz IN ( xx, yy) se vnitrne interpretuje jako seznam parametru oddelenych carkou. Kdyz to predavas v jedne promenne, tak je to stale jeden parametr, bez ohledu na jeho obsah. Mozna bys to obesel cyklem, v kterem budes volat jen jednu promennou a pro dany vyber si nastavis $d_MacroFlag=TRUE a potom na konci vseho si nastavis Mfilter If=$d_MacroFlag
  • 0

#7 petegeo

petegeo

    Advanced Member

  • Members
  • PipPipPip
  • 1 005 příspěvků(y)

Publikováno 03 červen 2011 - 17:18

ToRo61 napsal/a:
Seznam načítám ze souboru lovim.ggt (GeoKuk).

Cili chces vyfiltrovat jen body z ktere jsou v seznamu lovim.ggt ?
  • 0

#8 ToRo61

ToRo61

    Advanced Member

  • Members
  • PipPipPip
  • 505 příspěvků(y)

Publikováno 03 červen 2011 - 17:22

Ano, přesně tak.
  • 0

#9 petegeo

petegeo

    Advanced Member

  • Members
  • PipPipPip
  • 1 005 příspěvků(y)

Publikováno 03 červen 2011 - 17:28

tak si trochu uprav tohle... $numGCcode=0 $numGCcodeDNF=0 #Nacti setting $InputFile = $_Install + "\geoget\seznam.ggt" IF FileExists($InputFile) ELSE pause Msg msg="Nenalezen soubor \geoget\seznam.ggt" cancel ENDIF USERFLAG Type=Clear Range=All IF $_Count = 0 MSGOK msg="Prazdny filtr databaze $_newline Exiting macro" RETURN ENDIF FileRead File=$InputFile If IsEmpty($line) $blank = $blank + 1 EndIf $GCcode=trim($line) $numGCcode= $numGCcode + 1 # mam nacteny GC kod, ted ho najit v SQL a nastavit priznak MFILTER Expression=($d_CODE =$GCcode) IF $_FilterCount>0 USERFLAG Type=SET Range=FILTER ELSE # pokud se nenalezl v databazi, vypsat $numGCcodeDNF= $numGCcodeDNF + 1 Pause Msg="tento kod ze seznamu neni v databazi: $GCcode" ENDIF EndRead CANCELFILTER MFILTER Expression=(USERFLAG =true)
  • 0

#10 ToRo61

ToRo61

    Advanced Member

  • Members
  • PipPipPip
  • 505 příspěvků(y)

Publikováno 03 červen 2011 - 17:34

Hmmm, myslím, že bych tomu mohl porozumět :) Díky moc.
  • 0

#11 Crocky

Crocky

    Advanced Member

  • Members
  • PipPipPip
  • 477 příspěvků(y)

Publikováno 03 červen 2011 - 19:33

Funguje toto (je to i v online helpu GSAK pod heslem MFILTER):
$_sql = "code in ('GC251P0','GCX105')"
MFILTER where=$_sql
Jirka
  • 0

#12 ToRo61

ToRo61

    Advanced Member

  • Members
  • PipPipPip
  • 505 příspěvků(y)

Publikováno 03 červen 2011 - 20:03

Máš pravdu, v tom helpu jsem teď našel něco podobného:
$_sql = "name like '%hill%'"
Mfilter where=$_sql
Díky za radu
  • 0




1 uživatel(ů) prochází toto téma

0 uživatelů, 1 návštěvníků 0 anonymních uživatelů

Reklama