Importare file di dati

giovedì 24 aprile 2008 - 08.48

Meryotta Profilo | Newbie

Salve a tutti, avrei un questito da porre.

Ho un file di testo (txt) con all'interno alcuni dati separati da ; (es. Cod. Articolo; Descrizione; Prezzo; Quantità; ecc)

ogni singola riga del file di testo in questione contiene questi dati.

Come faccio nel momento in cui li importo con un piccolo programmino in Visual Basic a dire al programma che i dati sono separati da ; e che quindi ogni volta che trova un ; deve mettere il singolo dato in un campo diverso?

Mentre facevo alcune prove, sembrava che ci fossi riuscita, ma mi sono accorta che quando trova nella riga un dato che contiene una virgola, ad es. un prezzo € 1,50 ; si ferma alla virgola, come se per lui il delimitatore fosse la , e non il ;

Grazie per l'aiuto!!

aiedail92 Profilo | Expert

Ciao

Potresti leggere il file riga per riga col metodo ReadLine, e poi eseguire uno Split sulla stringa ottenuta per separare fra loro i campi:

'Serve per leggere il file Dim stream As New StreamReader("C:\File.txt") 'Una singola riga del file Dim riga As String 'L'array contenente i valori di ogni riga Dim valori() As String 'Leggo l'intero file While (Not stream.EndOfStream) 'Leggo la riga riga = stream.ReadLine() 'La divido in occorrenza dei ";" valori = riga.Split(";") 'Imposti ciò che ti serve dai valori ottenuti '... End While

Luca

Meryotta Profilo | Newbie

Grazie per la risposta. Ho riscontrato però alcuni problemi :
La dichiarazione dim stream as new StreamReader(mio file) mi dà errore conseguentemente anche stream.ReadLine()
Non riesco ancora a sbloccare la situazione, devo forse inserire anche qualche altra cosa??

aiedail92 Profilo | Expert

Ciao

Scusa se non ti ho risposto prima, ma non ne ho avuto modo.

Sai dirmi che errore ti da? L'elenco degli errori che possono essere generati è questo:

System.UnauthorizedAccessException: Accesso negato.
System.ArgumentException: path è una stringa vuota (""). -oppure- path contiene il nome di una periferica di sistema (com1, com2 e così via).
System.ArgumentNullException: path è null.
System.IO.DirectoryNotFoundException: Il percorso specificato non è valido, poiché, ad esempio, si trova su un'unità non connessa.
System.IO.PathTooLongException: Il percorso, il nome file o entrambi superano la lunghezza massima definita dal sistema. Su piattaforme Windows, ad esempio, i percorsi devono essere composti di un numero di caratteri inferiore a 248 e i nomi file devono essere composti di un numero di caratteri inferiore a 260.
System.IO.IOException: path include una sintassi non corretta o non valida per il nome file, il nome della directory o l'etichetta del volume.
System.Security.SecurityException: Il chiamante non dispone dell'autorizzazione necessaria.

Controlla qual è il nome dell'eccezione generata e fammi sapare

Luca

Meryotta Profilo | Newbie

Allora:
alla prima riga "Dim stream As New StreamReader("C:\File.txt")" ovviamente con il percorso del mio file, mi dice "errore di sintassi"

se non metto il percorso "Dim stream As New StreamReader" mi dice "tipo definito dall'utente non definito"

a questo punto mi chiedo: ma devo forse mettere qualche riferimento nel mio progetto o fare qualcosa del genere?

P.S.: mi sono limitata a copiare il tuo codice (con il percorso che punta al mio file) in un command button. Non ho scritto null'altro!!!!

aiedail92 Profilo | Expert

Ciao

Prova ad importare lo spazio dei nomi System.IO (Imports System.IO)

Luca

Meryotta Profilo | Newbie

Non riesco a trovare lo spazio dei nomi che mi hai indicato, e documentandomi un po in rete mi viene da chiederti: ma tutto questo è forse per VB Net? Io sto programmando in Visual Basic 6.0 e temo che il problema sia proprio il fatto che il codice che mi hai postato è per .Net mentre io ho bisogno del codice per VB 6.0

Comunque riprovo ancora a cercare una qualche soluzione, ti faccio sapere se ci sono delle novità!!

aiedail92 Profilo | Expert

Mea culpa, il codice che ti ho dato è per VB.Net

Luca

Meryotta Profilo | Newbie

mhmhmh!!! Allora non ho speranze di risolvere il problema?

Mi sa che dovrò cercare un'altra soluzione!!!!

aiedail92 Profilo | Expert

Non ho seguito molto il VB6, comunque prova a vedere se così funziona:

Sub tuaSub() Open "C:\File.txt" For Input As #1 Dim line As String Do Line Input #1, line Dim values() As String values = Split(line, ";") Loop Until EOF(1) Close #1 End Sub

É codice VBA, ma dovrebbe andar bene anche col VB6 (da quel che ho visto in rete)

Luca

Meryotta Profilo | Newbie

Grazie mille, per i consigli! Proverò con questo e ti farò sapere al più presto!!

Grazie ancora!!

Ho provato e FUNZIONA!!!!

Tra le tante prove ho anche inserito il codice seguente e funziona lo stesso ma non ho capito cosa faccio in realtà. Mi sembra più chiaro ed immediato quello che mi hai fornito tu!

Per conoscenza personale sapresti darmi una spiegazione del codice seguente??

Const ForReading = 1, ForWriting = 2
Dim fso, f

Set fso = CreateObject("Scripting.FileSystemObject") <--- qui non mi è chiaro
Set f = fso.OpenTextFile("C:\File.txt", ForReading)

Do While f.AtEndOfStream <> True

Dim valori() As string
riga = f.ReadLine
valori = Split(riga, ";")

Loop


Grazie ancora per i preziosi consigli.

aiedail92 Profilo | Expert

Ciao

Con quella riga di codice non fai altro che creare un oggetto ActiveX di tipo "Scripting.FileSystemObjext", che viene usato per lavorare col FileSystem.

In seguito usi quell'oggetto per aprire il file e leggere i valori fintantoché non è stata raggiunta la fine del flusso. Se usi quel cosice, alla fine devi inserire una chiamata a f.Close per chiudere il file e renderlo disponibile agli altri processi:

... Loop Call f.Close

Luca

Albitex Profilo | Newbie

Ciao, ho letto la tua risposta , all'amico utente. Io credo di avere lo stesso problema. Vorrei importare dei testi , in un database . (delle partite di scacchi). Se seguendo il tutorial della Microsoft,
creo una tabella in Visual B. Express , riesco ad importare una mossa per volta. Ma io vorrei importare una partita alla volta . Secondo te potrei provare a usare il tuo listatino?
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