Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Sökmotor i VB

Postades av 2008-06-17 16:44:37 - John Cavebring, i forum visual basic - allmänt, Tråden har 8 Kommentarer och lästs av 1994 personer

Hej,
Jag skulle behöva hjälp med följande:

Jag vill ha en funktion som ger ut en array innehållande ord i den ordning de förekommer i en text sträng, exempel:

Textsträng: "hej jag behöver hjälp med hjälp nu jag jag jag"

Array tillbaka: "jag:4, hjälp:2, hej:1, behöver:1, med:1, nu:1"


<CODE>
Public Function GetWordList(ByVal inText as String) as Variant

' Hur fan gör jag här!?!? ;-)

End Function
</CODE>



Svara

Sv: Sökmotor i VB

Postades av 2008-06-17 16:53:51 - Niklas Jansson

Tyvärr är vb dåligt lämpat för den här typen av uppgifter, många språk har vettiga strukturer för detta native, och jag är osäker på om Collection löser detta snyggt.

Antingen kör du med en Array(Array()), men det är inte så snyggt. Jag skulle föredra att göra en egen datatyp här:

<code>
Public Type SearchResult
text As String
count As Long
End Type
</code>

Sen något i stil med (pseudo, du får fixa detaljerna själv):

<code>
Public Function GetWordList(ByVal inText as String) as Variant
dim results() as SearchResult
a = Split(inText, " ")

for each str in a
if str in results
sr(str).count = sr(str).count +1
else
sr.add(str, 1)
end if
next
End Function
</code>

Det är lite trix med Redim etc., alternativt köra med arrayer, alternativt kolla på Collections.


Svara

Sv:Sökmotor i VB

Postades av 2008-06-18 14:53:21 - Sven Åke Persson

Roade mig med att lösa ditt problem med denna gammaldags Stright Forward lösning som funkar.
Vill du ha det sorterat på ett speciellt sätt så återkom. Testa denna lösning mot en ListBox.
<code>
Option Explicit
Private Sub Command1_Click()
Dim retArray() As String, i As Long
retArray = Split(GetWordList("LCase(hej jag behöver hjälp med hjälp nu jag jag jag")), ",")
'***************************************************************************************************
For i = 0 To UBound(retArray) -1 ' Har gjort denna Listbox för att du skall kunna
List1.AddItem retArray(i) ' kolla att Functionen gör rätt.
Next i ' Listboxen simulerar din GetWordList ut Variant Array
End Sub ' Du får sortera arrayen efter behov

Public Function GetWordList(ByVal inText As String) As String
Dim splitTxt() As String
Dim i As Long, j As Long, wCount As Long
Dim wTest As String, retStr As String
splitTxt = Split(inText, " ")
For i = 0 To UBound(splitTxt)
wCount = 0
wTest = splitTxt(i)
If wTest <> "" Then
For j = 0 To UBound(splitTxt)
If wTest = splitTxt(j) Then
wCount = wCount + 1
splitTxt(j) = ""
End If
Next 'j
retStr = retStr & wCount & " : " & wTest & "," ' sortera efter antal
End If
Next 'i
GetWordList = retStr
End Function
</code>


Svara

Sv: Sökmotor i VB

Postades av 2008-06-19 11:30:22 - Tomas Granlund

Lite trixigare variant med generics (lite fånigt mellansteg men ids inte fixa):

Private Function GetWordList(ByVal inText As String) As System.Collections.Generic.List(Of ordräknare)
        Dim d As New System.Collections.Generic.Dictionary(Of String, Integer)

        ' harva genom listan med ord
        For Each ord As String In inText.Split(" ")
            If Not d.ContainsKey(ord) Then
                d.Add(ord, 0)
            End If
            d(ord) += 1
        Next

        ' skapa lista med ordräknare-objekt 
        Dim l As New System.Collections.Generic.List(Of ordräknare)

        ' skapa ordräknare-objekt för varje funnet ord och dess antal förekomster
        For Each kv As System.Collections.Generic.KeyValuePair(Of String, Integer) In d
            Dim o As New ordräknare
            o.antal = kv.Value
            o.text = kv.Key

            ' lägg det nya objektet i listan
            l.Add(o)
        Next

        ' sortera listan och returnera den
        l.Sort(New ordräknareComparer())
        Return l
    End Function


    Private Structure ordräknare
        Public text As String
        Public antal As Integer
    End Structure

    Private Class ordräknareComparer
        Implements IComparer(Of ordräknare)

        Public Function Compare(ByVal x As ordräknare, ByVal y As ordräknare) As Integer Implements System.Collections.Generic.IComparer(Of ordräknare).Compare
            Return x.antal > y.antal
        End Function
    End Class


Svara

Sv:Sökmotor i VB

Postades av 2008-06-19 12:23:26 - Niklas Jansson

Fast det här är vb6, inte vb.net. Hade det varit i vb.net hade jag använt någon typ av hashtabell ("HashMap" heter det väl?), som gör det hundra gånger snyggare och enklare.


Svara

Sv:Sökmotor i VB

Postades av 2008-06-19 12:39:11 - Sven Åke Persson

Har ändrat min kod ovan. På raden

<b> retArray = Split(GetWordList(LCase("hej jag behöver hjälp med hjälp nu Jag jag jag")), ",")</b>
LCase har tillkommit

Både ("Jag" och "jag") räknas i samma batch blir (4 jag)

Tycker att min lösning är snygg. Vad tycker Ni. ;-)

Förmodligen tycker Ni som tar betalt för antal programrader att det är skit.


Svara

Sv: Sökmotor i VB

Postades av 2008-06-19 13:43:19 - Niklas Jansson

Det snyggaste hade ju varit i språk som stöder olika typer av maps, här C++:

string s = "hej jag behöver hjälp med hjälp nu Jag jag jag", tmp;
stringstream ss(s);
map<string, size_t> occurences;
ss >> tmp;
while(!ss.eof()){
  occurences[tmp]++;
  ss >> tmp;
}


Ännu snyggare med vettig användning av färdiga STL-style-algoritmer, eller i språk som haskell eller Ruby, där array-hantering är mer naturlig.
Typ (Ruby):

<code>
words = "apa apa gris"
freqs = Hash.new(0)
words.split(" ").each { |word| freqs[word] += 1 }
</code>
freqs innehåller nu hela listan räknad... (prova själv på http://tryruby.hobix.com/).


Svara

Sv: Sökmotor i VB

Postades av 2008-06-30 16:49:48 - John Cavebring

Riktigt snyggt!!!

Tack för hjälpen!!


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
602
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies