Salve,
Sono nuovo di qui ed ho pure scarsa esperienza con visual basic, per cui vi prego di scusarmi se non rispetterò qualche regola del forum o se sarò poco efficace nel tentativo di spiegarmi.
Cominciamo:
Versione di Visual Studio: 2015
Progetto: Applicazione Windows Form
Finalità: creare un visualizzatore di file.txt contenenti linee di codice, copiandone il contenuto in una richtextbox dove le parole chiave vengano colorate in modo diverso a seconda della funzione che svolgono (come avviene quando scriviamo in visual studio).
Per fare ciò prelevo le parole chiave da elenchi (anch'essi in forma .txt) e li inserisco in delle matrici; agisco direttamente sul testo copiato tramite streamreader interrogandolo con varie serie di FIND (con cui cerco tutte le parole presenti nelle matrici) in vari cicli FOR NEXT
Problema: Il processo funziona bene, però è molto lento: per i file più lunghi impiega fino a 10 secondi.
Esiste un modo per velocizzare il tutto?
Non so bene dove andare ad agire con l'async
Qui il codice (un po' semplificato perché non tiene conto delle varianti delle parole da ricercare [spazio prima, spazio dopo, iniziale maiuscola, a capo dopo etc...]):
dim leggi as streamReader
dim File_aprire as string = percorso file
dim Cartella_con_liste_parole as string = percorso cartella
Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button.Click
leggi = IO.File.OpenText(apriFile)
While leggi.Peek > -1
RichTextBox1.Text = RichTextBox1.Text & leggi.ReadLine() & vbCrLf
End While
leggi.Close()
'--------------------------------- STATEMENTS ------------------------------
Dim comand As String()
Dim comandi As String = Cartella_con_liste_parole& "Statements.txt"
EvidenziaDaArray(comandi, comand, Color.DodgerBlue)
'--------------------------------- STATEMENTS ------------------------------
'--------------------------------- CLASSES ---------------------------------
Dim clas As String()
Dim classi As String = Cartella_con_liste_parole& "Classes_Usate.txt"
EvidenziaDaArray(classi, clas, Color.DarkCyan)
'--------------------------------- CLASSES ---------------------------------
'--------------------------------- OPERATORS ------------------------------
Dim oper As String()
Dim operatori As String = Cartella_con_liste_parole& "Operators.txt"
EvidenziaDaArray(operatori, oper, Color.DodgerBlue)
'--------------------------------- OPERATORS ------------------------------
'--------------------------------- DATA TYPES ------------------------------
Dim tip As String()
Dim tipi As String = Cartella_con_liste_parole& "Data Types.txt"
EvidenziaDaArray(tipi, tip, Color.DodgerBlue)
'--------------------------------- DATA TYPES ------------------------------
'--------------------------------- MODIFIERS ------------------------------
Dim modif As String()
Dim modificatori As String = Cartella_con_liste_parole& "Modifiers.txt"
EvidenziaDaArray(modificatori, modif, Color.DodgerBlue)
'--------------------------------- MODIFIERS ------------------------------
'--------------------------------- CLAUSES ------------------------------
Dim claus As String()
Dim clausole As String = Cartella_con_liste_parole& "Clauses.txt"
EvidenziaDaArray(clausole, claus, Color.DodgerBlue)
'--------------------------------- CLAUSES ------------------------------
end sub
Private sub EvidenziaDaAburray(ByVal origine As String, ByVal elenco As String(), ByVal colore As Color)
Dim indiceArr As Integer = 0
leggi = IO.File.OpenText(origine)
Do While leggi.Peek >= 0
ReDim Preserve elenco(indiceArr)
elenco(indiceArr) = leggi.ReadLine()
indiceArr += 1
Loop
leggi.Close()
Dim posizione As Integer = -1
For Each parola In elenco
Do
posizione = RichTextBox1.Find(parola, posizione + 1,
RichTextBoxFinds.MatchCase)
If posizione > -1 Then
RichTextBox1.Select(posizione, parola.Length)
RichTextBox1.SelectionColor = colore
End If
Loop While posizione <> -1 And posizione <= RichTextBox1.Text.Length - 1
Next
end sub
Ringrazio anticipatamente chiunque sappia (e abbia la bontà di) illuminarmi
Ciao a tutti
Adam