domenica 18 giugno 2017

.Net ripulire i file di testo dai caratteri speciali con VB.Net e C#

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-realizzare-un-programma-per-ottimizz_1531.aspx


L’articolo che proponiamo oggi riguarda la possibilità di realizzare un programma di tipo “Windows Application” tramite il linguaggio di programmazione Visual Basic .Net e C#, con Visual Studio 2015 community, con il quale leggere e ottimizzare tutti i file di testo, per ripulirli dai caratteri speciali.
Può capitare, che in un contesto con vari sistemi operativi, tra Unix e Windows, lo scambio dei file, può comportare la presenza di alcuni caratteri speciali, che Windows non riconosce.
L’articolo vuole guidare il lettore a realizzare un semplice programma per la bonifica di tali file.

Creazione del progetto

Prima di tutto, bisogna creare un nuovo progetto di tipo “Windows Application” con Visual Studio 2015, con il linguaggio di proprio interesse.
Aggiungiamo alla nostra form, un pulsante, che all’evento click eseguirà determinate azioni.
Nel file di configurazione, nel file App.config, scriviamo due parametri, uno che indica il percorso dove si trovano i file, e l’altro se esaminare un file o un certo tipo di file.
Si riporta qui di seguito il frammento di codice.


  <appSettings >

    <add key="Percorso" value="E:\testfile\"/>

    <add key="NomeFile" value="*.txt"/>

</appSettings>


Stesura del codice

Facciamo doppio click sul pulsante, ed in visualizzazione codice, in alto sopra ogni dichiarazione, aggiungiamo lo spazio dei nomi che ci permetterà di gestire i file di testo, le regular expression e i file di configurazione.
Si riporta qui di seguito le dichiarazioni per entrambi i linguaggi.


VB.Net

Imports System.Configuration

Imports System.IO

Imports System.Text.RegularExpressions
C#

using System.Configuration;

using System.Collections.Specialized;

using System.Text.RegularExpressions;


Ora passiamo nell’evento click del pulsante, nel quale dobbiamo estrapolare le informazioni dal file di configurazione e poi esaminare il file o i file presenti nella cartella indicata nel file di configurazione.
Qui di seguito si riporta tale dichiarazione.


VB.Net

  Private Sub btnOttimizza_Click(sender As Object, e As EventArgs) Handles btnOttimizza.Click

        Dim Percorso As String = ConfigurationManager.AppSettings("Percorso")

        Dim NomeFile As String = ConfigurationManager.AppSettings("NomeFile")

        For Each percorsoFile As [String] In Directory.GetFiles(Percorso, NomeFile)

            LeggiCreaFile(percorsoFile)

        Next

    End Sub

C#

private void btnOttimizza_Click(object sender, EventArgs e)

        {

            string Percorso = ConfigurationManager.AppSettings["Percorso"];

            string NomeFile = ConfigurationManager.AppSettings["NomeFile"];

            foreach (String percorsoFile in Directory.GetFiles(Percorso, NomeFile))

            {

                LeggiCreaFile(percorsoFile);

 

            }

 
        }



Si crea una funzione, che dato il percorso e nome del file, esamina il suo contenuto, riga per riga, e poi verifica la presenza di caratteri speciale, che tramite un’altra funzione (TrascodificaTesto) converte il testo anomalo in quello da noi indicato.
Al tempo stesso nella funzione viene scritto in un file temporaneo, la riga bonificata dai caratteri speciali.
Si riporta qui di seguito tali dichiarazioni per entrambi linguaggi.


VB.Net

Private Sub LeggiCreaFile(pPercorsoFile As String)

        Try

 

            Dim FileTemporaneo As String = DateTime.Now.ToString("yyyyMMddhhmmss") + "_" + Path.GetFileName(pPercorsoFile)

            FileTemporaneo = Path.Combine(Path.GetDirectoryName(pPercorsoFile), FileTemporaneo)

 

            Using ScriviFile As New System.IO.StreamWriter(FileTemporaneo, False)

 

 

                Dim letturafile As New System.IO.StreamReader(pPercorsoFile)

                Dim Linea As String = ""

                Dim ContaRiga As Int32 = 0

                Linea = letturafile.ReadLine()

                While Linea IsNot Nothing

 

 

                    ScriviFile.WriteLine(TrascodificaTesto(Linea))

                    ContaRiga += 1

                    If ContaRiga = 100 Then

                        ScriviFile.Flush()

                        ContaRiga = 0

 

                    End If

                    Linea = letturafile.ReadLine()

                End While

                If ContaRiga > 0 Then

                    ScriviFile.Flush()

                End If

 

 

 

                letturafile.Close()

            End Using

 

        Catch ex As Exception

 

            Throw

        End Try

 

 

    End Sub

