Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 06-11-2003, 17.59.57   #1
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Chi me lo ottimizza ?

Ecco il codice:

Codice:
Option Explicit
Dim Caratteri(32 To 255) As Long

Private Function Func_ContaStringa(ByVal S As String, Optional ByVal Delimiter As String = ",") As Long
'Conta quante volte una sottostringa è contenuta all'interno di una stringa
'Ogni elemento è separato da un delimitatore
Dim Ty As Long, Yt As Long, Yy As Long, Conta As Long

Ty = InStr(S, Delimiter)
Yt = Len(Delimiter)
While Ty
    Conta = Conta + 1
    Yy = Ty + Yt
    Ty = InStr(Yy, S, Delimiter)
Wend
Func_ContaStringa = Conta
End Function

Private Function Func_Contaparole(ByVal S As String, Optional ByVal Delimiter As String = " ") As Long
'Conta le parole.
Dim Ty As Long, Yt As Long, Yy As Long, Conta As Long

S = Trim$[S]
If Len[S] Then
    Ty = InStr(S, Delimiter)
    Yt = Len(Delimiter)
    While Ty
        If Asc(Mid$(S, Ty + 1, 1)) <> 32 Then Conta = Conta + 1
        Yy = Ty + Yt
        Ty = InStr(Yy, S, Delimiter)
    Wend
    Func_Contaparole = Conta + 1
End If
End Function

Private Sub Command1_Click()
Dim A As Integer, TotCaratteri As Long, Ty As Long
Dim S As String, S1 As String * 50, S2 As String * 1
Dim T1 As Single, T2 As Single

S = RichTextBox1.Text
Screen.MousePointer = vbHourglass
T1 = Timer

With List1
    .Clear
    For A = 32 To 255
        Select Case A
            'Scarta i caratteri non testuali
            Case 95, 96, 127 To 144, 147 To 159
            Case Else
                S2 = Chr$(A)
                Ty = Func_ContaStringa(S, S2)
                Caratteri(A) = Ty
                TotCaratteri = TotCaratteri + Caratteri(A)
                S1 = "Carattere '" & S2 & "' contenuto " & Caratteri(A) & " volte"
                .AddItem S1
        End Select
    Next
End With
Ty = Func_Contaparole[S]

T2 = Timer

Screen.MousePointer = vbNormal

Label1 = "Vi sono " & Format$(TotCaratteri, "###,0") & " caratteri"
Label3 = "Vi sono " & Format$(Ty, "###,0") & " parole"
Label2 = "Completato in " & T2 - T1 & " secondi."
End Sub

Private Sub Command2_Click()
Dim S As String

S = InputBox("Nome file :", "Immetti il nome del file di testo")
If Len(Trim$[S]) = 0 Then S = App.Path & "\license.txt"
RichTextBox1.filename = S
End Sub

Private Sub Form_Load()
Command1.Caption = "Esegui"
Command2.Caption = "File"
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
MsgBox "Contenuto " & Caratteri(KeyAscii) & " volte"
End Sub
Il programmino conta il numero di parole contenute in un testo, nonchè il numero di volte che ogni singolo carattere che lo compone è presente in esso.
Avrete bisogno di

1 richtextbox
1 listbox
3 label
1 textbox
2 commandbutton

Il programma è stato compilato in codice nativo (VB5.0).
Esso è portabile (a mio avviso) con facilità sotto altri linguaggi.
Sarebbe interessante evidenziare le differenze velocistiche, secondo me, in fondo non così rilevanti.

Saluti
LoryOne non è collegato   Rispondi citando
Vecchio 06-11-2003, 19.45.34   #2
pholcus
Linux Supporter
 
L'avatar di pholcus
 
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
pholcus promette bene
Direi che il file txt allegato e' troppo piccolo x provare le prestazioni di questo programma

Provo a farlo in java e in c..

Ciao
pholcus non è collegato   Rispondi citando
Vecchio 06-11-2003, 19.48.49   #3
pholcus
Linux Supporter
 
L'avatar di pholcus
 
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
pholcus promette bene
Prova con questo file..a me impiega circa 11 secondi..
pholcus non è collegato   Rispondi citando
Vecchio 06-11-2003, 23.31.36   #4
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Ho scaricato il file che hai postato.
Tra 8,95 e 9,11 secondi su un Athlon Tb 1,2 GHz.

Ho apportato leggere modifiche:

1) Eliminato le flex strings, ossia i Dim S as string* ed ho lasciato Dim S as string

