|
| 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
| |
|
|