[ don_ron @ 19.01.2006. 08:34 ] @
Pozdrav!
Imam jedno pitanje ako nije problem!Ovako potrebno (obavezno) ja da u nasoj skoli napravim program za arhivu!
Radi se o tome da skola ima 570 arhiva (txt fajlova sa imenima od arhiva1.txt do arhiva570.txt) te sam arhive dodao u jedan folder (/ARHIVE) i ubacio ih u combo1 e sad je problem pretraga!Nacin pretrage je sledeci:
ako neko u text1.text unese neku rijec za trazenje i u combo1 izabere npr arhiva55 da kao rezultat nakon klikanja na command1 u text3.text ispise sve recenice koje sadrze tu rijec. A u slucaju da se u combo1 ne izabere nista onda treba da pretrazuje sve arhive i ispisuje rzultate !Eto ako iko zna kao ja sam zaglavio i nece dalje a moram to napraviti jer ce mi to biti i zavrsni dio ispita!Ako ko ima ideju ili nesto slicno neka posalje na mail ili postira ovdje!
[ Aleksandar Ružičić @ 19.01.2006. 11:09 ] @
pa ako su te arhive u obicnom text formatu (tj bez posebnog formatiranja) onda ce biti malo teze rastaviti sadrzaj arhive na recenice, mozes da ih splitujes po tackama (.) ali bi ti onda recenicu tipa:
"Ucenik br. 1111 ima taj i taj prosek." (il sta ti se vec nalazi u tim arhivama, ovo je samo za primer)
rastaviti na dve:
"Ucenik br." i " 1111 ima taj i taj prosek." evo ja cu ti dati primer pa ti vidi dal ti odgovara:

Code:

