Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Come si accelera questa routine?
mercoledì 23 luglio 2008 - 16.22
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
mer 23 lug 2008 - 16:22
Nella listbox1 ho una serie lunghissima di items letti da un file e gli item sono composti così:
Esempio: X123Y456Z789
Voglio dividere le tre quote e inserirle ognuna nella rispettiva listbox.
Considerando che le coordinate potrebbero avere dei decimali non so esattamente in che posizione cascano i caratteri X,Y,Z e quindi li devo cercare.
Ora ho risolto così:
............................................................................................................
For i1=0 to ListBox1.Items.Count-1
'Lettura della riga del file
Lettura = ListBox1.Items.Item(i1)
'Divisione e lettura delle 3 quote
Posy = InStr(1, Lettura, "Y", Microsoft.VisualBasic.CompareMethod.Text)
PosZ = InStr(1, Lettura, "Z", Microsoft.VisualBasic.CompareMethod.Text)
QX = (Val(Mid(Lettura, 2, Posy - 1)))
QY = (Val(Mid(Lettura, Posy + 1, PosZ - 1)))
QZ = (Val(Mid(Lettura, PosZ + 1, Len(Lettura) - 1)))
'Aggiunta delle quote nelle listbox
ListX.Items.Add(QX)
ListY.Items.Add(QY)
ListZ.Items.Add(QZ)
Next
............................................................................................................
Il problema è che supera grandemente i 30 sec. coi miei file, è possibile accelerare questa routine?
Grazie
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mer 23 lug 2008 - 17:28
Ciao
fai un test così:
Dim myString As String
Dim newString() As String
For i As Integer = 0 To Me.ListBox4.Items.Count - 1
myString = Me.ListBox4.Items(i).ToString
myString = myString.Replace("X", " ")
myString = myString.Replace("Y", " ")
myString = myString.Replace("Z", " ")
newString = Split(myString, " ", -1, CompareMethod.Text)
Me.ListBox1.Items.Add(newString(1))
Me.ListBox2.Items.Add(newString(2))
Me.ListBox3.Items.Add(newString(3))
Next
Io ho caricato 1000 Items e ci ha messo si e no un secondo.
Ciao
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
mer 23 lug 2008 - 17:33
Ora provo ma in ogni caso io ho file da trattare composti da 80/100 mila righe
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
mer 23 lug 2008 - 17:37
Grazie mille è molto più veloce e funziona benissimo
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
gio 24 lug 2008 - 02:30
Ciao,
prova ad utilizzare i metodi BeginEdit ed EndEdit delle ListBoxes in cui aggiungi gli Items, dovresti velocizzare ancora di più l'operazione.
'Prima dell'inserimento
ListBox1.BeginEdit
'ciclo di aggiunta Items
'Una volta terminato l'inserimento di tutti gli Items
ListBox1.endEdit
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
gio 24 lug 2008 - 10:36
Ciao,
Sono andato a rivedermi gli esempi nella Guida in linea ed in base a ciò ho dato una ritoccatina al codice postato in precedenza
Dim newString() As String
For i As Integer = 0 To Me.ListBox4.Items.Count - 1
newString = Me.ListBox4.Items(i).ToString.Split(New [Char]() {"X"c, "Y"c, "Z"c})
Me.ListBox1.Items.Add(newString(1))
Me.ListBox2.Items.Add(newString(2))
Me.ListBox3.Items.Add(newString(3))
Next
Non ho idea se così è più veloce o meno
Non resta che provare!!
Ciao
PS
Non ho testato i metodi postati da "the_follet"
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
gio 24 lug 2008 - 23:31
Ho provato i vari sistemi che avete postato e devo dire che sono molto validi.
Ho provato a dividere i dati e appoggiarli in tre matrici, poi ho scritto nelle listbox e ho misurato le tempistiche, premetto che il tempo totale è pressochè invariato.
I risultati sono:
con un file da circa 90mila righe
Poco più di 1 secondo per leggere il file, dividere le quote e scriverle nelle matrici.
Circa 25/30 secondi per scrivere le quote nelle tre listbox.
Si può accelerare la scrittura nelle listbox? sinceramente se penso che anche ieri ho avuto a che fare con un file da 350mila righe mi viene da piangere a pensare di dover aspettare 2 minuti per caricare il file.
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
gio 24 lug 2008 - 23:48
Ciao
Qui scatta la curisità essendo geometra
Ma da dove vengono stè coordinate?
Per quanto riguarda la velocità a questo punto non saprei. Il caricamento da file a listbox non è un problema della CPU che hai montato sul PC?
Potresti provare passando da un Database !!
Senza caricarlo nella ListBox ma solo leggendolo quanto ci mette?
Ciao
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
ven 25 lug 2008 - 00:06
Queste coordinate provengono da un file creato da un sfw di rilevamento laser, es un mio cliente voleva riprodurre in marmo un cappello da alpino, l'ho rilevato col laser ed ho ottenuto un file di 88350 righe/punti ps.: il cappello fa circa 400X250 mm immagina tu quando vado a rilevare un bassorilievo da 1500X1000 mm....
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
ven 25 lug 2008 - 00:18
Ahhh ecco!!!
Ma non hai a corredo un SW che ti gestisce i dati?
Una volta che hai separato XYZ dove le tratti ? In AutoCAD???
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
ven 25 lug 2008 - 08:12
Una volta suddivisi, visualizzo le viste xy,xz e yz dopodichè permetto all'utente di cancellare i dati non voluti.
Torna su
Stanze Forum
Elenco Threads
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 !