Aprire file di testo ed estrarne i numeri, separati da CR o da ;

domenica 08 febbraio 2009 - 15.27

Gianni77 Profilo | Junior Member

Ho scritto un pezzetto di codice per estrarre dei numeri da files di testo ed inserirli in una listbox (che nel codice è lbxValues). La condizione è che la funzione deve riconoscere se vi sono dei numeri in fila separati da ; o i numeri sono inseriti nel file di testo uno dietro l'altro (cioè separati da CRLF) o situazioni miste. Il codice che ho scritto è il seguente:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice funziona se nel file ci sono solo tutti numeri in fila separati da ; o solo numeri separati da CRLF, se c'è una situazione mista, prende soltanto una parte di numeri e non capisco perchè...

alexmed Profilo | Guru

Ciao
Dovresti farci vedere anche la struttura del file da cui vuoi prelevare i valori
Ho provato con una file con queste righe

10; 11; 12; AA; X13
14
15
16
17
18;19;20; 21 21 23 24
25

ed il risultato della tua funzione è corretto

10
11
12
14
15
16
17
18
19
20
25

Ciao



alexmed

luigidibiasi Profilo | Guru

Ciao,

>Ho scritto un pezzetto di codice per estrarre dei numeri da files
>di testo ed inserirli in una listbox (che nel codice è lbxValues).
>La condizione è che la funzione deve riconoscere se vi sono dei
>numeri in fila separati da ; o i numeri sono inseriti nel file
>di testo uno dietro l'altro (cioè separati da CRLF) o situazioni
>miste. Il codice che ho scritto è il seguente:

invece di leggere il file linea per linea puoi provare a leggerlo e inserirlo tutto in una stringa
con il metodo ReadToEnd

Dim k As IO.TextReader = New IO.StreamReader("C:\test.t")
Dim t As String = k.ReadToEnd()

sostituire ad eventuali caratteri di separazione lo spazio uniformando la separazione di tutti i numeri

t = t.Replace(";", " ")
t = t.Replace(":", " ")

alla fine eseguire lo split

Dim listanum() As String = t.Split(" ")


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

pieroalampi Profilo | Expert

E'presto fatto puoi mappare tutto guarda questa guida:

http://msdn.microsoft.com/en-us/library/ms709353.aspx
vb.net, c#,c,c++,html,flash
------------------------------------------------------
:::: :) ::::
------------------------------------------------------

Gianni77 Profilo | Junior Member

x AlexMed:

ho provato con un file fatto cosi:

234.4;56.3;123.8
abcde
23.6
23.9

245.1;54.2

89.1

e mi estrae soltanto:
234.4
56.3
123.8
23.6
23.9

cioè si blocca per quella riga vuota... mi pare strano

Gianni77 Profilo | Junior Member

x Piero Lampi

sembra interessante ma non ho capito come si mette in pratica quella roba

Gianni77 Profilo | Junior Member

ehm... nessuna idea? Non riesco a venirne a capo... il textreader ha forse qualche limitazione che ignoro?

Jeremy Profilo | Guru

Ciao Gianni
Hai preso in considerazione il metodo indicato da luigidibiasi?

Un'altra strada potrebbe essere l'uso delle Regular Expression.....cerca in rete un pò di documentazione ed eventualmente....facci sapere...
Ciao

alexmed Profilo | Guru

Ciao

Prova a sostituire solo questa riga

Loop While (row <> Nothing)

Con questa

Loop Until row Is Nothing

Ciao
alexmed

Gianni77 Profilo | Junior Member

EEEEVVVVAIIIIII funziona!!!! Ma perchè ?! Che differenza c'è!

alexmed Profilo | Guru

Ciao
Non sono un grande esperto del ciclo Do...Loop
Ho cercato nella guida che dice:

Until
Obbligatoria a meno che non venga utilizzato While. Ripetere il ciclo finché condition è True.

condition
Facoltativa. Espressione Boolean. Se condition è Nothing, Visual Basic la considera False

Quindi fino a quando "row" non è Nothing (quindi è True) dovrebbe andare avanti e probabilmente il CR non è Nothing

Se non è così prego gli esperti di dare lumi.

Ciao
alexmed
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5