Koodi- ja ominaisuushaku
3D-Win / Työkalut
Avainsanat: Hakutapa, Ominaisuus, Makro, Hakuehto
Artikkelin toiminnot 3D-Win 6.4.1 alkaen
Julkaistu 20.04.2018, Mikko Syrjä
Koodit ja ominaisuudet -hakutavalla haetaan pisteitä ominaisuuksien ja makrojen avulla. Toiminto voidaan avata Hakutapa-toiminnon kautta, pikavalikosta tai pikanäppäimellä Ctrl-F. Toiminto muistaa 10 viimeksi käytettyä hakua ja usein tarvitut haut voidaan tallentaa listaan erikseen.
Kaikki kohteilla olevat ominaisuudet ovat aina tekstimuodossa ja niillä ei ole tarkempaa tyyppitietoa (esim. päivämäärä, kokonaisluku, liukuluku). Tästä seuraa, että joissain hauissa joudutaan käyttämään lisämääreitä kertomaan, miten ominaisuuden arvoa käsitellään. Esimerkiksi suuruusvertailuissa voi tulos joskus olla erilainen riippuen siitä vertaillaanko ominaisuuksia numeroina vai tekstinä. Koodikentät T1-T5 ovat myös teknisesti ominaisuuksia eli niiden käyttäminen hakuun ei eroa millään tavalla muiden ominaisuuksien käytöstä.
Ominaisuuksia voi ohjelmassa olla tiedostoilla, kohteilla (pisteet, viivat, alueet, kairaukset, profiilit) sekä myös kohteiden yksittäisillä pisteillä (viivapisteet, alueen reunapisteet, profiilien pisteet). Ominaisuushaku hakee ominaisuuksia kohteilta ja niiden pisteiltä, mutta ei tiedostoilta. Jos ominaisuus löytyy kohteelta, kaikki kohteen pisteet valitaan ryhmään.
Toiminnon yläreunassa on leveä kenttä, joka toimii sekä koodihaun (T3) kenttänä että hakuehtojen kokoomakenttänä. Tämä on mahdollista, koska oletuksena haettava ominaisuus on T3 ja oletusvertailuoperaattori yhtäsuuruus. Esimerkiksi haku 121 muuttuu näin automaattisesti hakuehdoksi T3=121.
Toisella rivillä on kolme ominaisuuskenttää, jotka ovat oletuksena T1 (Pinta), T2 (Viiva) ja T4 (Tunnus). Viereisten selauspainikkeiden pikavalikoiden Ominaisuus-toiminnolla näihin voidaan vaihtaa myös jotkin toiset ominaisuudet. Pelkkä tähti kentässä tarkoittaa, että se ei ole haussa mukana.
Hakuehdon määrittely
Haun määrittely voidaan kirjoittaa suoraan yläreunan hakuehtokenttään tai se voidaan koostaa toiminnon muilla työkaluilla. Hakuehtokentän viereisellä selauspainikkeella voidaan hakea kooditiedostosta haettavia koodeja. Toisella rivillä oleviin kenttiin (T1, T2, T4) kirjoitetut arvot muodostavat hakuehdon kukin omasta ominaisuudestaan. Data-välilehden toiminnoilla voidaan muodostaa hakuehto kooditiedostossa määriteltyjen ominaisuuksien perusteella ja Teksti-välilehdellä puolestaan hakuehto tekstien hakuun.
Hakuehtokentän selauspainike hakee oletuksena yhden koodin ja korvaa hakuehdon sillä. Jos viimeinen kenttään annettu merkki on pilkku tai väliviiva, lisätään uusi koodi ehdon loppuun ja uusi pilkku sen perään. Väliviivalla erotetaan haettavan arvoalueen ala- ja ylärajat. Näin koottu pilkuilla erotettu lista muodostaa hakuehdon. Haettavan koodin ollessa mikä tahansa listassa oleva koodi tai koodiväli, kohde valitaan. Esimerkiksi jos ylärivin kenttään kirjoitetaan 1-6,12, muodostuu seuraava hakuehto ja tulos:
T3=1-6,12 1,2,3,4,5,6,12
Ehto täsmää kohteeseen, jos koodi on välillä 1-6 tai 12. Yhtäsuuruuden sijasta voidaan käyttää myös erisuuruutta tai koko hakuehto voidaan kääntää vastakkaiseksi laittamalla alkuun huutomerkki. Tällöin kohteen koodin on oltava erisuuri kaikkien listan koodien ja koodivälien kanssa. Useita ehtoja voidaan myös yhdistää kauttaviivalla. Tällöin riittää, että vähintään yksi ehto toteutuu. Esimerkiksi edellinen hakuehto voidaan kirjoittaa kauttaviivan kanssa tai suorittaa käänteisenä:
T3=1-6/T3=12 1,2,3,4,5,6,12
T3!=1-6,12 0,7,8,9,10,11,13...
!T3=1-6/T3=12 0,7,8,9,10,11,13...
Toisella rivillä oleviin kenttiin voidaan laittaa vastaavasti muita hakuarvoja, jotka sitten suoritettaessa yhdistetään yläriville puolipisteillä erotettuna yhdeksi hakuehdoksi. Samalla kenttiin palautetaan oletustähdet. Puolipisteellä erotettujen ehtojen on kaikkien täsmättävä. Jos samassa hakuehdossa on sekä puolipisteitä että kauttaviivoja, ehto jaotellaan ensin puolipisteiden mukaan. Pilkku listan alussa tai lopussa lisää haettaviin arvoihin myös tyhjän.
T3=1-6,12;T1=1, T3=1,2,3,4,5,6,12 ja T1=1,
T3=1-6/T3=12;T1=1, T3=1,2,3,4,5,6,12 ja T1=1,
Kun haku suoritetaan, se siirtyy ylimmäiseksi kymmenen viimeisen hakuehdon listalla. Jos hakuehtoa tarvitaan usein, se voidaan tallentaa ensimmäisen välilehden listaan joko Lisää- tai Korvaa-painikkeella. Tallennetulle ehdolle voidaan antaa myös nimi muistamisen helpottamiseksi. Nimeä-painikkeella voidaan tallennetun hakuehdon nimeä vaihtaa ja Poista-painikkeella se voidaan poistaa listasta. Oikean reunan Nollaa-painikkeella palautetaan kaikkiin kenttiin oletustähti.
Vertailuoperaattorit
Jos hakuehdossa ei erikseen anneta vertailuoperaattoria, käytetään oletuksena yhtäsuuruutta (=). Operaattori voi olla myös jokin seuraavista: erisuuri (!=), pienempi kuin (<), suurempi kuin (>), pie-nempi tai yhtä suuri (<=), suurempi tai yhtä suuri (>=). Esimerkiksi edellä annettu hakuraja 1-6 voidaan kirjoittaa myös seuraavasti:
T3>=1;T3<=6 1,2,3,4,5,6
Oletuksena suuruusvertailu tehdään alfanumeerisesti eli numeeriset arvot verrataan numeerisina, tekstiarvot merkkijonovertailuna ja molempia sisältävät arvot palastellaan osiin. Esimerkiksi KP50 on pienempi kuin KP100, koska alussa oleva tekstiosuus on sama ja numeerisessa osuudessa 50 on pienempi kuin 100. Vastaavasti AP100 on pienempi kuin KP50, koska alussa oleva AP tulee tekstivertailussa ennen kuin KP.
Tekstihaut eivät oletuksena erottele isoja ja pieniä kirjaimia eli kp100 on sama kuin KP100. Jos isot ja pienet kirjaimet halutaan erotella, voidaan hakuehdon eteen laittaa pystyviiva. Tällöin isot kirjaimet tulevat ennen pieniä kirjaimia.
T4<100 50,99...
T4<KP 50,AP200,ap200...
T4<KP100 50,KP50,KP99,AP200,ap200...
|T4<KP100 50,KP50,KP99,AP200...
Lisäämällä hakuarvon loppuun piste voidaan vertailu pakottaa tapahtumaan numeerisesti. Esimerkiksi hakuehto T5<10 ei löydä arvoa ABC, koska alfanumeerisessa vertailussa numeeriset arvot tulevat ennen kirjaimia. Jos hakuehdon loppuun lisätään piste, arvo löytyy. Käytännössä ABC muuttuu tällöin arvoksi 0, joka on pienempi kuin 10.
Haettaessa yhtäsuuruutta liukulukuarvojen kanssa on annettava haluttu pyöristys lisäämällä loppuun sopiva määrä desimaaleja. Esimerkiksi hakuehto T5=100 ei löydä arvoa 100.3, koska se etsii tarkkaa kokonaislukuarvoa 100. Hakuehto T5=100. löytää arvon, koska se tarkistaa arvon pyöristystarkkuudella ±0.5. Vastaavasti hakuehto T5=100.0 käyttää pyöristystarkkuutta ±0.05 eikä löydä arvoa 100.3.
Negatiiviset arvot toimivat haussa normaaliin tapaan. Esimerkiksi hakuehto DX<-0.05 löytää DX-tarkeominaisuudet, joiden arvo on pienempi kuin -0.05. Laittamalla hakuehdon eteen pystyviiva, voidaan hakea absoluuttisia arvoja. Esimerkiksi hakuehto |DX>0.05 löytää tarkearvot, joiden itseisarvo on enemmän kuin 0.05.
T5<10 1,5,9.999...
T5<ABC A,AAAAA...
T5=100 100
T5=100. 99.5-100.5
T5=100.0 99.95-100.05
DX<-0.05 -0.06,-0.1...
|DX>0.05 -0.06,-0.1,0.1...
Yleisesti hakuehtojen määrittelyssä on tarkkaan tiedettävä mitä ja miten halutaan hakea. Koska ominaisuudet ovat aina merkkijonoja ja ohjelmalla ei ole käytännössä mitään tietoa niiden luonteesta, on tämä yleensä haussa erikseen kerrottava.
Hakurajat ja lainausmerkit
Edellä käytettiin hakurajamäärittelyä 1-6 hakemaan arvot, jotka ovat suurempia tai yhtä suuria kuin 1 ja pienempiä tai yhtä suuria kuin 6. Yksinkertaisilla numeerisilla arvoilla tämä toimii suoraan, mutta koska väliviiva saattaa esiintyä ominaisuuksien arvoissa, tarvitaan joskus lisämäärittelyjä. Tyypillinen tilanne on CAD-ohjelmasta tullut tason nimi, jossa on väliviivoja. Yleisesti jos arvossa on vain yksi väliviiva keskellä ja muut merkit ovat numeerisia, tulkataan arvo hakurajoiksi. Kaikissa muissa tapauksissa väliviiva katsotaan osaksi arvoa. Esimerkiksi 1-6 on hakurajamäärittely, mutta A-E on yksittäinen arvo:
T3=1-6 1,2,3,4,5,6
T3=A-E A-E
Hakuraja voidaan pakottaa myös merkkiyhdistelmällä <> tai väliviivan käsittelyä muuttaa lainausmerkeillä. Seuraavat versiot hakevat koodia 1-6 tai koodeja, jotka ovat suurempia tai yhtä suuria kuin A ja pienempiä tai yhtä suuria kuin E:
T3="1-6" 1-6
T3="A"-"E" A,B,C,D,E
T3=A<>E A,B,C,D,E
Lainausmerkeillä voidaan yleisemminkin käyttää hakuehtojen ohjausmerkkejä hakuarvoina. Lainausmerkkinä toimivat sekä normaali lainausmerkki että heittomerkki. Ne ovat muuten täysin samanarvoisia, mutta heittomerkkien välissä voidaan antaa lainausmerkkejä ja päinvastoin. Esimerkiksi seuraava hakee koodeja A/B, A;B, ”AB” ja 'AB'
T3="A/B","A;B",'"AB"',"'AB'" A/B,A;B,"AB",'AB'
Villit merkit
Hakuarvossa tähdellä (*) voidaan korvata useita merkkejä merkkijonon alusta, lopusta tai keskeltä. Tähti yksinään (*) täsmää kaikkiin arvoihin, mutta ei tyhjiin. Esimerkiksi T3=* hakee kaikki kohteet, joiden koodi ei ole tyhjä. Koska toiminnon kentissä tähti yksin ei tee mitään, on tähden eteen lisättävä vähintään yhtäsuuruusmerkki (=*), jonka jälkeen hakutoiminto osaa automaattisesti lisätä sen eteen kentän ominaisuuden nimen. Hyväksyttäviä yhdistelmiä ovat tähti alussa, lopussa, molemmissa päissä tai yksi tähti keskellä.
Kysymysmerkillä voidaan haussa korvata yksittäisiä merkkejä. Nämä hakusäännöt ovat siis samat kuin useimmissa muissakin ohjelmissa ja eroavat kooditiedostossa käytetystä säännöstä, jossa tähti korvaa koodissa yhden merkin.
T3=* 0,1,2,3,4,5,6,10,11,12...
T4=AP* AP,AP1,AP100,APX...
T4=??? 101,102,111,115,AP1,APX...
Pilkuilla erotetut listat, hakurajat ja villit merkit toimivat vain yhtäsuuruus (=) ja erisuuruus (!=) operaatioiden kanssa.
Ominaisuushaun muodostaminen
Mitä tahansa ominaisuutta voidaan käyttää edellä kuvatuissa hakuehdoissa. Hakutoiminnon toisella välilehdellä olevilla toiminnoilla voidaan ehdoksi hakea kooditiedostossa määriteltyjen koodien ominaisuuksia ja arvoja.
Koodi-rivillä oleva selauspainike mahdollistaa kooditiedoston koodin haun viereiseen kenttään ja Kopioi-painikkeella se voidaan siirtää suoraan hakuehdoksi. Kymmenen viimeksi käytettyä koodia on tallessa pudotuslistassa. Ominaisuus-rivillä listataan kaikki yllä annetulle koodille määritellyt ominaisuudet, kaikki kooditiedoston yleiset ominaisuudet sekä kaikki käytettävissä ovat makrot. Kopioi-painike muodostaa hakuehdoksi ominaisuuden millä tahansa arvolla. Vertailu-rivillä voidaan valita vertailuoperaattori ja siirtää se hakuehtoon yllä olevan ominaisuuden kanssa. Arvo-rivin pudotuslistassa ovat kaikki ominaisuudelle määrätyt arvot ja Kopio-painike muodostaa hakuehdon ominaisuudesta, vertailuoperaattorista ja valitusta arvosta.
Kuvassa olevilla arvoilla Kopioi-painikkeet muodostavat seuraavat hakuehdot:
T3=6 6
ALUSTA=* 11,12,13,14,15,16...
ALUSTA=
ALUSTA=13 13
Oletuksena Kopioi-painikkeet lisäävät ehdon hakuehtokenttään, mutta niiden pikavalikkojen Ylikirjoita kaikki -toiminnoilla hakuehtokenttä voidaan tyhjätä ennen kopiointia.
Tekstien haku
Kolmannella välilehdellä voidaan muodostaa hakuja, jotka kohdistuvat teksteihin. Ohjelmassa tekstit ovat omassa erillisessä listassaan olevia pisteitä, joilla on TEXT-niminen ominaisuus ja koodina kooditiedoston fonttilistassa määritelty fonttikoodi.
Tekstihaun muodostaminen toimii kuten ominaisuushaun muodostaminen. Ylimmällä rivillä annetaan haettava teksti ja toisella rivillä fonttikoodi. Selauspainikkeella fontti voidaan hakea kooditiedoston fonttilistasta ja Kopioi-painikkeet muodostavat hakuehdon tekstistä ja fontista. Koko, väri, keskitys ja suuntakulma ovat tekstin piirtotietoa ja Kopioi-painikkeet muodostavat niistä hakuehdot makroilla.
Itse tekstissä voidaan käyttää kaikkia normaaleja hakusääntöjä: villejä merkkejä, lainausmerkkejä sekä isojen ja pienten kirjainten erottelua. Erityisesti lainausmerkkejä tarvitaan, jos haettavassa tekstissä on välilyöntejä.
Koska muodostettu tekstihaku on aivan normaali hakuehto, se voi löytää muitakin kohteita, jotka sattuvat täyttämään samat ehdot. Pelkästään tekstien käsittelyyn on muutama eri vaihtoehto. Hakuehtoon voidaan lisätä ehto #TYPE=TEXT, joka täsmää vain teksteihin. Sama saadaan aikaan hakemalla ensin kaikki tekstit hakutavalla Tekstit, lisäämällä ne maskiin ja suorittamalla uusi haku vain maskatuille pisteille. Kolmas vaihtoehto on suorittaa haku normaalisti, mutta sen jälkeen käsitellä löydettyjä kohteita erillisellä Tekstiryhmä-toiminnolla. Se käsittelee vain tekstit, vaikka ryhmässä olisi muitakin pisteitä.
Tekstien haku eri hakutavoilla vaatii normaalisti, että Tekstit-asetus on päällä. Tämän välilehden ollessa aktiivinen koodihaku kuitenkin hakee aina myös tekstit asetuksesta riippumatta.
Toiminnon ohjesivu: Hakutapa - Koodit ja ominaisuudet
Lue lisää: Hakutapa ja ryhmä