Lettura file in vb.net

domenica 12 ottobre 2008 - 22.02

Elektromassa Profilo | Newbie

salve,
è possibile in vb.net leggere un file con nomi scritti uno dietro l'altro (come ad esempio "primo secondo terzo" etc.) nella stessa linea e poi quando viene importato assegnare i vari nomi a oggetti come leggere "primo" in una textbox e "secondo" in un altra textbox?
se è possibile vorrei anche un esempio di codice.

spero di essermi spiegato bene
Grazie in anticipo

alx_81 Profilo | Guru

>salve,
Ciao!

>è possibile in vb.net leggere un file con nomi scritti uno dietro
>l'altro (come ad esempio "primo secondo terzo" etc.) nella stessa
>linea e poi quando viene importato assegnare i vari nomi a
>oggetti come leggere "primo" in una textbox e "secondo" in un
>altra textbox?
Certo.. devi usare il namespace System.IO.
Nella fattispecie devi usare uno streamReader per leggere i valori dal file. Magari leggendo la riga col Metodo ReadLine.

System.IO Namespace
http://msdn.microsoft.com/en-us/library/system.io.aspx

StreamReader Class
http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx

StreamReader.ReadLine Method
http://msdn.microsoft.com/en-us/library/system.io.streamreader.readline(VS.80).aspx

>se è possibile vorrei anche un esempio di codice.
Per ora prova una tua routine con quello che ti ho passato

>Grazie in anticipo
Di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

luigidibiasi Profilo | Guru

>>salve,
>>è possibile in vb.net leggere un file con nomi scritti uno dietro l'altro (come ad esempio "primo secondo terzo" etc.) nella stessa linea

Assumendo che i nomi siano separati da spazio puoi usare questo codice per recuperarli e inserirteli in un array

Dim myr As IO.StreamReader = New IO.StreamReader("C:\file.txt")
Dim theString = myr.ReadToEnd()
Dim listaNomi() = theString.Split(" ")


>>e poi quando viene importato assegnare i vari nomi a oggetti come leggere "primo" in una textbox e "secondo" in un altra textbox?
>>se è possibile vorrei anche un esempio di codice.

non ho capito che uso vuoi farne di questi nomi.... vuoi cambiare il nome degli oggetti a runtime o cosa?

>>spero di essermi spiegato bene
>>Grazie in anticipo
Luigi Di Biasi


P.S: alx_81scusami non ho visto che avevi già risposto

Elektromassa Profilo | Newbie

scusate ma mi sono accorto di non aver chiesto quello che mi serviva
non necessito di applicare la questa questione ad una lettura di file ma a una variabile.
Mi spiego meglio:
sto facendo un applicazione che dialoga via rete composta da un server ed un client (attraverso i socket) per gestire la parallela del server che controlla un circuito con 8 uscite (per controllare dei carichi elettrici).
ogni uscita ha un propio nome (tipo "Luce" , "alimentatore" etc ) che verrà visualizzata nell' intestazione di una groupbox che contiene il pulsante di switch dello stato dell' uscita e una label che visualizza lo stato attuale (ON o OFF).
i nomi delle uscite vorrei salvarli nel server e fare in modo che ad ogni connessione del client il server gli invii le otto intestazioni delle groupbox e per questo vorrei "fondere" le otto intestazioni in un unica stringa da inviare attraverso i socket che poi il client dovrà riseparare ed ri-assegnarle come intestazione alle otto ripsettive groupbox.

vi ringrazio per la tempestività delle risposte

aiedail92 Profilo | Expert

Ciao

Quello che vuoi fare non è molto diverso dalle soluzioni che già ti sono state proposte. Puoi costruire la stringa con uno stringbuilder oppure inserirla già codificata nell'applicazione, quindi dopo averla inviata coi socket e ricevuta dall'altra parte usi il metodo String.Split per ottenere i vari valori.

Ecco un esempio col codice:

'Lato server: 'La stringa contiene tutti gli header separati da spazi Dim headers As String = "Luce Alimentatore Altro1 Altro2 Ecc" Sub SendHeaders(ByVal clientIP As String, ByVal port As Integer) 'Crea il socket Dim sock As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 'Associa il socket (necessario per poter usare listen) sock.Bind(New IPEndPoint(IPAddress.Any, 800)) 'Resta in attesa di connessioni da parte del client sock.Listen(-1) 'Accetta la connessione dal client e ottiene il 'socket usato per la comunicazione Dim connSock As Socket = sock.Accept() 'Ottiene la stringa come array di byte Dim data As Byte() = Encoding.ASCII.GetBytes(headers) 'Invia i dati connSock.Send(data, SocketFlags.None) 'Chiude i socket sock.Close() connSock.Close() End Sub 'Lato client: Sub ReciveHeaders(ByVal serverIP As String, ByVal port As Integer) 'Crea il socket Dim sock As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 'Connette il socket all'indirizzo del server sock.Connect(serverIP, port) 'L'array dove vengono ricevuti i dati Dim data(100) As Byte 'Riceve i dati come array di byte sock.Receive(data, SocketFlags.None) 'Converte i byte in una stringa Dim headers As String = Encoding.ASCII.GetString(data) 'Chiude il socket sock.Close() 'Splitta la stringa nei vari headers Dim str As String() = headers.Split(" ") 'Assegna a ogni groupbox il proprio header: Me.GroupBox1.Text = str(0) Me.GroupBox2.Text = str(1) Me.GroupBox3.Text = str(3) 'ecc End Sub

Luca

Elektromassa Profilo | Newbie

grazie 1000
quindi in pratica si usa il comando split dandogli il carattere che indica i separatori
ho provato lo split con una stringa con vari valori e funziona!!!

aiedail92 Profilo | Expert

Sì, lo scopo dello Split è quello, puoi anche passare StringSplitOptions.RemoveEmptyEntries come secondo parametro per eliminare gli elementi vuoti dell'array (ad esempio dovuti a spazi multipli)


P.S: Accetta le risposte che ti hanno aiutato per segnalare il thread come risolto

Luca
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