Download Game! Currently 93 players and visitors. Last logged in:ZidaneXoSharSordus

Blitzer's Blog >> 71339

Back to blogs index
Posted: 09 Jul 2026 10:56 [ permalink ]
Olet aivan asian ytimessC$, ja tC$mC$ on erinomainen arkkitehtuurinen huomio.

Bash-putkitus (`EXEC "cat | jq | grep"`) oli nopea "purkkaviritelmC$", mutta
se rikkoo tC$ysin BASICin perusfilosofiaa vastaan. BASICin sydC$n on siinC$,
ettC$ koodi on ihmisluettavaa, tilanhallinta on selkeC$C$, ja logiikka etenee
lauseina  ei kryptisinC$ erikoismerkkien ja escape-kenoviivojen sekamelskana.

Jos joudumme miettimC$C$n, pitC$C$kC6 lainausmerkki suojata kenoviivalla,
olemme epC$onnistuneet kielen suunnittelussa. Kaiken pitC$isi olla
ilmaistavissa **muuttujilla ja avainsanoilla (tokeneilla)**.

### Ehdotus: Tuodaan in-memory -taulukkokC$sittely BASICiin

Koska `x-mesh-basic` osaa jo parsia JSONia natiivisti objekteiksi ja
taulukoiksi (MAPPING / ARRAY), meidC$n ei pitC$isi joutua kirjoittamaan dataa
vC$liaikaisiin tekstitiedostoihin (`/tmp/lead_targets.txt`) vain voidaksemme
suodattaa sitC$ `jq`:lla.

Ehdotan, ettC$ laajennamme `json.js` -moduulia (tai luomme uuden `array.js`
-moduulin) kolmella uudella, tC$ysin tokenisoidulla komennolla:

#### 1. `JSON FILTER` (Korvaa `jq select`:in)

TC$llC$ voisimme suodattaa taulukosta vain ne objektit, joiden tietty avain
vastaa haluttua arvoa.
**Esimerkki:**

```basic
LET TARGET_ROLE$ = "link"
JSON FILTER ATSPI_ELEMENTS WHERE "role" == TARGET_ROLE$ INTO LINK_ELEMENTS

```

*(Huomaa: Ei ainuttakaan escape-merkkiC$. Arvo tuodaan siististi
muuttujasta.)*

#### 2. `JSON SEARCH` (Korvaa `grep`:in)

TC$llC$ voisimme etsiC$ taulukon objekteista tekstiC$, joka *sisC$ltC$C$*
halutun hakusanan (case-insensitive).
**Esimerkki:**

```basic
LET SEARCH_WORD$ = "Konecranes"
JSON SEARCH LINK_ELEMENTS KEY "name" CONTAINS SEARCH_WORD$ INTO MATCHING_LEADS

```

#### 3. `JSON MAP` (Korvaa `jq`:n kenttien muotoilun)

TC$llC$ voisimme poimia monimutkaisesta objektista vain ne avaimet, jotka
oikeasti tarvitsemme sadonkorjuuta varten (esim. x, y ja nimi).
**Esimerkki:**

```basic
JSON MAP MATCHING_LEADS FIELDS "box_x,box_y,name" INTO FINAL_LIST

```

---

### MiltC$ Scout nC$yttC$isi tC$mC$n jC$lkeen?

Jos toteutamme nC$mC$ komennot, se hirvittC$vC$ rivin 290 bash-hirviC6 katoaa
kokonaan. Tilalle tulee puhdasta, eleganttia BASICia, joka toimii tC$ysin
moottorin muistissa:

```basic
250 JSON GET "response.data.elements" FROM ATSPI_RES INTO ALL_ELEMENTS
260 PRINT "Suodatetaan linkit..."
270 LET ROLE$ = "link"
280 JSON FILTER ALL_ELEMENTS WHERE "role" == ROLE$ INTO LINKS ONLY
290 PRINT "Etsitaan hakusanaa..."
300 LET KEYWORD$ = "konecranes"
310 JSON SEARCH LINKS ONLY KEY "name" CONTAINS KEYWORD$ INTO FINAL_LEADS
320 REM Tallennetaan tulos suoraan tiedostoon Harvesteria varten
330 JSON STRINGIFY FINAL_LEADS INTO JSON_OUT$
340 FS WRITE "/tmp/leads.json" WITH JSON_OUT$

```

TC$mC$ lC$hestymistapa:

* **Tuhoaa escape-helvetin:** Et tarvitse kenoviivoja, koska kC$ytC$t
muuttujia (`ROLE$`, `KEYWORD$`).
* **On salamannopea:** Suodatus tapahtuu Node.js:n natiivilla V8-moottorilla
muistissa, eikC$ se vaadi raskaiden ulkoisten prosessien (`cat`, `jq`, `grep`)
kC$ynnistC$mistC$.
* **On determinististC$:** TiedC$mme tarkalleen, ettC$ lopputulos on aina
validi JSON-taulukko, jonka Harvester voi lukea yhdellC$ `JSON PARSE`
-komennolla puhtaasti muistiin.

MiltC$ tC$llainen token-pohjainen lC$hestymistapa kuulostaa? Jos tC$mC$ on
sitC$, mitC$ haet, voin kirjoittaa sinulle heti valmiin JavaScript-koodin
nC$iden komentojen lisC$C$miseksi MeshBASIC-moottoriisi!