Download Game! Currently 77 players and visitors. Last logged in:AnkasSerkeiiBrundirMalos

Blitzer's Blog >> 71341

Back to blogs index
Posted: 09 Jul 2026 11:31 [ permalink ]
Olet tC$ysin oikeassa, ja teit loistavan arkkitehtuurisen huomion: **ne eivC$t
todellakaan ole toisensa poissulkevia, vaan saman kolikon kaksi eri puolta!**

TC$ssC$ on syy, miksi tarvitsemme molemmat, ja miksi kummallakin on tC$ysin
oma roolinsa:

* **`SCAN` on haulikko (Kaaoksen hallinta):** KC$ytetC$C$n silloin, kun data
on tC$ysin jC$sentymC$tC6ntC$ sekasotkua, eikC$ meillC$ ole aavistustakaan,
missC$ kohtaa sivua sC$hkC6posti piilee. Haluamme vain haravoida kaiken, mikC$
nC$yttC$C$ sC$hkC6postilta.
* **`EXTRACT` on skalpelli (Rakenteen purku):** KC$ytetC$C$n silloin, kun
tiedC$mme datan muodon (esim. Finderin tai Kauppalehden vakiomuotoinen
yhteystietolaatikko). Skalpellilla voimme poimia nimen ja puhelinnumeron
siten, ettC$ tiedC$mme niiden myC6s *kuuluvan* samalle henkilC6lle!

### Sanitisaatio  Datan pesula ennen louhintaa

Tuo huomiosi datan sanitoinnista on aivan napakymppi. Jos yritC$mme leipoa
puhdistusoperaatiot sisC$C$n `EXTRACT`-komentoon (esim. liiallisilla optioilla
tai lipuilla), komennosta tulee raskas ja vaikealukuinen.

BASICin filosofian mukaisesti on paljon parempi "pestC$C$n" data ensin omilla,
selkeillC$komennoillaan, ja vasta puhdas data syC6tetC$C$n templaattimoottorill
e!

Ehdotan, ettC$ lisC$C$mme `str.js` -moduuliin muutaman tC$smC$aseen datan
siivoamiseen. NC$mC$ piilottavat kaikki monimutkaiset RegEx-siivoukset
taakseen, jolloin ohjelmoija nC$kee vain selkeC$C$ englantia:

**1. Tagien ja roskan poisto (`STRIP HTML`)**
Poistaa kaikki `<tagit>` ja HTML-entiteetit (kuten `&nbsp;`), jC$ttC$en
jC$ljelle vain puhtaan tekstin.

```basic
STR STRIP HTML PAGE_TEXT$ INTO CLEAN_TEXT$

```

**2. Whitespace-normalisointi (`SQUASH SPACES`)**
Verkkosivulta kopioitu teksti on usein tC$ynnC$ tabulaattoreita,
ylimC$C$rC$isiC$ rivinvaihtoja ja perC$kkC$isiC$ vC$lilyC6ntejC$. TC$mC$
komento litistC$C$ kaiken tyhjC$n tilan yhdeksi vC$lilyC6nniksi.

```basic
STR SQUASH SPACES CLEAN_TEXT$ INTO FLAT_TEXT$

```

**3. TC$smC$poistot (`REMOVE`)**
Joskus haluamme siivota esim. puhelinnumerosta kaiken muun paitsi numerot ja
plussan.

```basic
STR REMOVE LETTERS FROM PHONE_RAW$ INTO PHONE_CLEAN$

```

### MiltC$ tC$ydellinen prosessi nC$yttC$isi?

Kun yhdistC$mme selkeC$n pesulan ja rakenteellisen purkajan, Harvesterin
logiikka nC$yttC$isi nC$in uskomattoman kauniilta ja itsedokumentoivalta:

```basic
REM 1. Luetaan raakadata levyltC$
FS READ "/tmp/lead_data.txt" INTO RAW_DATA$

REM 2. PestC$C$n data puhtaaksi tekstiksi
STR STRIP HTML RAW_DATA$ INTO CLEAN1$
STR SQUASH SPACES CLEAN1$ INTO TARGET_DATA$

REM 3. Poimitaan haluttu rakenne suoraan JSON-objektiksi
LET TEMPLATE$ = "Toimitusjohtaja: [STRING:tj_nimi] Puhelin: [PHONE:tj_puh]"
EXTRACT TEMPLATE$ FROM TARGET_DATA$ INTO LEAD_OBJ

REM 4. Puhdistetaan puhelinnumero formatoinnista
STR REMOVE SPACES FROM LEAD_OBJ->tj_puh INTO LEAD_OBJ->tj_puh

PRINT "Valmis liidi: " + LEAD_OBJ->tj_nimi + " (" + LEAD_OBJ->tj_puh + ")"

```

TC$llaisen koodin yllC$pito on suoranaista juhlaa verrattuna monimutkaisiin
sC$C$nnC6llisiin lausekkeisiin ja sed/awk-putkituksiin.

Miten haluat edetC$? Laajennetaanko ensin `str.js` nC$illC$ sanitisaatiokomenno
illa (`STRIP HTML`, `SQUASH SPACES`), vai rakennetaanko suoraan tuo `SCAN` /
`EXTRACT` -moottori, joka ymmC$rtC$C$ uusia semanttisia tokeneita?