Computergenie.nl    

Computergenie.nl
  Registreer!
  Registreer
Homepage
Home
Top 10
Top 10
Forum
Forum
Prijsindex
Prijsindex
Nieuws
Nieuws
Downloads
Downloads
Hulp & Uitleg
Hulp & Uitleg
Uitgebreid zoeken
 
  Zoeken •  Gebruikerslijst  •  Gebruikersgroepen   •  Registreer  •  Profiel  •  Log in om je privť berichten te bekijken  •  Ben je al lid?  Log in! 
Ben je al lid?  Log in!
Kies uw onderwerp:
Computer-Cafť
Knowledge Base
Hardware
Software
Internet & netwerken
Games
Scripten & programmeren
Digitale fotografie & video
Multimedia
GSM & mobile
Sitecheck & links
OfficiŽle mededelingen
Feedback
ISL Light
Aanbiedingen
Markt-plaats
Hulp & Uitleg

Sponsors:

Cloud VPS

Relaties:

PC Beveiliger
Forum » Scripten & programmeren » vb script output newbie
[PERL]  vb script output newbie

Nieuw onderwerpNieuw antwoord
visserja Bericht Geplaatst op 21-09-2007 Reageer met quote
Nieuw lid
Hallo,
Ik heb een vb script dat met een woordenlijst matches zoekt in text bestanden. De outputfiles output.txt en stats.txt geven echter een output van alle bestanden terwijl ik alleen een outputfile van de matches moet hebben, omdat ik de info anders niet kan verwerken in excel.

Ik kan eigenlijk niet programmeren met vb, hoogstens wat met macrootjes in excel klooien. Ik zie wel ongeveer waar ik wat zou moeten veranderen maar weet niet precies hoe. Ergens onder target=outputdir&"\output.txt" en target=outputdir&"\stats.txt"

Het is de bedoeling dat ik in ieder geval bij stats.txt niet alleen weergave van match krijg: bestandsnaam, woorden, zinnen, regels en daaronder de 2e regel met woord, aantal; maar dat ik aant begin van de 2e regel van de match ook de woordpositie, zinspositie en regelnr krijg...dus eigenlijk is dat wat ik bij output.txt te zien krijg maar dan zonder de weergave van de bestanden waar geen match in zit....want die worden nu ook allemaal weergegeven in de output.txt.


Wie weet de oplossing?

Groeten, Johanna

--------------



Code:
'main
'versie 0.2 draft


dim zinpositie,woordpositie,regelnr
Dim oRE, oMatches
redim resultaat(0)
Dim objfso
dim outputdir

Set objfso = CreateObject("Scripting.FileSystemObject")
'data initialisatie
resultaat(0)="[woordpositie];[zinpositie];[regelnr];[match-woord]"
'resultaat()=""

'inlezen zoeklijst
patroon=zoekwoorden

