Newsgroup: it.comp.lang.visual-basic
Titolo: Regular Expression e .Net

Mi sto giocherellando con le regular expression e visual 
basic.net
Sono alle prese con la lettura di un file di log cosě composto:
<Valore Numerico>;<tipo>;<testo anche multiriga>
un esempio:
1;datiarrivo;testo testo testo
1;datiinvio;testo testo testo
2;datiarrivo;testo testo testo
ancora testo
altro testo
2;datiinvio;testo testo testo
--
qua il problema č che non riesco a prelevare tutto il testo multiline che
m'interessa.
Sono un po debolino con le regexp.
vabbč procediamo per passi...
il pattern da valutare che uso ora é: "1;datiarrivo;"
magari converto i dati che mi arrivano in una riga sola rimuovendo i CrLf.
perň devo trovare il modo di far valutere tutta la riga che inizia con quel
pattern. :-S
Vabbč ora mi ci impegno.
Piů tardi ripasso di qua per vedere se qualcuno m'ha saputo aiutare.

 1;datiinvio;testo testo testo
dunque sono giunto alla seguente soluzione:
il file dovrà essere composto da più righe singole, o non riesco a valutare
il testo da mostrare a video.
(mmh.. volendo posso mettere una sequenza di caratteri particolare nello
split.)
comunque ecco qui il codice che mi funziona benino:
"\b1;datiarrivo;" come pattern da usare per la ricerca
Dim m As Match
For Each m In mc
    ' Visualizza il testo e la posizione delle corrispondenze.
    TextBox4.Text &= m.Value.ToString & "all'indice: " & m.Index.ToString &
vbCrLf
    TextBox2.Text &= Split(TextBox1.Text.Substring(m.Index), vbCrLf)(0) &
vbCrLf
Next
dove textbox4 mi mostra l'elenco delle occorrenze trovate dalla RegExp,
textbox1 contiene il testo di cui si parlava (verrà caricato da file.. ma
per le prove andava bene anche un textbox multiline)
textbox2 è il testo con le righe complete partendo dall'indice della
ricerca.
Che ne dite?
Suggerimenti per migliorarlo?

 ha scritto nel messaggio
news:cc4bb9$c7c$1...@newsreader.mailgate.org...

Il testo completo e le stringhe ricorrenti devono essere visualizzate o è
sufficiente avere il solo numero ?
Ave
giuseppeD
---
CCR

 sufficiente avere il solo numero ?
dev'essere visualizzabile la riga completa a partire dal primo carattere di
match.
per far visualizzare + linee non saprei come fare se non convertendo o
eliminando i newline o inserendo un terminatore speciale da verificare qui:
TextBox2.Text &= Split(TextBox1.Text.Substring(m.Index), vbCrLf)(0)
magari qualcosa del genere:
TextBox2.Text &= Split(TextBox1.Text.Substring(m.Index), "~")(0)
con un testo salvato cosě:
--
1;datiarrivo;testo testo testo
altro testo
ancora testo~
--
dovrebbe funzionare credo..
faccio le mie prove ^^
č che cosě facendo se trovo un carattere all'interno di qualche stringa mi
tronca la visualizzazione..
--
visualizzare il numero delle ricorrenze non č essenziale.
verranno composti + pattern da passare in base ai dati cercati nei log che
saranno attivati dai relativi button.
esempio:
"\b1;datiarrivo;"
"\b2;datiarrivo;"
"\b1;datiinvio;"
"\b2;datiinvio;"

 ha scritto nel messaggio
news:cc4kol$m6e$1...@newsreader.mailgate.org...

Non credo di aver capito,
ma se devi caricare tutto il testo nella text1 e solo i pattern nella tex2,
lo puoi fare in fase di caricamente.
Per la tex1 puoi utilizzare
dim sr as new streamreader("file.txt")
dim str as string=sr.readtoend
txt1.text=str
per la text2, dove vanno caricate le stringhe filtrate,
possibile una soluzione del genere:
            Dim pattern As String = "(1\;datiarrivo\;)"
            Dim b As Boolean
            Dim sb As New StringBuilder
            sr = New System.IO.StreamReader("TestRegular.txt")
            Dim line As String
            Do
                line = sr.ReadLine
                If Not line Is Nothing Then
                    b = Regex.IsMatch(line, pattern)
                    If b = True Then
                        sb.Append(line & ControlChars.NewLine)
                    End If
                End If
            Loop Until line Is Nothing
sr.Close()
 Me.TextBox2.Text = sb.ToString
Ave
giuseppeD
---
CCR

 lo puoi fare in fase di caricamente.
facendo come dici tu, ad ogni cambio di regola devo ricaricare tutto il
testo dal file.
cmq grazie ;-)