Avatar billede webwally Nybegynder
03. juli 2002 - 19:28 Der er 9 kommentarer og
2 løsninger

Koden til dette?

Hej

Jeg skal bruge koden til flgn. (burde ikke være svært at lave):

Den skal gennemsøge en variabel, hvor den skal finde ordet "link". Så skal den tjekke om det er ord der står bagefter "link" er det samme som(=) enten "paradoks", "passiv" eller "produktiv"

Hvordan gøres dette? Bare spørg hvis I ikke helt forstår spørgsmålet :-)
Avatar billede driis Nybegynder
03. juli 2002 - 19:45 #1
Er der mellemrum mellem ordene?
Avatar billede yellow Nybegynder
03. juli 2002 - 19:46 #2
Hvad skal den returnere? Bare en boolsk værdi der siger om den har fundet det? En position i variablen hvor den har fundet det? Skal den finde flere forekomster i variablen?
Avatar billede capital Nybegynder
03. juli 2002 - 19:48 #3
hej webwally

Her er lidt kode til inspiration. Du skal bare lægge en lille løkke uden om samt addere en "if"

Private Sub simple_search()

  Dim sSearch As String
  Dim sSearchWord As String
  Dim sWordAfterLink As String
  Dim myPos As Long
 
  sSearch = "this is a link passiv"
  sSearchWord = "link"
 
  ' Get position where word "link" starts
  myPos = InStr(1, sSearch, sSearchWord)
 
  ' Get the word after word "link" - Assumed that words is separeted by space (chr(32))
  sWordAfterLink = Mid(sSearch, myPos + Len(sSearchWord), InStr(myPos + Len(sSearchWord), sSearch, Chr(32)))
  MsgBox sWordAfterLink

End Sub
Avatar billede yellow Nybegynder
03. juli 2002 - 19:54 #4
dim regExp,strSearch,matches,match

strSearch = "blablabla link=paradoks blabla link=passiv blabla link=produktiv"

set regExp = new RegExp
regExp.Pattern = "link=(paradoks|passiv|produktiv)\b"
regExp.Global = true
regExp.IgnoreCase = true
set matches = regExp.execute( strSearch )
for each match in matches
  msgbox match
next
set regexp = nothing
set matches = nothing
Avatar billede yellow Nybegynder
03. juli 2002 - 19:57 #5
Eller kortere endnu..

dim regExp,strSearch,match

strSearch = "blablabla link=paradoks blabla link=passiv blabla link=produktiv"

set regExp = new RegExp
regExp.Pattern = "link=(paradoks|passiv|produktiv)\b"
regExp.Global = true
regExp.IgnoreCase = true
for each match in regExp.execute( strSearch )
  msgbox match
next
set regexp = nothing
Avatar billede driis Nybegynder
03. juli 2002 - 19:59 #6
Denne funktion returnerer True hvis et af de 3 ord findes lige efter eller adskilt med et enkelt tegn efter 'link'. Hvis ikke, returnerer den False:


Private Function strChk(vStr As String) As Boolean
Dim I As Integer, X As Integer
strChk = False
vStr = LCase(vStr)
I = InStr(1, vStr, "link")
If Not I = 0 Then
    X = InStr(I + 4, vStr, "passiv")
    If X - I - 3 = 1 Or X - I - 3 = 2 Then strChk = True
    X = InStr(I + 4, vStr, "paradoks")
    If X - I - 3 = 1 Or X - I - 3 = 2 Then strChk = True
    X = InStr(I + 4, vStr, "produktiv")
    If X - I - 3 = 1 Or X - I - 3 = 2 Then strChk = True
End If
End Function
Avatar billede webwally Nybegynder
03. juli 2002 - 21:13 #7
Hm... tak for svarene alle sammen. Glemte desværre en vigtig detalje. De tre ord står i en tekstfil. Og den skal altså hente de 3 ord fra tekstfilken: dic.txt (det skal den jo så nok bare gøre inden).

Teksten i tekstfilen er inddelt således at de står lige under hinanden.
Avatar billede capital Nybegynder
03. juli 2002 - 22:14 #8
Hej igen.....

Nu har jeg gjort endnu et forsøg.

NB! driis - jeg har taget mig den frihed at "nappe" lidt af din funktion...Håber dette er ok. Vi kan jo dele points...

