/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Hvormange x er
Fra : Jan Damkjær Dahl


Dato : 23-11-02 17:51

hejsa

hvordan kan jeg finde ud af hvormange forekomster der er i en streng, af et
bestemt tegn

f.eks hvormange X ér er der i en sætning

jeg skal have en funktion nogenlunde sådan her

if antalXér > 4 then
do somthing
else
do somthing else
end if



--
Jan Damkjær Dahl
97523420



 
 
David Leonard (23-11-2002)
Kommentar
Fra : David Leonard


Dato : 23-11-02 19:07

Public Function AntalTegn(sTegnAtLedeEfter,sHeleStrengen)
dim i,k
k=0
for i=1 to len(sHeleStrengen)

if mid(sHeleStrengen,i,1)=sTegnAtLedeEfter then k=k+1
next i
AntalTegn=k

End Function

"Jan Damkjær Dahl" <jdd@cykel.dk> skrev i en meddelelse
news:aroblh$16k7$1@news.cybercity.dk...
> hejsa
>
> hvordan kan jeg finde ud af hvormange forekomster der er i en streng, af
et
> bestemt tegn
>
> f.eks hvormange X ér er der i en sætning
>
> jeg skal have en funktion nogenlunde sådan her
>
> if antalXér > 4 then
> do somthing
> else
> do somthing else
> end if
>
>
>
> --
> Jan Damkjær Dahl
> 97523420
>
>



David Leonard (23-11-2002)
Kommentar
Fra : David Leonard


Dato : 23-11-02 19:12

Fx

x="Hej. Går det godt?"
y=antaltegn("e",x)
msgbox "Der er " & y & " e'er"



"David Leonard" <david@dlsoft.dk> skrev i en meddelelse
news:arog5d$qcq$1@sunsite.dk...
> Public Function AntalTegn(sTegnAtLedeEfter,sHeleStrengen)
> dim i,k
> k=0
> for i=1 to len(sHeleStrengen)
>
> if mid(sHeleStrengen,i,1)=sTegnAtLedeEfter then k=k+1
> next i
> AntalTegn=k
>
> End Function
>
> "Jan Damkjær Dahl" <jdd@cykel.dk> skrev i en meddelelse
> news:aroblh$16k7$1@news.cybercity.dk...
> > hejsa
> >
> > hvordan kan jeg finde ud af hvormange forekomster der er i en streng, af
> et
> > bestemt tegn
> >
> > f.eks hvormange X ér er der i en sætning
> >
> > jeg skal have en funktion nogenlunde sådan her
> >
> > if antalXér > 4 then
> > do somthing
> > else
> > do somthing else
> > end if
> >
> >
> >
> > --
> > Jan Damkjær Dahl
> > 97523420
> >
> >
>
>



Dcasso (23-11-2002)
Kommentar
Fra : Dcasso


Dato : 23-11-02 21:46

Du får lige en måde mere (lavede den mens david postede sin :)

mvh
Dennis

Følgende returnerer 5

msgbox FindAntalX("kkaakkk", "k")

Public Function FindAntalX(Tekst As String, SoegeVaerdi As String)
Dim J As Integer, I As Integer
For I = 1 To Len(Tekst)
If InStr(I, Tekst, SoegeVaerdi) > 0 Then
I = InStr(I, Tekst, SoegeVaerdi)
J = J + 1
End If
Next I
FindAntalX = J
End Function



On Sat, 23 Nov 2002 17:50:59 +0100, "Jan Damkjær Dahl" <jdd@cykel.dk>
wrote:

>hejsa
>
>hvordan kan jeg finde ud af hvormange forekomster der er i en streng, af et
>bestemt tegn
>
>f.eks hvormange X ér er der i en sætning
>
>jeg skal have en funktion nogenlunde sådan her
>
>if antalXér > 4 then
> do somthing
>else
> do somthing else
>end if


David Leonard (23-11-2002)
Kommentar
Fra : David Leonard


Dato : 23-11-02 21:54

