Newsgroup: it.comp.lang.visual-basic
Titolo: Access: parsing di un campo memo

Posto il mio problema anche sul ng di VBA sperando che qualcuno possa
aiutarmi
Ecco mio problema in Access. Ogni record del mio mdb ha un campo
"descrizione", di
tipo memo, contenente del testo puro con all'interno dei tag personalizzati
che indicano la formattazione. Per esempio nella frase:
Questo prodotto è il <i>migliore<i> della categoria.
si intende che la parola 'migliore' deve andare in corsivo in una eventuale
visualizzazione in machera.
Ed ecco il punto dolente.
Nella maschera che sto realizzando vi è un box tipo RichTextBox che dovrebbe
visualizzare la descrizione del record corrente, formattata seguendo i tag.
In pratica devo fare il parsing del campo memo e riempire mano a mano il box
RichTextBox.
Capisco un po' di programmazione ma access non è il mio forte...
Qualcuno mi può dare un aiutino per partire?
Grazie.

Qualcuno mi puň dare un aiutino per partire?
se visualizzi in un rtf, perche' non scrivi direttamente i tag rtf invece di quelli html ?
cioe', invece di 
<i>migliore<i>
scrivere
\i migliore\i0
Sicche' 
Questo e' il migliore di tutti      ---> con migliore in Italic
diventerebbe:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
\viewkind4\uc1\pard\f0\fs20 questo e' il \i migliore\i0  di tutti\par
}
cioe' salvi il contenuto in rtf.
hth, hal

 ha scritto
|
| Questo prodotto è il <i>migliore<i> della categoria.
|
| si intende che la parola 'migliore' deve andare in corsivo in una eventuale
| visualizzazione in machera.
Ti servirebbe proprio un parser per risolvere cosi' il problema!
Se usassi i TAG HTML (invece dei tuoi tag personalizzati) non avresti grossi problemi dato
che potresti usare la funzione replace:
mystr= "Questo prodotto è il <i>migliore</i> della categoria."
mystr=replace(mystr,"<i>","\i")
mystr=replace(mystr,"</i>","\i0")
I TAG HTML si distinguono per avere il tag di apertura e quello di chiusura leggermente
diversi... i tuoi tag personalizzati non vanno bene in questo senso e ti tocca di scrivere
un parser.

 >Qualcuno mi può dare un aiutino per partire?


 ha scritto nel messaggio
news:eWqM6.1262$8P3....@news1.tin.it...


 ha scritto nel messaggio
news:9dtfm1$hf0$1...@lacerta.tiscalinet.it...
| Purtroppo i tag devono essere personalizzati. I dati del mio database
| infatti mi servono su CD-Rom, ma in una applicazione multimediale (già
| creata con Macromedia director).
| Quello che voglio realizzare in access è una maschera, per così dire, di
| controllo.
| Credo di essere sulla buona strada, mi serve trovare un esempio di parser in
| VB per poter vedere come posso realizzare la cosa.
| Ne conoscete qualcuno?
La costruzione di un parser NON e' affatto cosa semplice. Un parser prevede una
grammatica, delle azioni semantiche, una pila di input, ecc... insomma di un programma
come yacc che ti generi il codice VB: solo che non ne ho mai visti in VB (di solito si
scrivono parser come questo in C o Java, per i quali ho trovato Yacc).
In alternativa non fai altro che ciclare, usando instr
i=instr(testo, "<i>")
count=1
while i<>0
    if count mod 2 = 0  then
        destinazione=left(testo,i) & "\i"
        testo=mid(testo,i+3,len(testo)-i)
    else
        destinazione=left(testo,i) & "\i0"
        testo=mid(testo,i+3,len(testo)-i)
    endif
    count=count+1
    i=instr(testo, "<i>")
wend
L'ho scritta qui, quindi fai attenzione...

 ha scritto nel messaggio
news:3DrM6.1360$8P3....@news1.tin.it...


 ha scritto
| Ecco quale era la mia idea:
| Quando questa funzione trova un "<" allora legge tutto il tag e accende (o
| spegne se è acceso) lo stile definito dal carattere.
E se trova una formula? Con "a < b" come si comporterebbe il tuo parser?
| L'unica cosa che non so' è come scorrere carattere per carattere questo
| campo memo...
Ciclo con Mid fino a Len(campo). Ma le stringhe hanno un limite in termini di spazio
occupato in memoria?

occupato in memoria?
credo che dovrebbero arrivare 2 giga ...
ciao, hal

 occupato in memoria?
Le stringhe sono dei semplici campi memo di access, non dovrebbero superare
un paio di decine di Kb (le piů lunghe)
Perché? C'č un limite?

 ha scritto
| > | Ecco quale era la mia idea:
| > | Quando questa funzione trova un "<" allora legge tutto il tag e accende
| (o
| > | spegne se č acceso) lo stile definito dal carattere.
| >
| > E se trova una formula? Con "a < b" come si comporterebbe il tuo parser?
| Ovvio che se trova un "<" non facente parte di un tag lo "tratta" come
| carattere normale.
| I miei tag, infatti, sono tutti del tipo <x> dove x č una sola lettera.
si ma analizzando lettera per lettera devi fare attenzione... so che lo farai... :)
| Le stringhe sono dei semplici campi memo di access, non dovrebbero superare
| un paio di decine di Kb (le piů lunghe)
| Perché? C'č un limite?
come da post di Hal, il limite e' intorno ai 2GB... quindi non dovresti avere problemi...
E se nel tuo campo memo un domani ci finisse del testo html? Oppure si volessero inserire,
nel testo, delle frasi del tipo
   "il tag <b> serve a rendere in grassetto il testo."
Chiaramente in questi contesti il tuo parser fallirebbe. Vedi tu se e' il caso di
prevedere anche questi casi.