Private Sub Command1_Click()
  Dim fn As Integer, i as Integer
  Dim recenica() As String, path As string, sadrzaj as String,fileName as string

  If Text1.Text="" Then Exit Sub 'nije uneta fraza za pretrazivanje

  fn = freeFile  
  path = Replace$(app.path & "\arhiva","\\","\")

  sadrzaj="." 'zbog splita dole (da ne bi dobili nedefinisan array koji ce izazvati gresku priliko koriscenja bound funkcija)

  If Combo1.Text = "" Then 'nista nije izabrano, pretrazuju se sve arhive
    For i=1 to 570
       fileName=path & "\arhiva" & cstr(i) & ".txt"
       'za svaki slucaj da proverimo da li fajl postoji
       if dir(fileName) <> "" Then 'postoji:
         open fileName for binary as #fn
           'iscitavamo sadrzaj i dodajemo promenjivoj
           sadrzaj=sadrzaj & Input(LOF(fn),#fn) 
         close #fn
       end if
    Next
  Else 'izabrana je samo jedna arhiva
    'pod uslovom da su u combou arhiva1, arhiva2... (bez .txt):
    fileName=path & combo1.text & ".txt" 
    open fileName for binary as #fn
      'iscitavamo sadrzaj
       sadrzaj=Input(LOF(fn),#fn) 
    close #fn
  Endif

  'sada kada imamo sadrzaj podelimo ga po recenicama:
  recenica=split(sadrzaj,".")

  text3.text="" 'resetujemo polje sa rezultatima

  'sada trazimo zadatu frazu
  for i=lbound(recenica)+1 to ubound(recenica)  '+1 jer je prvi uvek prazan (sadrzaj uvek pocinje sa tackom)
    if instr(1,recenica(i),text1.text)>0 then 'sadrzi se fraza u recenici
      text3.text=text3.text & trim(recenica(i)) & "." & vbCrLF
    endif
  next

End Sub

to bi bilo to, samo pazi da ti je text3 multiline property podesen na true i moj predlog ti je da combo-u stavis style na DropdownList i da dodas jedan item tipa "Sve arhive" (ali u tom slucaju bi trebao gore da zamenis ono If combo1.text="" u if combo1.text="Sve arhive")

hm, kucam iz glave a odavno (vec tri-cetiri meseca) nisam ni prisao vb-u tako da sam malo sardjao :) ali mislim da je to to...

poz
[ don_ron @ 19.01.2006. 11:37 ] @
Ok tnx cojk ev idem da ovo probam pa cu javiti kakav je rezultat!
A sto se tice tih recenica one su definisane u arhivama na sledeci nacin
npr za arhivu 55
Arhiva55.1 Ovdje ide prva recenica
Arhiva55.2 Ovdje ide druga renica
.
.
.
aj pa cujemo se opet
[ Aleksandar Ružičić @ 20.01.2006. 09:32 ] @
ako je u takvom format onda bi trebalo malo prepraviti kod:
Code:

Private Sub Command1_Click()
  Dim fn As Integer, i as Integer
  Dim recenica() As String, path As string, sadrzaj as String,fileName as string

  If Text1.Text="" Then Exit Sub 'nije uneta fraza za pretrazivanje

  fn = freeFile  
  path = Replace$(app.path & "\arhiva","\\","\")

  If Combo1.Text = "" Then 'nista nije izabrano, pretrazuju se sve arhive
    For i=1 to 570
       fileName=path & "\arhiva" & cstr(i) & ".txt"
       'za svaki slucaj da proverimo da li fajl postoji
       if dir(fileName) <> "" Then 'postoji:
         open fileName for binary as #fn
           'iscitavamo sadrzaj i dodajemo promenjivoj
           sadrzaj=sadrzaj & Input(LOF(fn),#fn) 
         close #fn
       end if
    Next
  Else 'izabrana je samo jedna arhiva
    'pod uslovom da su u combou arhiva1, arhiva2... (bez .txt):
    fileName=path & combo1.text & ".txt" 
    if dir(fileName) <> "" Then 'postoji:
      open fileName for binary as #fn
        'iscitavamo sadrzaj
         sadrzaj=Input(LOF(fn),#fn) 
      close #fn
    else
      exit sub
   endif
  Endif

  'sada kada imamo sadrzaj podelimo ga po recenicama:
  recenica=split(sadrzaj & vbcrlf, vbcrlf)

  text3.text="" 'resetujemo polje sa rezultatima

  'sada trazimo zadatu frazu
  for i=lbound(recenica) to ubound(recenica) -1
    if instr(1,recenica(i),text1.text,vbTextcompare)>0 then 'sadrzi se fraza u recenici
      text3.text=text3.text & trim(recenica(i)) & vbCrLF
    endif
  next

End Sub
[ don_ron @ 24.01.2006. 10:30 ] @
Pozdrav
Isprobao sam ovaj kod ali ne pretražuje kad izaberem samo jednu od baza a kada izaberem sve baze onda ispisuje samo jednu recenicu u kojoj nadje traženi rezultat!Pokusao sam malo da to cackam ali ne ide ne znam u cemu bi mogao biti problem!
Nadam se da nisam dosadan :)
[ Aleksandar Ružičić @ 24.01.2006. 11:24 ] @
pa da, izgresio sam na par mesta jer sam pisao iz glave :)
evo prepravljenog:
Code:

Private Sub Command1_Click()
  Dim fn As Integer, i as Integer
  Dim recenica() As String, path As string, sadrzaj as String,fileName as string

  If Text1.Text="" Then Exit Sub 'nije uneta fraza za pretrazivanje

  fn = freeFile  
  path = Replace$(app.path & "\arhiva\","\\","\")

  If Combo1.Text = "" Then 'nista nije izabrano, pretrazuju se sve arhive
    For i=1 to 570
       fileName=path & "arhiva" & cstr(i) & ".txt"
       'za svaki slucaj da proverimo da li fajl postoji
       if dir(fileName) <> "" Then 'postoji:
         open fileName for binary as #fn
           'iscitavamo sadrzaj i dodajemo promenjivoj
           sadrzaj=sadrzaj & Input(LOF(fn),#fn) & vbCRlf
         close #fn
       end if
    Next
  Else 'izabrana je samo jedna arhiva
    'pod uslovom da su u combou arhiva1, arhiva2... (bez .txt):
    fileName=path & combo1.text & ".txt" 
    if dir(fileName) <> "" Then 'postoji:
      open fileName for binary as #fn
        'iscitavamo sadrzaj
         sadrzaj=Input(LOF(fn),#fn) 
      close #fn
    else
      exit sub
   endif
  Endif

  'sada kada imamo sadrzaj podelimo ga po recenicama:
  recenica=split(sadrzaj & vbcrlf, vbcrlf)

  text3.text="" 'resetujemo polje sa rezultatima

  'sada trazimo zadatu frazu
  for i=lbound(recenica) to ubound(recenica) -1
    if instr(1,recenica(i),text1.text,vbTextcompare)>0 then 'sadrzi se fraza u recenici
      text3.text=text3.text & trim(recenica(i)) & vbCrLF
    endif
  next

End Sub

to bi trebalo da radi... ali u combo1 treba da ti bude "arhiva1", "arhiva2", ... "arhiva570" (bez .txt!)
[ don_ron @ 24.01.2006. 11:38 ] @
ok izvini ako sam bio dosadan ali ako sta znaci bit ce tvoj nick na programu :) ajd onda idem da ovo zavrsim!
[ Aleksandar Ružičić @ 25.01.2006. 12:42 ] @
neka, nemoras me stavljati u credits :) nego jel radi?
[ don_ron @ 27.01.2006. 10:20 ] @
bio je jedan problem kod mene kod combo1 al sve je ok sad radi!
Hvala cojk i jos nesto posto ti ovo poprilicno ide trebao bi napisati jedan tutorial za vb sa naglaskom na "pretrazivanje" jer izgleda da je to glavni problem vecini ljudi!

pozdrav pa se cujemo ponovo
[ Aleksandar Ružičić @ 27.01.2006. 10:31 ] @
i ja sam imao problema sa pretrazivanjem fajlova i njihovim sadrzajem kada sam pocinjao ali su mi ljudi odavde pomogli a i ima nekoliko tema/tutoriala sa slicnom tematikom, kao na primer: File System Object - rad sa fajlovima i folderima

poz