Posts
163
Comments
179
Trackbacks
5
Scrittura su disco di una stringa di caratteri ASCII

Cosa c'e' di più semplice di salvare una stringa di caratteri su un file di testo? Usiamo uno StreamWriter, richiamiamo il metodo Write passandogli la stringa. Fine.
Effettivamente così funziona. Ma iniziamo ad inserire qualche vincolo in più. Supponiamo che la stringa di input sia una stringa ASCII generata casualmente e il codice dei caratteri ASCII presenti vada da 0 a 255 (quindi viene utilizzata anche la tabella estesa). Supponiamo inoltre che il file debba avere una lunghezza prefissata, pari al numero di caratteri della stringa di input. Infine supponiamo che questo file debba essere elaborato da un vecchio programma che non può essere modificato.

Se passiamo il file generato dallo StreamWriter precedente otterremo un errore. Andando a spulciare la documentazione si può notare che l'oggetto StreamWriter utilizza come codifica predefinita l'UTF-8, che nel caso specifico non viene interpretata corettattamente dal vecchio programma.

L'oggetto StreamWriter mette a disposizione anche una serie overload, in cui è possibile specificare, anche la codifica da utilizzare. Possiamo quindi specificare la codifica ASCII e il gioco è fatto. Il codice seguente mostra un esempio di utilizzo:

  Public Sub WriteASCIIFile(ByVal fileName As String, ByVal content As String)
    Using sw As StreamWriter = New StreamWriter(fileName, False, Encoding.ASCII)
      sw.Write(content)
      sw.Close()
    End Using
  End Sub


Andando a verificare il file ottenuto, la dimensione è quella corretta e tutto sembra a posto. In realtà andando a guardare bene i lfile ottento, tutti i caratteri della tabella ASCII estesa sono stati sostituiti con dei punti interrogativi. Questo perchè la codifica ASCII utilizza 7 bit e quindi gestisce solo i caratteri con codici che vanno da 0 a 127.
La soluzione è quella di utilizzare l'encoding di default, che recupera la tabella dei codici ANSI definita nelle impostazioni internazionali, oppure utilizzare il metodo System.Text.Enconding.GetEncoding per recuperare una tabella di codici di decodifica specifica (l'elenco di tutte le codifiche disponibili nel sistema si ottiene chiamando il metodo System.Text.Enconding.GetEncodings).
Il codice precedente diventa quindi:

  Public Sub WriteASCIIFile(ByVal fileName As String, ByVal content As String)
    Using sw As StreamWriter = New StreamWriter(fileName, False, Encoding.Default)
      sw.Write(content)
      sw.Close()
    End Using
  End Sub
posted on venerdì 9 marzo 2007 11:20 Print
Comments
Gravatar
# re: Scrittura su disco di una stringa di caratteri ASCII
leo
09/05/2008 22:30
leo
Gravatar
# re: Scrittura su disco di una stringa di caratteri ASCII
Daniele
04/03/2009 20:30
Sei un grande. Mi hai risolto un problema che mi avrebbe mandato al manicomio.
Gravatar
# re: Scrittura su disco di una stringa di caratteri ASCII
giuseppe
07/08/2009 10:55
buon giorno

ho necessita' di acquisire una stringa ascii e salvarla in un file txt o xls. Se puoi mi puoi aiutare..

Grazie
Comments have been closed on this topic.
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.

La mia foto

Logo MCAD
Logo MCTS