'   strPath = "c:\data\temp\tekst.txt"
   outputdir="c:\data\temp"
   sFolder="c:\data\temp\data"
   Set folder = objfso.GetFolder(sFolder)
   Set files = folder.Files

   for each inputtxt in files
       res=""
       naam = inputtxt.name
       selectie=split(naam,".")
       if selectie(1) = "txt" then
      indexw = ubound(resultaat)+1
      redim preserve resultaat(indexw)
      resultaat(indexw)=naam
      zinpositie=0
      regelnr=0
      totaal_woorden=0
      set objfile = objfso.opentextfile(sFolder&"\"&naam,1)
      do until objfile.atendofstream
         tekst = objfile.readline
         regelnr = regelnr+1
         result=Search(patroon,tekst)
         totaal_woorden=aantal_woorden(tekst) + totaal_woorden
      loop
      res = "[bestandnaam]="&naam&" [woorden]="&totaal_woorden& "

[zinnen]="&zinpositie& " [regels]="&regelnr
      resultaat(indexw)=res
'      loggen(resultaat,naam)
            end if

   next

   target=outputdir&"\output.txt"
   if objfso.FileExists(target) then
      objfso.deleteFile(target)
   end if

   Set objOutputFile = objFso.CreateTextFile(target, TRUE)

   res=""
   for each result in resultaat
      objOutputFile.WriteLine(result)
   next
   objoutputfile.close

' fase twee is het bepalen van statistieken

   target=outputdir&"\stats.txt"
   if objfso.FileExists(target) then
      objfso.deleteFile(target)
   end if

   Set objOutputFile = objFso.CreateTextFile(target, TRUE)

   Set oRE = New RegExp
   Set term = New RegExp
   oRE.IgnoreCase= true
   term.IgnoreCase= true
   teller=1
   aantal=0
   range = ubound(resultaat)
   do while (teller<range)
      oRE.Pattern = "bestandnaam"
      res = oRE.Test(resultaat(teller))
      if (res) then
         'nieuwe bestand, dus alle counters resetten
         objoutputfile.writeline("-------------------------")
         objOutputFile.WriteLine(resultaat(teller))
         lijst=""
      else
         regel=resultaat(teller)
         temp = split(regel,";")
         term.Pattern = temp(3)
         res = term.Test(lijst)
         if not(res) then
            if lijst="" then
               lijst=temp(3)
            else
               lijst=lijst&"^"&temp(3)
           End if
           aantal = zoekaantal(temp(3),(teller+1))
           objOutputFile.WriteLine("woord:"& temp(3) &"  aantal:"&aantal)
         end if

      end if
      teller=teller+1
   loop
   objoutputfile.close

   msgbox("klaar")

'------------------------------------------------------------------
'----------- SUBROUTINES ------------------------------------------

function zoekaantal(term,startw)
'   dim aantal,stop

   aantal=1
   Set oRE = New RegExp
   oRE.IgnoreCase=True
  maxindex=UBound(resultaat)
   stopcode=0
   do while (stopcode=0)
      oRE.Pattern = term
      res = oRE.Test(resultaat(startw))
      if res then aantal=aantal+1
      oRE.Pattern = "bestandnaam"
      res2 = oRE.Test(resultaat(startw))
      If ((res2) Or (startw=maxindex))Then
         stopcode=1
      Else
         startw=startw+1
      End If
   loop
   zoekaantal=aantal
end function




'van een bestand de zoekwoorden inlezen
function zoekwoorden
   dim invoer

   strPath = "c:\data\temp\lijst.txt"
   if objfso.fileExists(strPath) then
      set objfile = objfso.opentextfile(strPath,1)
   else
      msgbox("Woorden lijst is niet aangetroffen ("&strPath&")")
   end if
   do until objfile.atendofstream
      invoer = objfile.readline
      'inlezen lijst woorden
      if lijst = "" then
         lijst = invoer
      else
         lijst=lijst & "|" & invoer
      end if
   loop
   zoekwoorden=lijst

end function


'input :regel tekst en zoekpatronen
function Search(patroon,tekst)
   'patroon zoeken

   hitwords=""
   temp=0
   hit=0
   Set oRE = New RegExp
   oRE.Global = True

   'eerst aantal zinnen tellen, we tellen aantal punten in de regel
   zinsontleding = split(tekst,".")
   rang=0
   for each zin in zinsontleding
      rang=rang+1
      if zin<>"" then
         hit=0
         if ((len(zin)>12) and (rang>1)) then zinpositie=zinpositie+1
         oRE.Pattern = patroon
         oRE.IgnoreCase= true
         Set oMatches = oRE.Execute(zin)
         For Each oMatch In oMatches
            hit=1
            positiewoord =

zoek_locatie(zin,omatch.value,omatch.firstindex)
            index = ubound(resultaat)+1
            redim preserve resultaat(index)
      

resultaat(index)=temp+totaal_woorden&";"&zinpositie&";"&regelnr&";"&omatch.value
         Next
      end if
      temp = temp + aantal_woorden(zin)
   next

   if hits>0 then
      search = "Regelnr ["&regelnr&"] "&hits&" woorden:"&res
   else
      search = ""
   end if
end function

function aantal_woorden(tekst)
   dim woord,woorden

   woorden = Split(tekst, " " )
   aantal = ubound(woorden)+1
   for each woord in woorden
      if woord="" then aantal=aantal-1
   next
   aantal_woorden=aantal
end function


function zoek_locatie(tekst,invoer,marker)
   dim postie,woord,woorden,locatie,teller


   woorden = Split(tekst, " ")
   positie = 0
   locatie = 0
   teller = 0
   for each woord in woorden
      if woord<>"" then positie=positie+1
      if ((woord=invoer) and (teller=marker)) then
         locatie=positie
      end if
      teller=len(woord)+teller
      teller = teller+1
   next
   zoek_locatie=locatie
end function

'afstand in zinnen


vosManz | Code-blok toegevoegd

visserja Bericht Geplaatst op 01-10-2007 Reageer met quote
Nieuw lid
Laat maar, ik heb de output van de script met een macro in excel gemanipuleerd.
Nieuw onderwerpNieuw antwoord   


Forum » Scripten & programmeren » vb script output newbie

Powered by Cloud VPS - High Availability Cloud Servers