Mi sembra accettabile come tempo, comunque aspetto la versione Visual C++/Delphi.
LoryOne non è collegato   Rispondi citando
Vecchio 07-11-2003, 11.44.17   #5
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Leggera modifica nella concatenazione di stringhe.

S1 = "Carattere '" & S2 & ("' contenuto " & (Caratteri(A) & " volte"))

Si nota un leggero aumento prestazionale solo nell'inserimento del testo nella listbox, niente di eccezionale, comunque.
LoryOne non è collegato   Rispondi citando
Vecchio 07-11-2003, 17.12.30   #6
pholcus
Linux Supporter
 
L'avatar di pholcus
 
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
pholcus promette bene
Prova questo in java..
Rinominalo togliendo l'estensione .zip, poi lo lanci con: java -jar regex.jar

Ciao
pholcus non è collegato   Rispondi citando
Vecchio 07-11-2003, 19.26.07   #7
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Si, in effetti c'è molta differenza.
Potresti postare il sorgente per piacere ?
LoryOne non è collegato   Rispondi citando
Vecchio 07-11-2003, 20.58.12   #8
pholcus
Linux Supporter
 
L'avatar di pholcus
 
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
pholcus promette bene
eccolo..non e' il massimo, perche' l'ho fatto in fretta con JBuilder..rinomina in .java
pholcus non è collegato   Rispondi citando
Vecchio 08-11-2003, 00.06.38   #9
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
0,909 secondi contro 3,350 secondi.

Non vi è dubbio che le performances attuali risultino a favore di Java ma ci sono alcune considerazioni da fare:

1) Nella prima versione del programma, i parametri alla funzione di conteggio dei caratteri contenuti venivano passati ByVal[ue].
Questo implicava una copia del parametro con conseguente perdita di tempo prezioso.
La soluzione è stata quella di passare il parametro ByRef[erence] (Vedi Java)
Tale operazione mi ha fatto risparmiare ben 6 secondi.

2) Io non ho potuto utilizzare la funzione Split di VB6.0, quindi per ricavare il numero di parole (sequenze di caratteri separati da uno o più spazi), ho dovuto implementare la funzione apposita.
Di conseguenza, la funzione Split di Java non doveva essere utilizzata.

3) Nell'implementazione della funzione di cui sopra, è necessario considerare che una parola è un insieme di caratteri separati da un solo spazio, non da più spazi consecutivi.
(A dire il vero, una parola non deve contenere ne punteggiatura ne numeri, comunque...)
L'unico baco alla funzione Func_ContaParole è che una stringa del genere:
"Io mi chiamo LoryOne ."
fornirà come risultato 5 e non 4.
Per la cronaca, persino il "glorioso" Microsoft Word è afflitto da questo baco.

4) Il tempo da considerare è da quando si è premuto il pulsante a quando si è ricavato il numero di parole contenute nel testo, facendo attenzione che nello stesso ciclo (da 32 a 255) venga inserito nella listbox il numero di volte che il carattere in questione compare nel testo da scansionare.

Ciao
LoryOne non è collegato   Rispondi citando
Vecchio 08-11-2003, 11.17.07   #10
pholcus
Linux Supporter
 
L'avatar di pholcus
 
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
pholcus promette bene
Ciao..
beh, hai ragione, non ho portato il codice da vb a java, semplicemente perche' di vb non ne capisco gran che. Era solo x far vedere una possibile miglior implementazione dell'algoritmo..

2) Avrei potuto usare StringTokenizer, ma mi sembrava + macchinoso

3) Ho notato anch'io questa cosa..ma mi vien da pensare che nella mia implementazione sia un baco di split...sto cercando una soluzione..

Ciao
pholcus non è collegato   Rispondi citando
Vecchio 08-11-2003, 19.40.31   #11
pholcus
Linux Supporter
 
L'avatar di pholcus
 
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
pholcus promette bene
3) corretto, ho aggiunto un controllo..
pholcus non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
.:: Vista Tricks ::. real7 Windows 7/Vista/XP/ 2003 287 01-09-2011 10.19.47
Nero Show time ottimizza il video, come faccio a salvarlo così ottimizzato? luci Software applicativo 0 17-09-2008 23.09.54
Controllo automatico nuove periferiche kats Windows 7/Vista/XP/ 2003 1 29-03-2008 01.29.15
Norton Utilities o... Cos'altro? Marco Redaelli Software applicativo 17 08-11-2004 21.48.11
ottimizza la tua adsl (solo per utenti esperti) adel1985 Internet e Reti locali 5 22-02-2004 13.55.53

Orario GMT +2. Ora sono le: 10.43.58.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.