C#

private void LeggiCreaFile(string pPercorsoFile)

        {

            try

            {

 

                string FileTemporaneo = DateTime.Now.ToString("yyyyMMddhhmmss") + "_" + Path.GetFileName(pPercorsoFile);

                FileTemporaneo = Path.Combine(Path.GetDirectoryName(pPercorsoFile), FileTemporaneo);

 

                using (System.IO.StreamWriter ScriviFile = new System.IO.StreamWriter(FileTemporaneo, false))

                {

                   System.IO.StreamReader letturafile = new System.IO.StreamReader(pPercorsoFile);

                    string Linea = "";

                    Int32 ContaRiga = 0;

 

                    while ((Linea = letturafile.ReadLine()) != null)

                    {

                         ScriviFile.WriteLine(TrascodificaTesto(Linea));

                        ContaRiga += 1;

                        if (ContaRiga == 100)

                        {

                            ScriviFile.Flush();

                            ContaRiga = 0;

                        }


                    }

                    if (ContaRiga > 0)

                    {
                        ScriviFile.Flush();

                    }

                    letturafile.Close();

  
                }

               }

            catch (Exception ex)

            {
                throw;
            }

 

 

        }


A questo punto scriviamo la funzione che permette di bonificare il contenuto del file, con un’espressione regolare, con i valori da noi indicati.
Qui di seguito si riporta tale dichiarazione per entrambi linguaggi.


VB.Net

Private Function TrascodificaTesto(pTesto As String) As String

        pTesto = Regex.Replace(pTesto, "[åàáâãäæ]", "a")

        pTesto = Regex.Replace(pTesto, "[ÁÀÄÃÅÂ]", "A")

        pTesto = Regex.Replace(pTesto, "[èéêë]", "e")

        pTesto = Regex.Replace(pTesto, "[ÈÉËÊ]", "E")

        pTesto = Regex.Replace(pTesto, "[ìíîï]", "i")

        pTesto = Regex.Replace(pTesto, "[ÍÌÏÎ]", "I")

        pTesto = Regex.Replace(pTesto, "[òóôõö]", "o")

        pTesto = Regex.Replace(pTesto, "[ÓÒÖÔÕ]", "O")

        pTesto = Regex.Replace(pTesto, "[ùúûü]", "u")

        pTesto = Regex.Replace(pTesto, "[ÚÙÛÜ]", "U")

        pTesto = Regex.Replace(pTesto, "[¥]", "N")

        pTesto = Regex.Replace(pTesto, "[ý]", "y")

        pTesto = Regex.Replace(pTesto, "[Š]", "S")

        pTesto = Regex.Replace(pTesto, "[š]", "s")

        pTesto = Regex.Replace(pTesto, "[ç]", "c")

        pTesto = Regex.Replace(pTesto, "[ñ]", "n")

        pTesto = Regex.Replace(pTesto, "[Ñ]", "N")

        pTesto = Regex.Replace(pTesto, "[ž]", "z")

        pTesto = Regex.Replace(pTesto, "[[]", "(")

        pTesto = Regex.Replace(pTesto, "[]]", ")")

        pTesto = Regex.Replace(pTesto, "[@]", " ")

        pTesto = Regex.Replace(pTesto, "[#]", " ")

        pTesto = Regex.Replace(pTesto, "[ø]", " ")

        pTesto = Regex.Replace(pTesto, "[^\u0000-\u007F]", " ")

 

        Return pTesto

    End Function

C#

 

string TrascodificaTesto(string pTesto)

        {

 

 

         

          

            pTesto = Regex.Replace(pTesto, "[åàáâãäæ]", "a");

            pTesto = Regex.Replace(pTesto, "[ÁÀÄÃÅÂ]", "A");

            pTesto = Regex.Replace(pTesto, "[èéêë]", "e");

            pTesto = Regex.Replace(pTesto, "[ÈÉËÊ]", "E");

            pTesto = Regex.Replace(pTesto, "[ìíîï]", "i");

            pTesto = Regex.Replace(pTesto, "[ÍÌÏÎ]", "I");

            pTesto = Regex.Replace(pTesto, "[òóôõö]", "o");

            pTesto = Regex.Replace(pTesto, "[ÓÒÖÔÕ]", "O");

            pTesto = Regex.Replace(pTesto, "[ùúûü]", "u");

            pTesto = Regex.Replace(pTesto, "[ÚÙÛÜ]", "U");

            pTesto = Regex.Replace(pTesto, "[¥]", "N");

            pTesto = Regex.Replace(pTesto, "[ý]", "y");

            pTesto = Regex.Replace(pTesto, "[Š]", "S");

            pTesto = Regex.Replace(pTesto, "[š]", "s");

            pTesto = Regex.Replace(pTesto, "[ç]", "c");

            pTesto = Regex.Replace(pTesto, "[ñ]", "n");

            pTesto = Regex.Replace(pTesto, "[Ñ]", "N");

            pTesto = Regex.Replace(pTesto, "[ž]", "z");

            pTesto = Regex.Replace(pTesto, "[[]", "(");

            pTesto = Regex.Replace(pTesto, "[]]", ")");

            pTesto = Regex.Replace(pTesto, "[@]", " ");

            pTesto = Regex.Replace(pTesto, "[#]", " ");

            pTesto = Regex.Replace(pTesto, "[ø]", " ");

            pTesto = Regex.Replace(pTesto, @"[^\u0000-\u007F]", " ");

 

            return pTesto;

        }

 

