Newsgroup: it.comp.lang.visual-basic
Titolo: Prelevare un testo

lA variabile racconto contien del testo nel seguente modo:
testo = "Ciao <es. prel1 fes> questo è <es. prel1 fes> un racconto <es.
prel2 fes>  prova <es. prel3 fes>"
Esiste una funzione che mi consente di prelevare dalla variabile il testo
compreso tra ( <es. ... fes> ) e registrarlo un un'altra variabile ?

 compreso tra ( <es. ... fes> ) e registrarlo un un'altra variabile ?
dim s1 as string, s2 as string
dim ps1 as integer, ps2 as integer
dim sRes as string
s1 = "<es."
s2 = "fes>"
ps1 = instr(1 ,tuastringa, s1,vbTextCompare)
ps2 = instr(1 ,tuastringa, s2,vbTextCompare)
if ps1>0 and ps2 > 0 then
	sRes = Mid$(tuastringa, ps1+len(ps1), 		 
len(tuastringa)-len(ps1)-len(ps2) )
end if
Non l'ho provato quindi ci può essere qualche imprecisione, ad esempio 
nella funzione instr, tuastringa e s1 possono essere invertite.
considera che così ti viene trovata solo la prima occorrenza, se nella 
tua stringa ci sono altri "<es." "fes>" te la devi adattare.
ciao
stefano

aluigi ha scritto:

Hai la possibilità di usare le espressioni regolari (RegEx)? Non so come 
funziona in VB6, ma se puoi accedere alle RegEx, hai anche a di 
disposizione uno strumento con potenza grande a piacere per fare 
ricerche nelle stringhe. Anche se, a volte, trovare la RegEx giusta non 
è proprio immediato.
Nel tuo caso doverebbe andare bene una cosa tipo:
(?<=es\. ).*?(?= fes>)
Ti faccio un esempio in 
VB.NET
, che preleva dalla tua stringa i valori 
che ti interessano, e li aggiunge a una ListBox, indicando anche la 
posizione all'interno della stringa:
Imports System.Text.RegularExpressions
...
Dim s As String
s = "Ciao <es. prel1 fes> questo è <es. prel1 fes> un racconto <es. 
prel2 fes>  prova <es. prel3 fes>"
Dim r As New Regex("(?<=es\. ).*?(?= fes>)")
Dim mc As MatchCollection = r.Matches(s)
Me.Text = mc.Count.ToString
For Each m As Match In mc
	ListBox1.Items.Add(m.Index & " " & m.Value)
Next
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL


Mi vengono visualizzate in rosso le seguneti righe:
Dim r As New Regex("(?<=es\. ).*?(?= fes>)")
Dim mc As MatchCollection = r.Matches(s)
For Each m As Match In mc
Puoi modificare il programma in modo che venga stampata su una cella di
excel il risultato, che deve essere memorizzato in una variabile e
contenetere il seguente risultato:
" prel1 prel2 prel3 prel4"

 ha scritto nel messaggio
news:4729a331$0$21196$5fc...@news.tiscali.it...

Ecco il programma che ho inserito nel foglio excel:
Dim s1 As String, s2 As String
Dim ps1 As Integer, ps2 As Integer
Dim sRes As String
Dim TotRes As String
tuastringa = "Ciao <es. prel1 fes> questo è <es. prel2 fes> un racconto <es.
prel3 fes>  prova <es. prel4 fes>"
s1 = "<es."
s2 = "fes>"
ps1 = InStr(1, tuastringa, s1, vbTextCompare)
ps2 = InStr(1, tuastringa, s2, vbTextCompare)
If ps1 > 0 And ps2 > 0 Then
sRes = Mid$(tuastringa, ps1 + Len(ps1), Len(tuastringa) - Len(ps1) -
Len(ps2))
TotRes = TotRes + sRes
End If
Cells(3, 3).Value = TotRes
Come valore di TotRes compare il seguente:
s. prel1 fes> questo è <es. prel2 fes> un racconto <es. prel3 fes>  prova
<es. prel4 fes>
ma è errato quello esatto deve essere:
prel1 prel2 prel3 prel4
Infatti deve essere prelevato solo il testo all'interno di <es.  fes>

 " prel1 prel2 prel3 prel4"
Non conosco VBA, ma non credo che possa utilizzare le RegEx. Se non 
magari tramite qualche libreria esterna.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL