07. december 2002 - 21:32Der er
31 kommentarer og 1 løsning
Fritekst-søgning i VB 6.0
Jeg har følgende kode: with list1 .additem "Bamse" .additem "Dukkelise" end with private sub list1.click() if list1.text = "Bamse" then text1.text ="Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." end if if list1.text = "Dukkelise" then text1.text ="Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene." end if end sub Problem: Jeg vil nu gerne søge på alle forekomster af eksempelvis Bamse i min list1Click, for eksempel i text2.text og få dem skrevet ud en for en med den tilhørende tekst (context)i for eksempel text3.text. Hvordan skal en sådan kode se ud?
Den skal jeg nok lige have skåret ud i pap. Hvor meget af din list1 vil du have gennemsøgt? Hvad er det lige du vil have skal stå i hhv list2 og list3?
Hej. Jeg synes - trods den omstændige forklaring - heller ikke at det er ganske klart hvad du vil opnå.
Når jeg i lister vil søge flere forekomster af en søgestreng, så anvender jeg en tekstboks hvor jeg for hvert tegn (tekst1.change) gennemsøger enten filen som listens indhold kom fra, - eller bedre et array, der indeholder listens poster som en slags skygge. Inden søgningen tømmes listen, og derpå tilføjes kun poster der indeholder søgeteksten. Kommandoen for at søge i f.eks. mit array er: InStr
Private Sub txtsogtitel_Change() lstresu.Clear For t = 0 To total If InStr(LCase(titler(t)), LCase(txtsogtitel.Text)) > 0 Then lstresu.AddItem titler(t) Next If lstresu.ListCount = 1 Then lstresu.SetFocus lstresu.ListIndex = 0 lstresu_Click End If End Sub
>Mikker, det er list1click og teksten der er indeholdt i if-sætningen, der skal undersøges. Det er eksempelvis alle 3 forekomster af "Bamse" men kunne også være Dukkelise, eller "hører" eller "sammen" eller "med". Der skal være tale om fritekstsøgning.
Tak. Jeg vil gerne bede om yderligere forklaring. Altså jeg skriver søgeordet i text2.text. Resultatet søges i list1click og resultatet skal udskrives i text3.text.
Den laver lidt bøvl, men nu bliver jeg nødt til at gå i seng. Vender nok tilbage imorgen engang. Leg lidt med det :O)
Option Explicit Option Compare Text 'så søger vi uafhængigt af U/L case Private Sub Form_Load() ' text3 skal være multiline = true !!! Text2 = "bamse" ' her har jeg valgt et ord for nemheds skyld With List1 .AddItem "Bamse" .AddItem "Dukkelise" End With End Sub
Private Sub list1_click() Text3 = "" ' følgende kode skulle gerne søge efter det ord du har valgt. ' derefter vil sætnigen ('context') blive fundet og udskrevet ' jeg har valgt at bruge , & . som 'afbrydere' Dim sord ' søgeordet Dim svenstre, shojre ' søg højre og venstre Dim venstrep, hojrep ' venstre og højre position Dim sstart ' startposition If List1.Text = "Bamse" Then Text1.Text = "Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." End If If List1.Text = "Dukkelise" Then Text1.Text = "Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene." End If ' instr returnerer en værdi - 0 hvis ingen sammenfald ' søg i text1 efter streng i text2 forfra: sord = InStr(sstart, Text1, Text2) ' hvis ikke søgnignen passer skal vi tilbage til text2 og markere ordet ' så vi kan starte forfra If sord = 0 Then Text2.SetFocus: Text2.SelStart = 0: Text2.SelLength = Len(Text2) ' hvis der er fundet noget og det ikke er det første bogstav If sord > 1 Then ' vi tager et skridt til venstre for at undersøge ' om vi skal have dette tegn med venstrep = sord - 1 ' vi må ikke komme længere ned end til det første bogstav (venstrep = 1) ' så 'ryger vi ud over' Do While Not venstrep <= 1 Select Case Mid(Text1, venstrep, 1) ' vi søger efter følgende tegn: komma & punktum Case ".", "," Exit Do Case Else ' ellers hopper vi endnu et tegn til venstre venstrep = venstrep - 1 End Select Loop End If ' nu til højre, hvis ikke det er det yderste tegn altså If sord < Len(Text1) Then hojrep = sord + 1 Do While Not hojrep >= Len(Text1) Select Case Mid(Text1, hojrep, 1) ' vi søger efter følgende tegn: komma & punktum Case ".", "," Exit Do Case Else ' ellers hopper vi endnu et tegn til højre hojrep = hojrep + 1 End Select Loop End If ' fjern komma og punktum igen If hojrep < Len(Text1) Then hojrep = hojrep - 1 If IsEmpty(venstrep) = True Then venstrep = 1 Text3 = Text3 & Mid(Text1, venstrep, hojrep) If (hojrep + Len(Text2)) <= Len(Text1) Then sord = InStr((hojrep + 1), Text1, Text2) If sord > 0 Then sstart = hojrep + 1: Text3 = Text3 & vbCrLf: GoTo forfra End If End Sub
Jeg er ked af at lave om på det hele, men med lidt arbejde tror jeg denne vil virke bedre. Det er nemmere at rette den til, samt få den til at opføre sig ordentligt :O)
Det virker nok lidt rodet, men igen.... Leg lidt med det. Hvis bare det nogenlunde minder om noget du på et tidspunkt kan bruge, så skal jeg gerne lege lidt mere med det. Hvis ikke du kan bruge det, så har jeg da i det mindste slappet af og hygget mig en times tid :O)
Option Explicit Dim sstreng As String Dim sord As String Dim plac As Integer
Private Sub Form_Load() List1.AddItem "test1" List1.AddItem "test2" List1.AddItem "test3" End Sub
Private Sub List1_Click() Dim startsog As Integer Dim svar_sog As Long Dim svar_hojre As Long Dim svar_venstre As Long Dim streng_start As Integer Dim streng_slut As Integer Dim vsog, hsog startsog = 1 vsog = 1 hsog = 1 If List1.Text = "test1" Then Text1 = "Dette er test nummer 1,der er ingen bamse, ingen dukkelise" End If If List1.Text = "test2" Then Text1 = "Dette er test nummer 2,der er ingen dukkelise, ingen bamse" End If If List1.Text = "test3" Then Text1 = "Dette er test nummer 3. Her er både bamse og dukkelise. Bamse er her endda to gange" End If svar_sog = InStr(startsog, Text1, Text2, vbTextCompare) If svar_sog = 0 Or svar_sog = Null Then With Text2 .SetFocus .SelLength = Len(Text2) .SelStart = 0 End With End If If Len(Text1) > ((svar_sog + Len(Text2)) - 1) Then svar_hojre = InStr((svar_sog + Len(Text2)), Text1, ".", vbTextCompare) End If If svar_sog > 1 Then svar_venstre = InStrRev(Text1, ".", svar_sog, vbTextCompare) End If If svar_venstre = 0 Or svar_venstre = Null Then streng_start = 1 Else streng_start = svar_venstre End If If svar_hojre = 0 Or svar_hojre = Null Then streng_slut = Len(Text1) Else streng_slut = (svar_hojre - svar_venstre) End If Text3 = Mid(Text1, streng_start, streng_slut) End Sub
- Mikker
P.S. Denne udgave søger kun efter punktum, som afbrydere...
Jeg har lige rettet en _mindre_ fejl jeg havde lavet, så nu skriver dne _kun_ i text3, hvis der rent faktisk _ER_ et resultat :O)
Option Explicit Dim sstreng As String Dim sord As String Dim plac As Integer
Private Sub Form_Load() List1.AddItem "test1" List1.AddItem "test2" List1.AddItem "test3" End Sub
Private Sub List1_Click() Dim startsog As Integer Dim svar_sog As Long Dim svar_hojre As Long Dim svar_venstre As Long Dim streng_start As Integer Dim streng_slut As Integer Dim vsog, hsog startsog = 1 vsog = 1 hsog = 1 If List1.Text = "test1" Then Text1 = "Dette er test nummer 1,der er ingen bamse, ingen dukkelise" End If If List1.Text = "test2" Then Text1 = "Dette er test nummer 2,der er ingen dukkelise, ingen bamse" End If If List1.Text = "test3" Then Text1 = "Dette er test nummer 3. Her er både bamse og dukkelise. Bamse er her endda to gange" End If svar_sog = InStr(startsog, Text1, Text2, vbTextCompare) If svar_sog = 0 Or svar_sog = Null Then With Text2 .SetFocus .SelLength = Len(Text2) .SelStart = 0 End With Else If Len(Text1) > ((svar_sog + Len(Text2)) - 1) Then svar_hojre = InStr((svar_sog + Len(Text2)), Text1, ".", vbTextCompare) End If If svar_sog > 1 Then svar_venstre = InStrRev(Text1, ".", svar_sog, vbTextCompare) End If If svar_venstre = 0 Or svar_venstre = Null Then streng_start = 1 Else streng_start = svar_venstre End If If svar_hojre = 0 Or svar_hojre = Null Then streng_slut = Len(Text1) Else streng_slut = (svar_hojre - svar_venstre) End If Text3 = Mid(Text1, streng_start, streng_slut) End If End Sub
>Mikker. Det er et stort stykke arbejde du har lavet, tak for det. Men du har nok misforstået mig. Det jeg ville var at indtaste et søgeord i text2.text, hvorefter programmet automatisk skulle gennemsøge den tekst, der er anført i de respektive If-end sætninger i list1.click. Men det var ikke meningen, at jeg selv skulle klikke i list1 for at få undersøgt teksten. Forestil dig, at jeg har 10.000 if-end'er? Kunne du ændre programmet til: "Hvis et af de ord, der er anført et eller andet sted mellem if-endif i hele list1.click er = søgeordet i text2.text så skriv dette ord i text3.text hver gang det forekommer"? Måske kan man slet ikke gennelæse indholdet af list1.click automatisk?
Troede bare det var det du ville, eftersom selve sub'en hedder list1_click. Jeg regnede faktisk med, at du ville bruge det til at søge i en hvilken som helst tekst...
Anyway. Ifølge hvad du siger _nu_ er list1 ikke længere nødvendig - Korrekt? Hvis man skriver et ord i text2 og trykker <enter> er det godt nok - Korrekt? Du vil stadig have mere end bare det ord der er skrevet i text2 - Korrekt?
Nu tror jeg tiøren faldt :O)
Hvad med det her:
Option Compare Text Private Sub Command1_Click() Text3 = "" For i = 0 To (List1.ListCount - 1) If List1.List(i) = Text2 Then If Text2 = "bamse" Then Text3 = Text3 & "Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." Text3 = Text3 & vbCrLf End If If Text2 = "dukkelise" Then Text3 = Text3 & "Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene." Text3 = Text3 & vbCrLf End If End If Next i End Sub
Private Sub Form_Load() ' husk at sætte text3.multiline = true List1.AddItem "bamse" List1.AddItem "dukkelise" End Sub
>mikker Tampen brænder. Fantastisk at du stadig hænger på.:o) If List1.List(i) = Text2 Then text3= skal være lig text1.text i nedenstående: text1.text ="Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." Det er ikke meningen, at jeg igen skal skrive sætningen "Bamse hører..osv" det er meningen at denne tekst skal komme frem i text3. Det er altså rigtigt, det du koder, men teksten skal ikke skrives igen af mig/bruger. Der er jo allerede skrevet en tekst, og det er den der skal vises. Der skal altså ikke søges på de items jeg har lavet men i den tilhørende tekst til disse items. Der skal søges i text1.text ved at indtaste et ord i text2. Det er helt ok med command1.click.
Se her mikker with list1 .additem ”Test1” .additem ”Test2” end with list1.click If list1.click = Test1” then text1.text = “Dette er test1 første item” end if If list1.click = “Test2” then text1.text = “Dette er test2 andet item” end if end sub Det er altså min kode. Og så problemet jeg vil søge fritekst: Altså hvis text2.text = ”første” then i text3 skal så fremkomme hele sætningen”Dette er test1 første item” hvis text2.text = “test1” skal I text3 fremkomme hele sætningen”Dette er test1 første item” Er du med nu?
Se her mikker with list1 .additem ”Test1” .additem ”Test2” end with list1.click If list1.click = "Test1" then text1.text = "Dette er test1 første item" end if If list1.click = "Test2" then text1.text = "Dette er test2 andet item" end if end sub Det er altså min kode. Og så problemet jeg vil søge fritekst: Altså hvis text2.text = "første" then i text3 skal så fremkomme "Dette er test1 første item" hvis text2.text = "test1" skal I text3 fremkomme "Dette er test1 første item" Er du med nu?
Undskyld rodet. Word og Eksperten har det ikke godt med hinanden, når der skal oversættes anførselstegn ved kopiering. Håber du kan finde ud af det alligevel.
Så hvis du indtaster 'hører' i text2 Skal der komme 2 linier i text3, nemlig _både_ "Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." _OG_ "Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene."
Fordi ordet 'hører' findes begge steder? Nærmer jeg mig?
Glem list1_click() Du sidder fast i dine idéer. list1_click() er kun brugbar, hvis du _selv_ vil 'klikke' i list1. Nu er vi blevet enige om command1_click() Ikke sandt? _GODT_. Næste spørgsmål:
Hvad fand** er det du vil med alle de if..end if sætninger? Hvad vil du i det hele taget med list1? Hvad skal du bruge text1 til? Hele idéen virker mere og mere absurd og du gør tingene flere gange. Først skriver du svarerne i if...end if sætninger, så lægger du nogle 'items' med søgemuligheder ind i list1 og så søger du bagefter?????? !!!!
Prøv at beskrive hvad du skal bruge det til, så kan det være vi kan finde en mere rationel måde at håndtere tingene på.
Anyway, selvfølgelig vil jeg hjælpe, men jag kan ikke få mig selv til at lave noget der med fuldt overlæg er klodset. Det kan godt være jeg _er_ klodset, men jeg _prøver_ at æade være :O)
Næste forsøg: Ligner meget det sidste, men er sikkert helt forkert. Du bliver ved med at insistere på, at bruge list1, så jeg har flyttet alle dine if..end if sætninger over til at være 'items' i list1.
ALSOOOO! Voila
Private Sub Command1_Click() Text3 = "" For i = 0 To (List1.ListCount - 1) res = InStr(1, List1.List(i), Text2, vbTextCompare) If res > 0 Then Text3 = Text3 & List1.List(i) Text3 = Text3 & vbCrLf End If Next i End Sub
Private Sub Form_Load() ' husk at sætte text3.multiline = true List1.AddItem "Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." List1.AddItem "Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene." List1.AddItem "Lisebamsen hører bare ikke efter" End Sub
Flot klarer mikker, tusind tak! Det var præcis det jeg ønskede.Måske har jeg ud over problemer med VB også problemer med at udtrykke mig på dansk, slår det mig pludselig. Men det skal jeg nok have hjælp til andetsteds!:o)) Jeg har en lærebog i VB, der er forsynet med et stikordsregister. Dette er ikke særlig udtømmende, og jeg bruger lang tid på at finde ting, som jeg ved, at jeg har set i bogen på et eller andet tidspunkt. Tænk hvis bogen havde været på CD og jeg kunne søge ved hjælp af et eller andet tilfældigt ord? Det er altså en slags udvidet indholdsfortegnelse jeg arbejder med. Det hele er kun for sjov, men man lærer nok bedst ved at skulle bruge koderne til noget konkret. Det kan sikkert gøres meget mere elegant, men jeg må jo tage et skridt af gangen.
JUUUUHUUUUUUUUU !!!! :o) DET LYKKEDES. FANTASTISK.
Takker for point, men hvis du har lyst til at 'tage et skridt mere' så se på nedenstående kode. Problemet med den sidste kodestump du fik er, at den tager ordet 'lise' fra 'dukkelise' og mener det er super. Derudover har jeg tilladt mig at markere det ord du har søgt. Anyway, prøv det.
Glædelig jul og godt nytår
Private Sub Command1_Click() Text3 = "" For i = 0 To (List1.ListCount - 1) res = InStr(1, List1.List(i), Text2, vbTextCompare) If res > 0 Then If res = 1 And Mid(List1.List(i), (res + Len(Text2)), 1) Like "[!a-z]" = True Then repfra$ = List1.List(i) repmed$ = "[" & Text2 & "]" Text3 = Text3 & Replace(repfra$, Text2, repmed, 1, , vbTextCompare) Text3 = Text3 & vbCrLf End If If (res + Len(Text2)) >= Len(List1.List(i)) Then repfra$ = List1.List(i) repmed$ = "[" & Text2 & "]" Text3 = Text3 & Replace(repfra$, Text2, repmed, 1, , vbTextCompare) Text3 = Text3 & vbCrLf End If If res > 1 And res < (Len(List1.List(i)) - Len(Text2)) Then If Mid(List1.List(i), (res + Len(Text2)), 1) Like "[!a-z]" = True And Mid(List1.List(i), (res - 1), 1) Like "[!a-z]" = True Then repfra$ = List1.List(i) repmed$ = "[" & Text2 & "]" Text3 = Text3 & Replace(repfra$, Text2, repmed, 1, , vbTextCompare) Text3 = Text3 & vbCrLf End If: End If End If Next i With Text2 .SelLength = Len(Text2) .SelStart = 0 .SetFocus End With End Sub
Private Sub Form_Load() ' husk at sætte text3.multiline = true List1.AddItem "Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." List1.AddItem "Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene." List1.AddItem "Lisebamsen hører bare ikke efter" End Sub
Jeg LOVER det er sidste gang jeg retter i min kode, men den var sgu ikke så elegant og slet ikke gennemført :O)
Private Sub Command1_Click() Text3 = "" For i = 0 To (List1.ListCount - 1) res = InStr(1, List1.List(i), Text2, vbTextCompare) If res > 0 Then If res = 1 And Mid(List1.List(i), (res + Len(Text2)), 1) Like "[!a-z]" = True Then repfra$ = List1.List(i) repmed$ = "[" & UCase(Text2) & "]" Text3 = Text3 & Replace(repfra$, Text2, repmed, 1, , vbTextCompare) Text3 = Text3 & vbCrLf End If If (res + Len(Text2)) >= Len(List1.List(i)) Then repfra$ = List1.List(i) repmed$ = "[" & UCase(Text2) & "]" Text3 = Text3 & Replace(repfra$, Text2, repmed, 1, , vbTextCompare) Text3 = Text3 & vbCrLf End If If res > 1 And res < (Len(List1.List(i)) - Len(Text2)) Then If Mid(List1.List(i), (res + Len(Text2)), 1) Like "[!a-z]" = True And Mid(List1.List(i), (res - 1), 1) Like "[!a-z]" = True Then repfra$ = List1.List(i) repmed$ = "[" & UCase(Text2) & "]" Text3 = Text3 & Replace(repfra$, Text2, repmed, 1, , vbTextCompare) Text3 = Text3 & vbCrLf End If: End If End If Next i With Text2 .SelStart = 0 .SelLength = Len(Text2) .SetFocus End With End Sub
Private Sub Form_Load() ' husk at sætte text3.multiline = true List1.AddItem "Bamse hører sammen med Dukkelise, men Bamse kan også optræde alene." List1.AddItem "Dukkelise hører sammen med Bamse, men Dukkelise kan også optræde alene." List1.AddItem "Lisebamsen hører bare ikke efter" End Sub
>mikker. Mange tak for dit tilbud! Jeg får først mulighed for at studere din udvidede kode i løbet af i morgen. Men forærer du nu ikke det hele væk i stedet for at få point? :o))
Det er nu ikke pointene der er vigtige for mig. Det gælder om at lære, husk på, at jeg også lærer mens jeg prøver at løse opgaven. Det sjove er jo netop at have en opgave, istedet for at have en halv idé om et eller andet man godt kunne tænke sig. Sådanne idéer får jeg aldrig lavet til ende :O)
>Mikker, suk. Det er desværre ikke rigtigt, endnu. Din kode søger fint i list.index, men det er jo sætningen i handlingsdelen, der skal søges på. with list1 .additem "Test1" .additem "Test2" end with list1.click If list1.click = "Test1" then text1.text = "Dette er test1 første item" end if If list1.click = "Test2" then text1.text = "Dette er test2 andet item" end if end sub Der skal altså søges i text1.text "Dette er test1 første item" og text1.text "Dette er test2 andet item" ved at indtaste et søgeord i fx text2. Du skal glemme, at if'erne står i en list. If'erne skal altså opfattes som en database! Gider du stadig hjælpe?
Du siger, at det er en udvidet indholdsfortegnelse. Så lad mig spørge således:
Hvis nu man indtastede "b" i TEXT1 så kom alle ordene i indholdsfortegnelsen, der startede med "b" i LIST1 Altså ord, som DU har bestemt skal være i indholdsfortegnelsen? Derefter kan man klikke i list1 og få vist forklaringen, eller 'indholdet' i TEXT2 ?
Jeg vil MEGET gerne hjælpe dig, men jeg har ikke lige tid idag og jeg har en 14 timers vagt imorgen, så jeg kan ikke love noget før onsdag...
Læg mærke til, at jeg har brugt en .txt fil med navnet indhold.txt. Dette er naturligvis ikke nødvendigt for dig, hvis du kæder det sammen med databsen med det samme. Jeg har følgende på min form:
list1, text1, text2, text3, command1, command2
text2 og command1 har ikke længere nogen effekt. Gør følgende for at test programmet:
start programmet og click command2. Stop og genstart programmet... !!! :O)
Nu skulle du gerne have nogle items i din list1 ? GODT prøv så at skrive noget text i text1 og tryk <enter>.
Hvis alt virker som hos mig, vil du kunne lide hvad du ser. HÅBER jeg da :O)
Private Sub Command2_Click() If Right(App.Path, 1) <> "\" Then gem$ = App.Path & "\indhold.txt" Else gem$ = App.Path & "indhold.txt" End If Text1 = App.Path Open gem$ For Output As #1 For antord = 1 To 18 If antord = 1 Then nytord$ = "Abstraktion" If antord = 2 Then nytord$ = "access" If antord = 3 Then nytord$ = "Active Server Pages" If antord = 4 Then nytord$ = "backcolor" If antord = 5 Then nytord$ = "Basic" If antord = 6 Then nytord$ = "Beregning" If antord = 7 Then nytord$ = "C++" If antord = 8 Then nytord$ = "Cancel" If antord = 9 Then nytord$ = "DAO" If antord = 10 Then nytord$ = "Data" If antord = 11 Then nytord$ = "Database" If antord = 12 Then nytord$ = "Farve" If antord = 13 Then nytord$ = "Fejl" If antord = 14 Then nytord$ = "Figur" If antord = 15 Then nytord$ = "Gates, Bill" If antord = 16 Then nytord$ = "Gem" If antord = 17 Then nytord$ = "Get" If antord = 18 Then nytord$ = "Hej" Write #1, nytord$, "Forklaring til " & nytord$ Next antord Close End Sub
Private Sub Form_Load() Dim nytord$ Text1.TabIndex = 0 List1.TabIndex = 1 ' husk at sætte text3.multiline = true If Right(App.Path, 1) <> "\" Then hent$ = App.Path & "\indhold.txt" Else hent$ = App.Path & "indhold.txt" End If Open hent$ For Input As #1 Do While Not EOF(1) Input #1, nytord$, forklaring$ List1.AddItem nytord$ Loop Close End Sub
Private Sub Text1_Change() For a = 0 To List1.ListCount - 1 If UCase(Left(List1.List(a), (Len(Text1)))) = UCase(Text1) Then List1.ListIndex = a List1.Selected(a) = True Exit For Else: List1.Selected(a) = False End If Next a End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) If List1.ListIndex = -1 Then List1.ListIndex = 0 If KeyAscii = 13 Then ' 13 er <Enter> If Right(App.Path, 1) <> "\" Then hent$ = App.Path & "\indhold.txt" Else hent$ = App.Path & "indhold.txt" End If Open hent$ For Input As #1 Do While Not EOF(1) DoEvents Input #1, nytord$, forklaring$ If nytord$ = List1.List(List1.ListIndex) Then Text3 = forklaring$ Exit Do End If Loop Close End If End Sub
Du får naturligvis en fejl første gang du forsøger at starte programmet...
Her er lige en ny version hvor jeg bruger command1 til at hente filen og fylde list1.
Private Sub Command1_Click() If Right(App.Path, 1) <> "\" Then hent$ = App.Path & "\indhold.txt" Else hent$ = App.Path & "indhold.txt" End If Open hent$ For Input As #1 Do While Not EOF(1) Input #1, nytord$, forklaring$ List1.AddItem nytord$ Loop Close End Sub
Private Sub Command2_Click() If Right(App.Path, 1) <> "\" Then gem$ = App.Path & "\indhold.txt" Else gem$ = App.Path & "indhold.txt" End If Text1 = App.Path Open gem$ For Output As #1 For antord = 1 To 18 If antord = 1 Then nytord$ = "Abstraktion" If antord = 2 Then nytord$ = "access" If antord = 3 Then nytord$ = "Active Server Pages" If antord = 4 Then nytord$ = "backcolor" If antord = 5 Then nytord$ = "Basic" If antord = 6 Then nytord$ = "Beregning" If antord = 7 Then nytord$ = "C++" If antord = 8 Then nytord$ = "Cancel" If antord = 9 Then nytord$ = "DAO" If antord = 10 Then nytord$ = "Data" If antord = 11 Then nytord$ = "Database" If antord = 12 Then nytord$ = "Farve" If antord = 13 Then nytord$ = "Fejl" If antord = 14 Then nytord$ = "Figur" If antord = 15 Then nytord$ = "Gates, Bill" If antord = 16 Then nytord$ = "Gem" If antord = 17 Then nytord$ = "Get" If antord = 18 Then nytord$ = "Hej" Write #1, nytord$, "Forklaring til " & nytord$ Next antord Close End Sub
Private Sub Form_Load() ' husk at sætte text3.multiline = true Text1.TabIndex = 0 List1.TabIndex = 1 End Sub
Private Sub Text1_Change() For a = 0 To List1.ListCount - 1 If UCase(Left(List1.List(a), (Len(Text1)))) = UCase(Text1) Then List1.ListIndex = a List1.Selected(a) = True Exit For Else: List1.Selected(a) = False End If Next a End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) If List1.ListIndex = -1 Then List1.ListIndex = 0 If KeyAscii = 13 Then ' 13 er <Enter> If Right(App.Path, 1) <> "\" Then hent$ = App.Path & "\indhold.txt" Else hent$ = App.Path & "indhold.txt" End If Open hent$ For Input As #1 Do While Not EOF(1) DoEvents Input #1, nytord$, forklaring$ If nytord$ = List1.List(List1.ListIndex) Then Text3 = forklaring$ Exit Do End If Loop Close End If End Sub
>Mikker, du har bestemt været en stor hjælp, og jeg ville gerne give dig nogle flere point. Men det ved jeg ikke, hvordan jeg gør nu, når spørgsmålet er lukket. Men.. det er jo stadig på fx "Abstraktion" der søges. Og ikke i "forklaringen" til "Abstraktion". Men det kan nok ikke lade sig gøre. Godt nytår!
Selvfølgelig kan det lade sig gøre, jeg har da vist dig mere end en måde at søge i tekst. Anyway, jeg har nok bare ikke forstået opgaven ordentligt.
Godt nytår til dig også :O)
- Mikker
Synes godt om
Ny brugerNybegynder
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.