Conclusioni

L’articolo ha voluto fornire al lettore delle basi sulla realizzazione di un semplice programma per la gestione dei file di testo, per la relativa verifica del formato.
Una tecnica che può tornare utile, nei contesti in cui si fa uso intenso di file, soprattutto con diversi sistemi operativi come possono essere l’integrazione tra Unix e Windows.
Naturalmente questo esempio di codice, di un possibile programma può essere esteso, realizzando programmi di una certa funzionalità e complessità.

venerdì 16 giugno 2017

Download ebook introduzione programmazione Xamarin

Dal seguente sito https://info.microsoft.com/WE-Azure-CNTNT-FY17-04Apr-10-GuidaXamarinItaly-318779_01Registration-ForminBody.html è possibile scaricare un ebook in lingua italiana di circa 150 pagine in formato pdf riguardante la programmazione Xamarin.
Per scaricare l'ebook, bisogna registrarsi gratuitamente.
Per maggiori informazioni e download visitate il sito indicato.

giovedì 15 giugno 2017

Download Kodu Game Lab

Nel mese di marzo 2017, rilasciata la nuova versione di Kodu, un software gratuito per far imparare i bambini la programmazione tramite l'uso di immagini.
Il programma è idoneo ai bambini delle classi elementari e medie, che vogliono imparare la programmazione di videogiochi. Ideale anche nei piani formativi scolastici.
Per il download e maggiori informazioni, qui https://www.microsoft.com/en-us/download/details.aspx?id=10056

martedì 13 giugno 2017

Evento gratuito Ferrari Pit Stop for GENERO

FourJS
Un evento molto bello, che riguarda la creazione di siti responsive, tramite software.
L'evento  gratuito Ferrari Pit Stop for GENERO  è aperto a tutti e si terrà presso il museo Ferrari a Maranello, dove al termine i partecipanti potranno partecipare a simpatiche iniziative legati al mondo dei motori.
La creazione di siti visibili su più dispositivi è sempre più richiesto, con questo evento i partecipanti scopriranno come realizzarli.
Qui http://www.reweb.it/agenda_ferrari/ è possibile consultare l'agenda mentre qui http://www.reweb.it/iscrizione_ferrari-pit-stop-for-genero-19-giugno/ il modulo di partecipazione.

sabato 10 giugno 2017

Download free ebook R programming

R-Programming Succinctly

Dal seguente sito https://www.syncfusion.com/resources/techportal/details/ebooks/R-Programming_Succinctly potete scaricare un ebook in formato pdf o per dispositivi mobile in lingua inglese riguardante R programming.
L'ebook è composto di circa 108.
Per scaricare il libro bisogna registrarsi gratuitamente al sito.

venerdì 9 giugno 2017

Evento gratuito Tech Lab: Open Management Platform




Due date per due appuntamenti di grande importanza in ambito di open source, organizzati da Redhat.
La prima si terrà a Milano il 20 giugno 2017 e la seconda il 22 giugno 2017 a Roma.
L'argomento è la gestione dell'automazione interna aziendale tramite appunto determinati strumenti informatici.
Per maggiori informazioni, iscrizioni ed altro, visitate il seguente sito https://www.redhat.com/it/about/events/tech-lab-open-management-platform-italia-2017

giovedì 8 giugno 2017

VBA rilevare il numero delle pagine in un file PDF

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_vba-rilevare-il-numero-delle-pagine-in-u_1525.aspx

In questo articolo, vediamo come realizzare una semplice procedura che ci permette di leggere il numero di pagine all’interno di un file PDF.
Il codice è scritto in Visual Basic for Application, da utilizzare nel programma Microsoft Office (per esempio Microsoft Word o Microsoft Excel) , da inserire in una macro o in qualche form all’interno di qualche applicativo.
Da notare che il numero di pagine che andiamo a rilevare riguarda tutti quei file che non hanno la protezione (password) e che all’interno è presente il testo e non immagine, altrimenti lo script rileverà 0 pagine.

