Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Utility di ricerca testo
Forum - Visual Basic 6 - Utility di ricerca testo

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 13:25
Lunedì, 09/05/2011
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

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 16:50
Lunedì, 09/05/2011
Con questo apro il file contenente i dati da ricercare e li carico nella text1.text

Codice sorgente - presumibilmente VB.NET

  1. Private Sub cmdDatiFile_Click()
  2. Open App.Path & "\Dvdriplink.txt" For Input As #4
  3. 'Open App.Path & "\Dati Ricerca.txt" For Output As #7
  4. Do Until EOF(4)
  5. Line Input #4, rigaletta
  6. 'Print #7, rigaletta
  7. Text1.Text = Text1.Text & rigaletta & vbCrLf
  8. Loop
  9. Close #4
  10. 'Close #7
  11. 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

  1. Amityville Horror (2005) .avi - DVDRip - ITA - [Mu] - Iceblue - Visto: 2691 - Commenti: 1
  2. 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
PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 0:57
Martedì, 10/05/2011
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

  1. Private Sub cmdREFRESHDatiFile_Click()
  2. Call LoadFileInList(List1, App.Path & "\Dvdriplink.txt")
  3. End Sub
  4. Private Sub cmdDatiPerRicerca_Click()
  5. Call LoadFileInList(List2, App.Path & "\ENG.txt")
  6. End Sub
  7.  
  8. Private Sub LoadFileInList(thelist As ListBox, ByVal file As String)
  9. Dim data As String
  10. Open App.Path & "\Dvdriplink.txt" For Input As #1
  11. While Not EOF(1)
  12. [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]
  13. Input #1, data
  14. thelist.AddItem data
  15. Wend
  16. End Sub
  17.  
  18. Private Sub LoadFileInList2(thelist2 As ListBox, ByVal file As String)
  19. Dim data As String
  20. Open App.Path & "\ENG.txt" For Input As #2
  21. While Not EOF(2)
  22. Input #2, data
  23. thelist2.AddItem data
  24. Wend
  25. End Sub
  26.  
  27. Private Sub Form_Load()
  28. Call LoadFileInList(List1, App.Path & "\Dvdriplink.txt")
  29. Call LoadFileInList2(List2, App.Path & "\ENG.txt")
  30. End Sub


Ultima modifica effettuata da fusebyte il 10/05/2011 alle 1:03
PM Quote
Avatar
poeo85 (Normal User)
Pro


Messaggi: 104
Iscritto: 27/01/2010

Segnala al moderatore
Postato alle 10:06
Mercoledì, 11/05/2011
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

  1. for i = 0 to lista2.listcount -1
  2.      for j = 0 to lista1.listcount -1
  3.             if instr(1,lista2.list(i),lista1.list(i)) > 0 then
  4.                   'trovato
  5.             end if
  6.      next j
  7. next i


PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 13:09
Mercoledì, 11/05/2011
Prima di tutto, grazie per l'aiuto, stavo perdendo le speranze :-)
Ho fatto cosi':
Codice sorgente - presumibilmente VB.NET

  1. for i = 0 to list2.listcount -1
  2.          for j = 0 to list1.listcount -1
  3.                 if instr(1,list2.list(i),list1.list(i)) > 0 then
  4.                      Text1.Text=  List1.list(i)
  5.                 end if
  6.          next j
  7.     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
PM Quote
Avatar
poeo85 (Normal User)
Pro


Messaggi: 104
Iscritto: 27/01/2010

Segnala al moderatore
Postato alle 16:43
Mercoledì, 11/05/2011
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

  1. List1.AddItem "casa sole mare luna"
  2. List2.AddItem "ramo"
  3. List2.AddItem "ago"
  4. List2.AddItem "sole"
  5. List2.AddItem "tipo"
  6. List2.AddItem "vaso"
  7. List2.AddItem "luna"
  8.  
  9.  
  10.     For i = 0 To List2.ListCount - 1
  11.          For j = 0 To List1.ListCount - 1
  12.                 If InStr(1, List1.List(j), List2.List(i)) > 0 Then
  13.                      Text1.Text = Text1.Text & List2.List(i)
  14.                 End If
  15.          Next j
  16.     Next i


prova questo codice su un nuovo form e noterai i tuoi errori

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 23:03
Mercoledì, 11/05/2011
Con questo codice sembra che funziona:

Codice sorgente - presumibilmente VB.NET

  1. Private Sub LoadFileInList(thelist As ListBox, ByVal file As String)
  2. Dim data As String
  3. Open App.Path & "\Dvdriplink.txt" For Input As #1
  4. While Not EOF(1)
  5. Input #1, data
  6. List1.AddItem data
  7. Wend
  8. End Sub
  9.  
  10. Private Sub LoadFileInList2(thelist2 As ListBox, ByVal file As String)
  11. Dim data As String
  12. Open App.Path & "\ENG.txt" For Input As #2
  13. While Not EOF(2)
  14. Input #2, data
  15. List2.AddItem data
  16. Wend
  17. End Sub
  18.  
  19. Private Sub Form_Load()
  20. Call LoadFileInList(List1, App.Path & "\Dvdriplink.txt")
  21. Call LoadFileInList2(List2, App.Path & "\ENG.txt")
  22. End Sub
  23.  
  24. Private Sub cmdRicerca_click()
  25.  
  26. For i = 0 To List2.ListCount - 1
  27.  For j = 0 To List1.ListCount - 1
  28.       If InStr(1, List1.List(j), List2.List(i)) > 0 Then
  29.            Text1.Text = Text1.Text & List2.List(i) & vbCrLf
  30.         End If
  31.          Next j
  32.       Next i
  33.     End Sub
  34.  
  35. Private Sub cmdClear_click()
  36. Text1.Text = ""
  37. 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




fusebyte ha allegato un file: Progetto.zip (300510 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da fusebyte il 11/05/2011 alle 23:12
PM Quote
Avatar
poeo85 (Normal User)
Pro


Messaggi: 104
Iscritto: 27/01/2010

Segnala al moderatore
Postato alle 9:22
Giovedì, 12/05/2011
Codice sorgente - presumibilmente VB.NET

  1. Private Sub cmdRicerca_click()
  2.  
  3.     Text1.Text = ""
  4.     Screen.MousePointer = vbHourglass
  5.     For J = 0 To List1.ListCount - 1
  6.         For i = 0 To List2.ListCount - 1
  7.             If InStr(1, List1.List(J), List2.List(i)) > 0 Then
  8.                  Text1.Text = Text1.Text & List1.List(J)
  9.             End If
  10.         Next i
  11.         List1.ListIndex = J
  12.     Next J
  13.     Screen.MousePointer = vbDefault
  14.    
  15. 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.

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 10:25
Giovedì, 12/05/2011
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

  1. Private Sub LoadFileInList(thelist As ListBox, ByVal file As String)
  2. Dim data As String
  3. Open App.Path & "\Dvdriplink.txt" For Input As #1
  4. While Not EOF(1)
  5. Input #1, data
  6. List1.AddItem data
  7. Wend
  8. 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

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo