fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Dovrei creare 3 textbox
Nella prima devo inserire un elenco di nomi composti ,es:
Odissea nello spazio 2001 fantascienza x264 AC3 ITA
Jack lo Squartatore Horror x264 AC3 ITA
La seconda textbox deve servire per effettuare una ricerca sul contenuto della prima textbox, es: inserisco una serie di nomi
spazio
2001
pappagallo
etc...
Nella terza textbox vorrei venissero stampati i risultati
Quindi inseriti i dati il programma dovrebbe prendere i nomi della seconda textbox uno ad uno e cercare nella prima textbox la parola desiderata e se la trova stampare l'intera riga della textbox 1 nella textbox 3.
Ho cercato un po' prima di postare e credo qualcosa gia' esista in VB6,non so,
sicuramente per colpa mia non riesco a trovare niente del genere
Un ringraziameto anticipato per qualunque aiuto mi venga dato.
Grazie
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Con questo apro il file contenente i dati da ricercare e li carico nella text1.text
Codice sorgente - presumibilmente VB.NET |
Private Sub cmdDatiFile_Click() Open App.Path & "\Dvdriplink.txt" For Input As #4 'Open App.Path & "\Dati Ricerca.txt" For Output As #7 Do Until EOF(4) Line Input #4, rigaletta 'Print #7, rigaletta Text1.Text = Text1.Text & rigaletta & vbCrLf Loop Close #4 'Close #7 End Sub
|
Quindi il caricamento dei dati da ricercare è fatto
anche se preferirei caricare solo una parte della stringa di ogni linea.es:
Codice sorgente - presumibilmente Plain Text |
Amityville Horror (2005) .avi - DVDRip - ITA - [Mu] - Iceblue - Visto: 2691 - Commenti: 1
Amityville Horror (2005).avi (DVD RIP AC3 - ITA) - Dr.BoOm - Visto: 1534 - Commenti: 0
|
basterebbe mi caricasse
Amityville Horror (2005) .avi - DVDRip - ITA
Amityville Horror (2005).avi (DVD RIP AC3 - ITA
tralasciando il resto
L'ultimo parola di solito è ITA
Come posso fargli caricare la stringa fino a dove voglio io ?
Fatto questo,devo inserire nell text2 le voci per la ricerca da visualizzare nella text3 e salvare in un terzo file di OUTPUT
Tk's Ultima modifica effettuata da fusebyte il 09/05/2011 alle 16:51 |
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Aggiornamento:
Ho usato 2 listbox per caricare il file con i dati da controllare ed il secondo file
con i dati che devono servire come imput di ricerca.
tutto inserito nel FORMLOAD in modo che si caricano all' avvio.
Ora mi rimane di fare questo:
LINEA 1 di LISTBOX 2 controlla tutte le linee della LISTBOX 1
LINEA 2 di LISTBOX 2 controlla tutte le linee della LISTBOX 1
e cosi via fino a EOF ( end of file).
Se c'è riscontro STAMPA in LISTBOX 3 o meglio TEXTBOX 3 ?
Qualcuno mi puo' fare un esempio base semplice ma funzionante, poi me lo sistemo io.
Grazie
Questo è il codice usato fino ad adesso
Codice sorgente - presumibilmente VB.NET |
Private Sub cmdREFRESHDatiFile_Click() Call LoadFileInList(List1, App.Path & "\Dvdriplink.txt") End Sub Private Sub cmdDatiPerRicerca_Click() Call LoadFileInList(List2, App.Path & "\ENG.txt") End Sub Private Sub LoadFileInList (thelist As ListBox, ByVal file As String) Dim data As String Open App.Path & "\Dvdriplink.txt" For Input As #1 While Not EOF(1) [b]If maxlenght < 10 Then << qui vorrei porre un limite alla stringa in modo che se contiene meno di N caratteri non venga stampata,ma cosa metto dopo THEN ?[/b] Input #1, data thelist.AddItem data Wend End Sub Private Sub LoadFileInList2 (thelist2 As ListBox, ByVal file As String) Dim data As String Open App.Path & "\ENG.txt" For Input As #2 While Not EOF(2) Input #2, data thelist2.AddItem data Wend End Sub Private Sub Form_Load() Call LoadFileInList(List1, App.Path & "\Dvdriplink.txt") Call LoadFileInList2(List2, App.Path & "\ENG.txt") End Sub
|
Ultima modifica effettuata da fusebyte il 10/05/2011 alle 1:03 |
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
cioò che ti serve è una lavorazione di stringhe da quel che ho capito
guardati le funzioni
Instr() -> che fa la ricerca
Mid() -> ti fa una selezione di caratteri
quello che ti rimane da fare non è altro che due cicli for sulle liste visto che i dati li hai già caricati
Codice sorgente - presumibilmente VB.NET |
for i = 0 to lista2.listcount -1 for j = 0 to lista1.listcount -1 if instr(1,lista2.list(i),lista1.list(i)) > 0 then 'trovato end if next j next i
|
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Prima di tutto, grazie per l'aiuto, stavo perdendo le speranze :-)
Ho fatto cosi':
Codice sorgente - presumibilmente VB.NET |
for i = 0 to list2.listcount -1 for j = 0 to list1.listcount -1 if instr(1,list2.list(i),list1.list(i)) > 0 then Text1.Text= List1.list(i) end if next j next i
|
Facendo una prova con nomi semplici
LIST1 = casa sole mare luna
LIST2 = ramo ago sole tipo vaso
mi stampa nella Text1.Text la parole sole
e tutto sembra funzionare.
Ma aggiungendo nella LIST2 la parola luna cosi:
LIST1 = casa sole mare luna
LIST2 = ramo ago sole tipo vaso luna
non stampa piu' niente,neanche sole.
Perche' succede questo?
E altro problema, nelle liste ci sono solo nomi composti.
Come dico alla LIST2 di prendere sempre la terza parola per fare la ricerca?
( il mid in questo caso è inefficace perche' la terza parola di ogni riga sicuramente
varia di posizione e lunghezza)
Ciao Grazie
Ultima modifica effettuata da fusebyte il 11/05/2011 alle 13:22 |
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
E altro problema, nelle liste ci sono solo nomi composti.
Come dico alla LIST2 di prendere sempre la terza parola per fare la ricerca?
( il mid in questo caso è inefficace perche' la terza parola di ogni riga sicuramente
varia di posizione e lunghezza)
puoi contare gli spazi no? dopo 2 hai la terza parola...
poi posti un pezzo di codice maggiore mi è più facile capire la situazione o magari uno screen del programma...
Codice sorgente - presumibilmente VB.NET |
List1.AddItem "casa sole mare luna" List2.AddItem "ramo" List2.AddItem "ago" List2.AddItem "sole" List2.AddItem "tipo" List2.AddItem "vaso" List2.AddItem "luna" For i = 0 To List2.ListCount - 1 For j = 0 To List1.ListCount - 1 If InStr(1, List1.List(j), List2.List(i)) > 0 Then Text1.Text = Text1.Text & List2.List(i) End If Next j Next i
|
prova questo codice su un nuovo form e noterai i tuoi errori
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Con questo codice sembra che funziona:
Codice sorgente - presumibilmente VB.NET |
Private Sub LoadFileInList (thelist As ListBox, ByVal file As String) Dim data As String Open App.Path & "\Dvdriplink.txt" For Input As #1 While Not EOF(1) Input #1, data List1.AddItem data Wend End Sub Private Sub LoadFileInList2 (thelist2 As ListBox, ByVal file As String) Dim data As String Open App.Path & "\ENG.txt" For Input As #2 While Not EOF(2) Input #2, data List2.AddItem data Wend End Sub Private Sub Form_Load() Call LoadFileInList(List1, App.Path & "\Dvdriplink.txt") Call LoadFileInList2(List2, App.Path & "\ENG.txt") End Sub Private Sub cmdRicerca_click() For i = 0 To List2.ListCount - 1 For j = 0 To List1.ListCount - 1 If InStr(1, List1.List(j), List2.List(i)) > 0 Then Text1.Text = Text1.Text & List2.List(i) & vbCrLf End If Next j Next i End Sub Private Sub cmdClear_click() Text1.Text = "" End Sub
|
Contenuto dei 2 file TXT caricati nelle 2 LISTBOX
dvdriplink.txt > LIST1
casa
sole
mare
luna
naso
albero
eng.txt > LIST2
ago
sole
tipo
vaso
luna
bastone
naso
risultato
sole
luna
naso
quindi fino a qui ok.
Il problema è sui veri TXT da controllare
alcune rige del txt dvdriplink.txt > LIST1
13dici a tavola (2004) [DVDRip AC3] [FileSonic]
14 Kilometros (2007) DvdRip [By.Caly-AsTrA](Fs)
14 anni vergine DVDRip [RS-MU]
1408 [mu]
16 years of alcool [MU,RS]
17 Again - Ritorno al liceo (2009)[BDRip.XviD][MU/RS]
2 single a nozze [Commedia][DVDRip][RS]
alcune rige del txt eng.txt > LIST2
Apocalypto ITA_track23
Frozen.2010.BluRay.720p.DTS.x264-CHD ENG
Harry Brown.2009.German.DTS.720p.BluRay.x264-SoW
Locked Down 2010 01_38_50 1280x720 23976 x264 rus
Secondo te come posso impostare la ricerca oppure formattare in qualche modo i TXT per facilitare in seguito la ricerca ?
Grazie,Ciao
Ti allego lo ZIP del progetto,credo sia piu' facile da controllare
Ultima modifica effettuata da fusebyte il 11/05/2011 alle 23:12 |
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
Codice sorgente - presumibilmente VB.NET |
Private Sub cmdRicerca_click() Text1.Text = "" Screen.MousePointer = vbHourglass For J = 0 To List1.ListCount - 1 For i = 0 To List2.ListCount - 1 If InStr(1, List1.List(J), List2.List(i)) > 0 Then Text1.Text = Text1.Text & List1.List(J) End If Next i List1.ListIndex = J Next J Screen.MousePointer = vbDefault End Sub
|
secondo me a sto punto dovresti o guardarti i file random per cui file con una certa formattazione o valutare i database.
non so quali siano le tue necessità ma con i file random stabilisci dei campi per esempio il titolo lungo 50 caratteri , info1 lunga 10 info2 lunga 10 ecc...
(sono numeri di caratteri indicativi) per farti capire...
ma secondo me ti conviene farti un dabase più o meno serio dipende dal tuo scopo.
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Beh , in effetti come darti torto, se usassi un MDB sarebbe tutto piu' facile , ma anche con le listbox ( con tutti i limiti del caso) vedo che si puo' fare.
Dovrei capire solo un' altra cosa, come prelevare da ogni riga del file di testo N parole.
Mi hai consigliato di considerare lo spazio o magari il punto
prendendo questi 2 titoli come esempi,
Gli avvoltoi hanno fame Rip Multihost 1970
Gli.Amici.Di Nick.Hezard.1976.Rip
Codice sorgente - presumibilmente VB.NET |
Private Sub LoadFileInList (thelist As ListBox, ByVal file As String) Dim data As String Open App.Path & "\Dvdriplink.txt" For Input As #1 While Not EOF(1) Input #1, data List1.AddItem data Wend End Sub
|
sicuramente devo usare il codice ascii chr$(20) per lo spazio e chr$(46) per il punto,se non erro.
Ma come scrivere il controllo?
Grazie,ciao
|
|