Stesura del codice

Apriamo il programma Microsoft Word o Microsoft Excel (qualsiasi versione va bene) e selezioniamo la scheda con la voce “Sviluppo”, nel caso che non è presente, dobbiamo selezionare nella voce “Opzioni” il menu “Scheda Sviluppo” e mettere la spunta.
A questo punto, selezioniamo dal menu “Sviluppo” la voce “Visual Basic”, verrà aperto l’editor di Visual Basic Application.
In alto prima di ogni dichiarazione, inseriamo l’istruzione per l’obbligo di dichiarazione.
Qui di seguito l’esempio di codice.

Option Explicit

A questo punto si crea una funzione, che ha lo scopo di aprire in file pdf, leggere il contenuto al suo interno, verificare le varie sezioni e contarle.
Qui di seguito il frammento di codice di tale funzione.

Private Function OttieniNumeroPaginePdf(PercorsoNomeFile As String) As Long
Dim File As Long
Dim bufferFile As String
Dim ArrayPagine() As String
Dim inizio As Long
Dim fine As Long
Dim pagineElaboro As Long
Dim TotaliPagine As Long
Dim contatore As Long
File = FreeFile()
'Apro il file Pdf in modo che verifico il contenuto
Open PercorsoNomeFile For Binary As #File
bufferFile = String$(LOF(File), Chr$(0))
'Scrivo nel buffer
Get #File, , bufferFile
'chiudo la gestione della lettura del file
Close #File
'Intercetto le sezioni
ArrayPagine = Split(bufferFile, "/Type/Pages")
For contatore = 1 To UBound(ArrayPagine)
inizio = InStr(1, ArrayPagine(contatore), "/Count ")
If inizio Then
inizio = inizio + 7
fine = inizio
Do While IsNumeric(Mid$(ArrayPagine(contatore), fine, 1))
fine = fine + 1
Loop
pagineElaboro = CLng(Mid$(ArrayPagine(contatore), inizio, fine - inizio))
TotaliPagine = TotaliPagine + pagineElaboro
End If
Next contatore
OttieniNumeroPaginePdf = TotaliPagine
End Function


Ora non ci resta che creare la nostra funzione che verrà eseguita come macro, con il quale viene eseguita tale funzione.
Qui di seguito tale dichiarazioni

Sub EseguiContaPagine()
MsgBox (OttieniNumeroPaginePdf("E:\test.pdf"))
End Sub


Conclusioni

L’articolo ha voluto fornire una tecnica di come rilevare informazioni da un file PDF, in particolare il numero di pagine.
Con l’aggiunta di Visual Basic application, gli applicativi office migliorano la loro produttiva, integrando quelle funzionalità che non sono presenti nell’applicativo stesso, ed al tempo stesso estendere ulteriori programmi.
Un linguaggio semplice alla portata di tutti, con interessanti potenzialità.

sabato 3 giugno 2017

Sito online per la gestione dei file pdf

Negli ultimi mesi, sempre più siti stanno nascendo nella gestione dei file PDF.
Quello che segnalo oggi, è tools on line che non richiede nessuna registrazione ed email, che permette di apportare modifiche ai file PDF.
Tra queste, ricordiamo la conversione, la rimozione della password, l'inserimento di filigrana, la rotazione e tante altre funzionalità.
Il sito è in lingua italiana, ed è visibile qui http://www.ilovepdf.com/it

venerdì 2 giugno 2017

Download Free ebook Azure Cosmos DB and DocumentDB Succinctly

Azure Cosmos DB and DocumentDB Succinctly

Un nuovo ebook, in lingua inglese in formato PDF o per dispositivo mobile, riguardante il cloud.
Il libro Azure Cosmos DB and DocumentDB Succinctly  scaricabile dal seguente sito https://www.syncfusion.com/resources/techportal/details/ebooks/Azure_Cosmos_DB_and_DocumentDB_Succinctly illustra in maniera introduttiva alcuni aspetti di Azure.
Per il download e maggiori informazioni visitate il sito indicato.

giovedì 1 giugno 2017

Sito gratuito di file condivisione e hosting

Se state cercando uno spazio web, che permette di salvare i file, oppure di condividerli con altri utenti, il seguente sito http://freetrial.boolebox.it/filesharing.html offre gratuitamente, previa registrazione gratuita, uno spazio per la condivisione dei file o solo per la gestione personale come archivio, di ben 10 gb.
Il sito è in lingua italiana ed impostando nelle opzioni la lingua "Italiano" si hanno le funzionalità tradotte in italiano.
Per maggiori informazioni ed utilizzo visitate il seguente sito http://freetrial.boolebox.it/filesharing.html