> Du får lige en måde mere (lavede den mens david postede sin :)
Hm. Jeg kan godt se at din kode virker, men den er ikke _logisk_ for et
menneske (ikke for mig, i hvert fald



Bjarke Walling Peter~ (23-11-2002)
Kommentar
Fra : Bjarke Walling Peter~


Dato : 23-11-02 22:55

Måske er den mere ulogisk, men i teorien hurtigere - i hvert fald, når der
er tale om store strenge med relativt få forekomster.

Mvh. Bjarke

David Leonard skrev:
> Hm. Jeg kan godt se at din kode virker, men den er ikke _logisk_ for et
> menneske (ikke for mig, i hvert fald



preben nielsen (24-11-2002)
Kommentar
Fra : preben nielsen


Dato : 24-11-02 00:06


"Dcasso" <ikke@oplyst_pga_spam.dk> skrev i en meddelelse
news:g7qvtugo0uv3nj3p4ph2h98u1ds4t1vust@4ax.com...

> Public Function FindAntalX(Tekst As String, SoegeVaerdi As
String)
> Dim J As Integer, I As Integer
> For I = 1 To Len(Tekst)
> If InStr(I, Tekst, SoegeVaerdi) > 0 Then
> I = InStr(I, Tekst, SoegeVaerdi)
> J = J + 1
> End If
> Next I
> FindAntalX = J
> End Function

Ideen er ok .... men en For løkke ??? Det er i mange sprog
udefineret hvad der sker når du ændrer en index variabel inde i
løkken.

Nedenstående er IMO mere korrekt, kan bruges til at søge
delstrenge af vilkårlig længde, virker og er mere effektiv.

Public Function FindAntalX(Tekst As String, SoegeVaerdi As String)
Dim I As Integer
I = InStr(1, Tekst, SoegeVaerdi) ' Find første
forekomst
Do while I > 0 ' Er der
flere forekomster ?
FindAntalX = FindAntalX + 1 ' Jeps, det var een
til
I = InStr(I + Len(SoegeVaerdi), Tekst, SoegeVaerdi) '
Find næste forekomst
Loop
End If


--
/\ preben nielsen
\/\ prel@post.tele.dk



Tomas Christiansen (24-11-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 24-11-02 23:12

preben nielsen skrev:
> Nedenstående er IMO mere korrekt, kan bruges til at søge
> delstrenge af vilkårlig længde, virker og er mere effektiv.

Yes, bortset fra et par småfejl i din kode.

> Public Function FindAntalX(Tekst As String, SoegeVaerdi As String)

Du bør nok lige sætte en type på funktionsværdien.
Argumenterne skal ikke ændres af funktionen, så de bør overføres
ByVal.

> Dim I As Integer
> I = InStr(1, Tekst, SoegeVaerdi) ' Find første forekomst

Hvorfor dog begrænse sig til kun at kunne behandle strenge med en
længde på mindre end 32768 tegn - når nu InStr returnerer en Long,
hvorfor så ikke bruge denne hele værdi?
Hvad hvis der kun er 0 (nul) forekomster, er det så rimeligt at
returnere Empty - burde det ikke være... 0?

> Do while I > 0 ' Er der flere
forekomster ?
> FindAntalX = FindAntalX + 1 ' Jeps, det var een til
> I = InStr(I + Len(SoegeVaerdi), Tekst, SoegeVaerdi)
> ' Find næste forekomst
> Loop
> End If

"End If" her???

Her er din kode med mine rettelser (og med navnene "forengelskede" -
bare for at være sådan lidt international):

Function Occurs(ByVal sCheck As String, ByVal sMatch As String) As
Long
Dim lFound As Long
lFound = InStr(1, sCheck, sMatch)
Do While lFound > 0
Occurs = Occurs + 1
lFound = InStr(lFound + Len(sMatch), sCheck, sMatch)
Loop
End Function

-------
Tomas


Johnny Fladstrand (24-11-2002)
Kommentar
Fra : Johnny Fladstrand


Dato : 24-11-02 08:51

Man kan da,også lave det sådan her (rekursivt):
--------------
Public Function FindAntal(strTekst As String, strSoeg, intPos As
Integer, intAntal As Integer) As Integer
If Mid(strTekst, intPos, 1) = strSoeg Then
intAntal = intAntal + 1
End If
If intPos < Len(strTekst) Then
FindAntal = FindAntal(strTekst, strSoeg, intPos + 1, intAntal)
End If
FindAntal = intAntal
End Function
--------------
Eksempel på kald:
msgbox FindAntal(Text1, "x", 1, 0)

Mvh
Johnny Fladstrand


"Jan Damkjær Dahl" <jdd@cykel.dk> wrote in message
news:aroblh$16k7$1@news.cybercity.dk...
> hejsa
>
> hvordan kan jeg finde ud af hvormange forekomster der er i en streng, af
et
> bestemt tegn
>
> f.eks hvormange X ér er der i en sætning
>
> jeg skal have en funktion nogenlunde sådan her
>
> if antalXér > 4 then
> do somthing
> else
> do somthing else
> end if
>
>
>
> --
> Jan Damkjær Dahl
> 97523420
>
>



Tomas Christiansen (24-11-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 24-11-02 22:50

Johnny Fladstrand skrev:
> Man kan da,også lave det sådan her (rekursivt):
....
> Public Function FindAntal(strTekst As String, strSoeg, ...

Idéen er god nok, men desværre nærmest ubruglig i VB 6, idet køretiden
bliver elendig, RAM-forbruget (relativt) stort (i forhold til de
øvrige metoder) og man vil kun kunne behandle strenge på op til "nogle
få tusinde" tegn, idet stakken hurtigt bliver fyldt op (en lille test
viste en maks-grænse på 3360 tegn i strTekst i min VB 6 - grænsen
afhænger naturligvis af hvad der ellers måtte ligge på stakken).


-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste