Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
10/04/09 21:09
crash outside control
Ciao a tutti, oggi stavo cercando di usare le regex per eliminare tutte le scritte tra apici dei "write" del pascal.
Faccio così: carico il sorgente in una listbox e quindi ogni riga del sorgente corrisponde a un elemento della listbox.
Poi con questo codice:

For i As Integer = 0 To ProgAnalizzato.Items.Count - 1
            Dim write As String
            write = Mid(LTrim(ProgAnalizzato.Items.Item(i)), 1, 5)
            If System.String.Compare(write, "write", False) Then
                MsgBox("OK")
                Dim re2 As New Regex("'\w*'", RegexOptions.Compiled)
                Dim res As String = re2.Replace(ProgAnalizzato.Items.Item(i).ToString, "")
                ProgAnalizzato.Items.Item(i) = ""
                ProgAnalizzato.Items.Item(i) = res
            End If
        Next


"tento" di cancellare le critte tra apici di tutte le righe che cominciano con "write".
Solo che non mi va... quando lancio la procedura per ogni riga che legge (quindi anche quando non comincia con write), mi stampa la msgbox... come se l' if andasse a farsi benedire e poi comunque per le stringhe che cominciano con write, non fa niente.
Se invece inserisco gli elementi della listbox, durante lo sviluppo mi "mezzo" funziona solo che l' if non va lo stesso cancella tutto quello tra apici di qualsiasi riga...
Potete aiutarmi per favore?
Grazie mille :)
aaa
10/04/09 21:28
ruggy94
uhm...nell'if prova ad usare string.startswith()...se non hai capito dimmelo
aaa
10/04/09 21:33
crash outside control
Non ho capito 8-|
aaa
10/04/09 21:39
ruggy94
For i As Integer = 0 To ProgAnalizzato.Items.Count - 1
            Dim write As String
            write = ProgAnalizzato.Items.Item(i)
            If write.startswith("Write")= true Then
                MsgBox("OK")
                Dim re2 As New Regex("'\w*'", RegexOptions.Compiled)
                Dim res As String = re2.Replace(ProgAnalizzato.Items.Item(i).ToString, "")
                ProgAnalizzato.Items.Item(i) = ""
                ProgAnalizzato.Items.Item(i) = res
            End If
        Next

Dovrebbe essere così...ho fatto a mente ma credo che la sintassi sia giusta :yup:
aaa
10/04/09 21:43
crash outside control
Bene, ora l' if funziona grazie :)
Solo non va l' eliminazione >_<
aaa
10/04/09 21:46
ruggy94
non va in che senso? semplicemente non elimina?
aaa
10/04/09 21:47
crash outside control
Si, non elimina...
aaa
11/04/09 8:12
Il Totem
Anche StartsWith è obsoleto: primo perchè il confronto è case-sensitive; secondo perchè in una riga come " case 1 : write(a); write(b);" non funziona.
Visto che usi le regex, facciamo tutto con le regex, no? Per prima cosa "\w*" indica zero o più lettere, quindi indica qualsiasi parola. Non so da dove tu l'abbia presa questa. Se vuoi individuare le scritte tra apici del write userai una regex del genere:
Dim re2 As New Regex("(?<Write>write(ln)?)\('.+?'\)", RegexOptions.IgnoreCase)

Questa regex individua ogni write o writeln seguito da una coppia di parantesi contenenti del testo tra apici. Con questa regex operi una sostituzione del genere:
Dim t As String = re2.Replace("Write('ciao'); writeln('coccdàa sj!!');", "${Write}('')")

${Write} serve a dire di mettere la stessa stringa trovata nel raggruppamento (?<Write>;), così i write rimangono write e i writeln rimangono writeln. L'unica cosa che modifichi è il parametro, che diventa una stringa vuota.
aaa