Hakutoiminnot FIND, REPLACE ja PUTEND - ongelmalliset merkit

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Hakutoiminnot FIND, REPLACE ja PUTEND - ongelmalliset merkit

Petri Palmu
FIND, REPLACE, ... toiminnoissa tulee monesti eteen tilanne, jossa olisi kiva, jos hakulauseeseen saisi hieman enemmän älyä R:n  ?grep(),... funktioiden tyyliin. Esimerkiksi voisi hakea kahta merkkijonoa, esim:

REPLACE "CLASSIFY.*DAT3"

hakisi rivin jossa  esiintyy sekä CLASSIFY että DAT3. Toki ymmärrän, että .* voi esiintyä tekstissä, silloin ne pitäisi korvata esim. \.\* R:n tyyliin. Varmaan monilla käyttäjillä REPLACE on kovassa käytössä, joten voi olla että REPLACEa ei kantsi lähteä kovin paljon sorvaamaan? Mutta miten olisi REPLACE2? :)

Toinen ongelma on nuo lainausmerkit tai pilkku (, tämä myös PUTENDissä), voisiko ne taas korvata char(n):lla, kuten TXTCONVissa on mahdollista.

Siis esim.
PUTEND CUR+1,CUR+2,"char(44)
A
B

laittaisi ",  merkkijonon yo. rivien loppuun. REPLACEssa " ja , kanssa joutuu aina vähän "taistelemaan"...

Voisiko tätä kikkailun tarvetta vähän vähentää ja ottaa char(n) käyttöön?
Reply | Threaded
Open this post in threaded view
|

Re: Hakutoiminnot FIND, REPLACE ja PUTEND - ongelmalliset merkit

Reijo Sund
Administrator
Petri Palmu wrote
Toinen ongelma on nuo lainausmerkit tai pilkku (, tämä myös PUTENDissä), voisiko ne taas korvata char(n):lla, kuten TXTCONVissa on mahdollista.
Tuo char():n lisääminen on minusta hyvä ajatus ja helposti toteutettavissa. Siis char()-tuki mukana PUTENDissä ja REPLACEssa versiosta 0.5.43 lähtien.
Reply | Threaded
Open this post in threaded view
|

Re: Hakutoiminnot FIND, REPLACE ja PUTEND - ongelmalliset merkit

Petri Palmu
OK, hyvä juttu! Melkeinpä olisi sellainen muutos, jonka voisi toteuttaa Survossakin... :)
Reply | Threaded
Open this post in threaded view
|

Re: Hakutoiminnot FIND, REPLACE ja PUTEND - ongelmalliset merkit

Petri Palmu
R:n kanssa tulee aika paljon tilanteita, että pitää muodostaa merkkijonomuuttujan vektori. Jos esim. "Survosta" poimii listan muuttujista, esim.

FJOHPO
FSIS
FVAPAA
FVAI
FYHTEISO
FPALK
FSUJUM
FOIK

ja haluaa tehdä siitä vektorin c("FJOH","FSIS",...), niin PUTEND toiminnolla saa lainaismerkin + pilkun uudella PUTENDin laajennuksella (paljon aiempaa kivuttomammin):

PUTEND CUR+1,CUR+8,"char(44)
c("FJOHPO",
 "FSIS",
 "FVAPAA",
 "FVAIK",
 "FYHTEISO",
 "FPALK",
 "FSUJUM",
 "FOIK")

Alkulainausmerkit voi hoitaa vaikka SETillä. PUTEND hyöty on etenkin silloin, kun rivit ovat eripituisia. No toisinaan on tullut tilanne, että olisi myös PUTBEGIN -tyyppinen operaatio (esim. tuossa tilanteessa laittaa " -merkki jokaisen merkkijonon alkuun... jos merkkijonot myös alkavat eri sarakesijainnista (toki FORMilla voi tasoitella).