Salvataggio su file del contenuto di un ArrayList

lunedì 31 maggio 2010 - 12.33

boc_babi Profilo | Junior Member

Ciao a tutti,

vorrei salvare su un file txt il contenuto di un ArrayList.

Il mio codice è il seguente:

Public RICEZIONE As New ArrayList For ct = 0 To RICEZIONE.Count - 1 File.AppendAllText(MyPath & NomeFile, RICEZIONE(ct)) Next

Nell'ArrayList ci sono una serie di stringhe di pochi caratteri.

Il mio problema è che, quando vado ad aprire il file che viene creato, le varie stringhe sono separate da una seria indefinita di spazi (non li ho contati perchè sono veramente tanti).
Mi sarei aspettato di trovarmi le varie stringhe una attaccata all'altra (per quello che devo fare sarebbe l'ideale).

Sapete darmi una spiegazione ?

Grazie, BOC

nico839 Profilo | Senior Member

ciao...
hai provato magari a fare una cosa tipo

Public RICEZIONE As New ArrayList

For ct = 0 To RICEZIONE.Count - 1
File.AppendAllText(MyPath & NomeFile, RICEZIONE(ct).trim)
Next

oppure prima a crearti la stringa completa come vorresti sul file e poi scriverla

Public RICEZIONE As New ArrayList
public stringa as string = ""
For ct = 0 To RICEZIONE.Count - 1
stringa = stringa + RICEZIONE(ct).trim
Next

File.AppendAllText(MyPath & NomeFile, stringa)
Ciao.
Nicolas

boc_babi Profilo | Junior Member

Grazie per il consiglio Nicolas.

Il trim non lo accetta. Ho provato a seguire le tue indicazioni (senza trim) ma il file di output è identico al mio originale.
Tanti spazi tra una stringa e l'altra.

Grazie, BOC

lanfra Profilo | Senior Member

ti conviene scorrere tutto l'Array e memorizzarti i valori in una variabile [es. stringa], in modo che siano tutti uniti, sucessivamente vai a scrivere la tua variabile stringa sul file.
Lanfra

boc_babi Profilo | Junior Member

Ciao Lanfra,

quando ho letto la tua risposta mi sono detto: come ho fatto a non pensarci ?

Purtroppo però il risultato è lo stesso; le stringhe sono presenti nel file di output, ma sono distanziate da moltissimi spazi.

Il codice è diventato:

Dim stringa As String = "" For ct = 0 To RICEZIONE.Count - 1 stringa = stringa & RICEZIONE(ct) Next File.AppendAllText(MyPath & NomeFile, stringa)

Lo stato dell'ArrayList è allegato come immagine (ho all'interno 6 stringhe).


300x123 13Kb


Mi viene il dubbio che magari l'ArrayList attacchi in fondo alla stringa un tot di caratteri per arrivare alla sua lunghezza massima.
E' solo una supposizione.

Idee ?

lanfra Profilo | Senior Member

Dim stringa As String = ""

For ct = 0 To RICEZIONE.Count - 1
stringa = stringa & RICEZIONE(ct)
Next

File.AppendAllText(MyPath & NomeFile, stringa)

Consiglio per dichiarazione variabile

Dim stringa As String = string.empty oppure Dim stringa As String = nothing

Poi, come viene popolato l'array? Non ha righe precise? Crealo in modo dinamico quando lo popoli, utilizza
dim aDati() as string 'popola array for I =0 to XXX Redim Preserve aDati(I) aDati(I)="stringa" + I next Dim swTxt As StreamWriter swTxt = File.CreateText(PathFile & "\" & NomeFileTxt) 'scrivi file for I=0 to Ubound(aDati) swTxt.Write(aDati(I)) End While swTxt.Flush() swTxt.Close()
Lanfra

boc_babi Profilo | Junior Member

Ciao,

con i vostri suggerimenti ho risolto l'arcano.

L'ArrayList veniva composto da dati che ricevevo tramite la porta ethernet.
Peccato che indipendentemente dalla quantità di dati "validi", il socket passa sempre 8192 caratteri (poi magari ci sono metodi che permettono di farsi passare solo i dati "validi", ma non lo so)

Quindi, come suggeriva Nico839, ho utilizzato il TrimEnd sulla ricezione dal socket per poi analizzare i dati "ripuliti dai caratteri non necessari".

Grazie a tutti, BOC

nico839 Profilo | Senior Member

prego..è stato un piacere esserti stato utile :-)
Ciao.
Nicolas

lanfra Profilo | Senior Member


Lanfra
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5