Private Sub search_string()

  Dim fso As New FileSystemObject
  Dim f As File
  Dim txt As TextStream

  Dim sSearchWord As String
  Dim sWord As String
  Dim arrSearchWords() As String
  Dim sSearchLine As String
  Dim sSep As String
 
  Dim i As Long
   
  ' set all vars
  sSep = ";"
  sWord = "link"
  sSearchWord = "paradoks;passiv;produktiv"
   
  ' Load elements into array
  i = 0
  Do While InStr(1, sSearchWord, sSep) > 0
    ReDim Preserve arrSearchWords(i)
    arrSearchWords(i) = Mid(sSearchWord, 1, InStr(1, sSearchWord, sSep) - 1)
    sSearchWord = Mid(sSearchWord, InStr(1, sSearchWord, sSep) + 1)
    i = i + 1
  Loop
  ReDim Preserve arrSearchWords(i)
  arrSearchWords(i) = sSearchWord
 
  ' define objects
  Set f = fso.GetFile("C:\testarea\dic.txt")
  Set txt = f.OpenAsTextStream(ForReading)
 
  ' Kill & Dispose filesystemobjects
  Set f = Nothing
  Set fso = Nothing
 
  ' loop through all lines in textstream and check
  Do While Not txt.AtEndOfStream
    sSearchLine = txt.ReadLine
    For i = LBound(arrSearchWords) To UBound(arrSearchWords)
      If strChk(sSearchLine, sWord, arrSearchWords(i)) = True Then
        MsgBox arrSearchWords(i)
      End If
    Next i
  Loop
 
  ' Close & Dispose textstreamobjects
  txt.Close
  Set txt = Nothing
 
End Sub

Private Function strChk(vStr As String, vWord As String, vSearchWord As String) As Boolean
  Dim i As Integer, X As Integer
  strChk = False
  vStr = LCase(vStr)
  i = InStr(1, vStr, vWord)
  If i > 0 Then
    X = InStr(i + Len(vWord), vStr, vSearchWord)
    If X - i - (Len(vWord) - 1) = 1 Or X - i - (Len(vWord) - 1) = 2 Then strChk = True
  End If
End Function
Avatar billede capital Nybegynder
03. juli 2002 - 22:17 #9
NB! I forlængelse af mit nye foreslag - det forudsættes at ordet link kun forekommer een gang i hver linie. Endvidere vil jeg anbefale, at du måske smider lidt fejlhåndtering ind de relevante steder.....
Avatar billede capital Nybegynder
03. juli 2002 - 22:31 #10
Ved en nærmere læsning af hvad behovet er, slår det mig pludselig....

webwally: Er det korrekt forstået, at ordene produktiv, passiv mm står skrevet i en tekstfil og dem disse ord ønsker du at hente ind i fx. et array?

Hvis ja - så forsøg dig med denne kode:

Private Sub read_from_txt()

  Dim fso As New FileSystemObject
  Dim f As File
  Dim txt As TextStream

  Dim arrSearchWords() As String
  Dim sSearchLine As String
 
  Dim i As Long
 
  ' define objects
  Set f = fso.GetFile("C:\testarea\dic.txt")
  Set txt = f.OpenAsTextStream(ForReading)
 
  ' Kill & Dispose filesystemobjects
  Set f = Nothing
  Set fso = Nothing
 
  ' loop through all lines in textstream and load elements into array
  Do While Not txt.AtEndOfStream
    ReDim Preserve arrSearchWords(i)
    arrSearchWords(i) = txt.ReadLine
    i = i + 1
  Loop
 
  ' Close & Dispose textstreamobjects
  txt.Close
  Set txt = Nothing
 
  ' loop through all elements in array
  For i = LBound(arrSearchWords) To UBound(arrSearchWords)
    MsgBox arrSearchWords(i)
  Next i
 
End Sub
Avatar billede capital Nybegynder
03. juli 2002 - 22:44 #11
hej igen igen....og her en funktion som returnerer en textstreng klippet ud af en linie, hvor ordet er link og et variabelt ord forekommer.....

håber dette kan hjælpe dig på vej......

Private Function getString(vStr As String, vWord As String, vSearchWord As String) As String
  Dim i As Integer, x As Integer
 
  vStr = LCase(vStr)
  i = InStr(1, vStr, vWord)
  x = InStr(1, vStr, vSearchWord)
  If i > 0 And x > 0 Then
    getString = Mid(vStr, x, Len(vSearchWord))
  Else
    getString = "N/A"
  End If
 
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester