top of page

Aero - pagina codici (3)

OPERAZIONI AVANZATE CON FILES E TESTI

 

1) Caricare e salvare solo determinati tipi di files

 

Utilizzando la funzione di filtro dei Filedialog (open o save) è possibile aprire o salvare formati prestabiliti. Ciò è molto utile per esempio nei lettori multimediali, che devono mostrare solo elementi media (audio e video) nella funzione ‘Apri file’. Oppure negli editor di testi, per stabilire in che formato salvare quanto è stato scritto, o per mostrare nelle cartelle solo i files di tipo testo.

I codici sotto ci permettono di filtrare per tipo file:

 

Apertura files multimediali (il form prevede un openfiledialog, un componente media player, e una textbox dove temporaneamente viene scritto il nome del file caricato (può anche essere resa invisibile all’ utente):

 

OpenFileDialog1.Filter = "Audio (*.mp3)|*.mp3|Audio (*.wav)|*.wav|Video (*.avi)|*.avi|Video (*.mpg)|*.mpg|Video (*.wmv)|*.wmv|All Files (*.*)|*.*"

OpenFileDialog1.ShowDialog()
 

TextBox1.Text = OpenFileDialog1.FileName

AxWindowsMediaPlayer1.URL = TextBox1.Text

 

Salvataggio di files di testo da una richtextbox (non necessita di aggiungere un savefiledialog al progetto, in quanto lo crea da codice):

 

Dim dlg As New SaveFileDialog, fName As String = String.Empty

Do

With dlg

.Title = "Salva File"

.Filter = "Rich text files (*.rtf)|*.rtf"

.AddExtension = True

.DefaultExt = "rtf"

If .ShowDialog = Windows.Forms.DialogResult.OK Then

fName = .FileName

RichTextBox1.SaveFile(fName, RichTextBoxStreamType.RichText)

Else

Exit Sub

End If

End With

Loop

 

Il codice qui sopra permette il salvataggio di un file in una directory qualsiasi.

Ora vedremo come limitare i percorsi.

 

 

2) Limitare il salvataggio (o l’ apertura) di un file a un certo percorso

 

Supponiamo che vogliate fare in modo che tutti i documenti salvati dalla vostra applicazione finiscano in una sottocartella, al di sopra della quale l’ utente non deve poter salire (es: c:\app\documents)

 

Il codice visto poco sopra dovrà subire una modifica di questo genere:

  • Dovremo definire una cartella ‘limite’ oltre la quale non salire

  • Dovremo verificare se al momento del salvataggio il FileName (che, ricordiamo, è coposto da path + nomefile + estensionefile) inizia con il percorso di quella cartella. Se questo criterio non è soddisfatto, dovremo segnalare l’ errore.

 

Aggiungeremo quindi nel ciclo With:

 

.InitialDirectory = “c:\app\documents\”

 

E modificheremo il ciclo If in questo modo:

 

If .ShowDialog = Windows.Forms.DialogResult.OK Then

If Not .FileName.StartsWith(.InitialDirectory) Then

MessageBox.Show("Non è possibile cambiare la cartella di destinazione del file", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Warning)

Else

fName = .FileName

RichTextBox1.SaveFile(fName, RichTextBoxStreamType.RichText)

Exit Do

End If

Else

Exit Sub

End If

 

 

3) Creare un mini dizionario.

 

Visual Basic .NET ha un tipo di oggetto Dizionario, che permette delle elaborazioni di stringe avanzate che si rendono necessarie quando trattiamo dati appaiati, cioè assimilabili allo schema "definizione – valore", che in VB.NET sono chiamati KeyValuePair e gestiti tramite .Key e .Value

 

Il seguente codice, lungo e articolato, permette di creare un mini dizionario. La parte grafica conterrà:

 

  • Textbox1 = casella di testo multi linea in cui compariranno le definizioni

  • Listbox1 = lista di parole caricate da file

  • Button1  = bottone per caricare il file di testo contenente le definizioni

 

Dim dict As New Dictionary(Of String, String)

 

    Private Sub button1_Click(sender As System.Object, _

                              e As System.EventArgs) _

                            Handles Button1.Click

        Using OFD As New OpenFileDialog

            With OFD

                .Filter = "Dict files (*.dict)|*.dict"

                If .ShowDialog = Windows.Forms.DialogResult.OK Then

                    LeggiDizionario(.FileName)

                End If

            End With

        End Using

    End Sub

 

    Private Sub LeggiDizionario(FullPathFileName As String)

 

        Dim lines As String() = IO.File.ReadAllLines(FullPathFileName)

 

        For Each line As String In lines

            Dim kv As KeyValuePair(Of String, String) = ToKeyValuePair(line)

            dict.Add(kv.Key, kv.Value)

            ListBox1.Items.Add(kv.Key)

        Next

 

    End Sub

 

    Public Function ToKeyValuePair(pair As String) _

                                   As KeyValuePair(Of String, String)

 

        Dim two As String() = pair.Split("/")

        Return New KeyValuePair(Of String, String)(two(0), two(1))

    End Function

    Private Sub listbox1_Click(sender As Object, _

                                           e As System.EventArgs) _

                                         Handles ListBox1.Click

        Dim lst As ListBox = DirectCast(ListBox1, ListBox)

        TextBox1.Clear()

        TextBox1.SelectedText = dict(lst.SelectedItem)

    End Sub

 

Nel codice sopra abbiamo utilizzato l’ estensione .dict per il file di testo contenente le definizioni.

Queste dovranno essere separate dai valori tramite il carattere “/”.

 

Il file di testo da caricare dovrà quindi avere questa struttura:

 

voce 1/definizione 1 può anche contenere spazi

voce 2/definizione 2 può anche contenere spazi

voce 3/definizione 3 può anche contenere spazi

 

 

bottom of page