mboost-dp1
VBScript med mellemrun ?
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg sidder og laver et script, men jeg har brug lidt hjælp.
jeg har en inputbox hvor den tjekker hvad der bliver skrevet, f.eks. "Jens Jensen" og så retunere den en tekst f.eks. "hej Jens Jensen".
Mit Problem er at jeg gerne vil ha den til at tjekke om der er mellemrum (" ") i og så skrive noget andet end "hej Jens Jensen"
nogen forslag?
jeg har en inputbox hvor den tjekker hvad der bliver skrevet, f.eks. "Jens Jensen" og så retunere den en tekst f.eks. "hej Jens Jensen".
Mit Problem er at jeg gerne vil ha den til at tjekke om der er mellemrum (" ") i og så skrive noget andet end "hej Jens Jensen"
nogen forslag?
det jeg er ved at lave er noget med et score system, hvor man får flere point hvis man skriver noget med mellemrum f.eks.
men det virker ikk helt som jeg vil ha det til. Det skal være at hvis de skriver "Jens Jensen" så skal outputtet være være 16 og ikk 11, får så bliver der added 5 "point" får et mellemrum
dim test
dim antal
test = inputbox("Skriv et eller andet", "test","")
antal = len(test)
if test = " " then
else
wscript.echo(antal)
end if
men det virker ikk helt som jeg vil ha det til. Det skal være at hvis de skriver "Jens Jensen" så skal outputtet være være 16 og ikk 11, får så bliver der added 5 "point" får et mellemrum
Det er lang tid siden jeg har kodet VBscript, men du kan f.eks. splitte din string ved mellemrum og så tælle hvor mange ord der er.
hvis du så trækker 1 fra, vil du have det antal mellemrum der er i din string.
Men der sikkert nogen der kan komme på en nemmere måde
hvis du så trækker 1 fra, vil du have det antal mellemrum der er i din string.
Men der sikkert nogen der kan komme på en nemmere måde
dim test
dim ord
dim antal
dim i
antal = 0
test = inputbox("Skriv et eller andet", "test","")
ord = split(test," ")
for i = lbound(ord) to ubound(ord)
antal = antal + 1
next
wscript.echo("Der var " & antal - 1 & " mellemrum")
Split er en funktion som deler en string op i en array ved en delimiter.
f.eks: ord = split("Dette er en string"," ")
vil blive til
ord(0) = Dette
ord(1) = er
ord(2) = en
ord(3) = string
Ved at tælle antal af gange den stringen er blevet delt, kan man så vide hvor mange delimiterkaraktere/ord der er.
(Reference: MSDN)
Dette virker lidt overkill, men jeg kan simpelthen ikke finde en tælle funktion nogen steder.
Instr ligner, men den fortæller kun hvilken position det der søges efter er på.
(Reference: MSDN)
Men det skal selvfølgelig ikke ødelække vores gode humør, vi skriver da blot vores egen funktion.
Den fulde kilde det eksemplet:
Selve funktionen Count
funktion modtager:
string: sætningen der skal søges i i.
searchchars: det/de tegn der skal søges efter.
og så returnere antalet der er fundet.
Du kan kalde den så mange gange du vil og tælle hvad du nu vil med den.
f.eks: ord = split("Dette er en string"," ")
vil blive til
ord(0) = Dette
ord(1) = er
ord(2) = en
ord(3) = string
Ved at tælle antal af gange den stringen er blevet delt, kan man så vide hvor mange delimiterkaraktere/ord der er.
(Reference: MSDN)
Dette virker lidt overkill, men jeg kan simpelthen ikke finde en tælle funktion nogen steder.
Instr ligner, men den fortæller kun hvilken position det der søges efter er på.
(Reference: MSDN)
Men det skal selvfølgelig ikke ødelække vores gode humør, vi skriver da blot vores egen funktion.
Den fulde kilde det eksemplet:
Option explicit
dim str_input
dim str_searchshars
str_input = inputbox("Skriv en sætning", "Input","")
str_searchshars = inputbox("Skriv det ord du vil tælle", "Input", "")
wscript.echo("Der er " & Count(str_input,str_searchshars))
Function Count(string,searchchars)
Dim Int_Pos
dim int_count
dim bol_break
Int_Pos = 1
int_count = 0
do while bol_break = false
int_pos = instr(Int_Pos, string, searchchars)
int_count = int_count + 1
if int_pos = 0 then bol_break = true
int_pos = int_pos + len(searchchars)
loop
Count = int_count - 1
End Function
Selve funktionen Count
Function Count(string,searchchars)
Dim Int_Pos
dim int_count
dim bol_break
Int_Pos = 1
int_count = 0
do while bol_break = false
int_pos = instr(Int_Pos, string, searchchars)
int_count = int_count + 1
if int_pos = 0 then bol_break = true
int_pos = int_pos + len(searchchars)
loop
Count = int_count - 1
End Function
funktion modtager:
string: sætningen der skal søges i i.
searchchars: det/de tegn der skal søges efter.
og så returnere antalet der er fundet.
Du kan kalde den så mange gange du vil og tælle hvad du nu vil med den.
#13 fidomuh:
InStr er VBScript svar på indexOf/IndexOf, og den returnerer altså det sted i en streng, hvor den angivne søgeparameter først forekommer.
Jeg vil dog alligevel give dig point for at forsøge dig med en løsning på én linje.
VBScript er ikke værre, end man gør det til, men det er klart, at det bliver slamkode, hvis man bruger over det tidobbelte antal linjer i forhold til, hvad der er nødvendigt. Det ligger vist i definitionen af slamkode.
InStr er VBScript svar på indexOf/IndexOf, og den returnerer altså det sted i en streng, hvor den angivne søgeparameter først forekommer.
Jeg vil dog alligevel give dig point for at forsøge dig med en løsning på én linje.
VBScript er ikke værre, end man gør det til, men det er klart, at det bliver slamkode, hvis man bruger over det tidobbelte antal linjer i forhold til, hvad der er nødvendigt. Det ligger vist i definitionen af slamkode.
#19:
Et lidt dybere array er alt du har brug for: Tre rækker og ... Ja.. X antal kolonner.
Første række har naturligvis bogstavet. Anden række har værdien og tredje har antallet af bogstaver i sætningen. Så er alt du skal gøre at parse sætningen og tælle op.
Desværre aner jeg ikke hvordan man skriver VBScript kode. :-)
Et lidt dybere array er alt du har brug for: Tre rækker og ... Ja.. X antal kolonner.
Første række har naturligvis bogstavet. Anden række har værdien og tredje har antallet af bogstaver i sætningen. Så er alt du skal gøre at parse sætningen og tælle op.
Desværre aner jeg ikke hvordan man skriver VBScript kode. :-)
#14 Acro
Ja, den må jeg jo så tage på mig.
Jeg forstod på stewert i #10 at han også ville tælle ord("ak", "sød" eller lignende, som han skriver).
Det kan man ikke med dit eksempel A, men godt med dit eksempel B.
(Den vil så tage elle kombinationer, sødmælk og sødetabeletter vil alle tælle med som ordet "sød")
#20
VBScript Language Reference: http://msdn2.microsoft.com/en-us/library/d1wf56tt....
Ja, den må jeg jo så tage på mig.
Jeg forstod på stewert i #10 at han også ville tælle ord("ak", "sød" eller lignende, som han skriver).
Det kan man ikke med dit eksempel A, men godt med dit eksempel B.
(Den vil så tage elle kombinationer, sødmælk og sødetabeletter vil alle tælle med som ordet "sød")
#20
VBScript Language Reference: http://msdn2.microsoft.com/en-us/library/d1wf56tt....
Forekommer mig nemmere at bruge et RegExp objekt til at tælle istedet for alle de der løkker og strengmanipuleringer.
Hvis man så vil tælle "a"'er også kan man så:
strInput = inputbox("Skriv et eller andet", "test","")
Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.Pattern = " "
Set Matches = objRegExp.Execute(strInput)
wscript.echo(Matches.Count)
Hvis man så vil tælle "a"'er også kan man så:
objRegExp.Pattern = "a"
Set Matches = objRegExp.Execute(strInput)
wscript.echo(Matches.Count)
"At kende problemet er halvdelen af løsningen."
For mig at se kommer der kodestumper og løsningsforslag allerede inden spørgeren (Stewart) ved hvad det egentlig er han vil have.
Steward, prøv at beskrive så præcist som muligt hvad det er du gerne vil. Put så flere detaljer på. Bskrev det HELT præcist. Spørg evt. om hjælp til dette, hvis nødvendigt.
Derefter kan du prøve at finde en måde at få det kodet på. Måske kommer det helt af sig selv, når først du ved hvad du vil opnå.
For mig at se kommer der kodestumper og løsningsforslag allerede inden spørgeren (Stewart) ved hvad det egentlig er han vil have.
Steward, prøv at beskrive så præcist som muligt hvad det er du gerne vil. Put så flere detaljer på. Bskrev det HELT præcist. Spørg evt. om hjælp til dette, hvis nødvendigt.
Derefter kan du prøve at finde en måde at få det kodet på. Måske kommer det helt af sig selv, når først du ved hvad du vil opnå.
Det jeg gerne vil ha er at hvert bogstav/char giver et bestemt antal point, f.eks. :
a = 5
b = 2
c = 2
eller et eller andet i den retning. Det vil sige hvis man skriver "abc" så giver det en score der hedder 9 point, og hvis man skriver "aabc" så giver det 14 point.
giver det mening ?
a = 5
b = 2
c = 2
eller et eller andet i den retning. Det vil sige hvis man skriver "abc" så giver det en score der hedder 9 point, og hvis man skriver "aabc" så giver det 14 point.
giver det mening ?
#24
Yep, nu ved jeg præcist hvad du vil opnå. :)
Men jeg kan ikke VBScript, så jeg kan kun give dig helt generelle råd:
1) Gem din "point"-liste i et array
2) Loop hen over strengen, tæl værdierne sammen én efter én.
I Java ville dette måske virke (har ikke testet):
[code] String string = "ABC";
int[] point = new int[Character.MAX_VALUE];
point['A'] = 5;
point['B'] = 2;
point['C'] = 2;
int sum = 0;
for(char c : string.toCharArray()) {
sum += point[c];
}
[/quote]
(Tegn der ikke er angivet vil her give 0 point.)
Yep, nu ved jeg præcist hvad du vil opnå. :)
Men jeg kan ikke VBScript, så jeg kan kun give dig helt generelle råd:
1) Gem din "point"-liste i et array
2) Loop hen over strengen, tæl værdierne sammen én efter én.
I Java ville dette måske virke (har ikke testet):
[code] String string = "ABC";
int[] point = new int[Character.MAX_VALUE];
point['A'] = 5;
point['B'] = 2;
point['C'] = 2;
int sum = 0;
for(char c : string.toCharArray()) {
sum += point[c];
}
[/quote]
(Tegn der ikke er angivet vil her give 0 point.)
Damn Stewart! Måske skulle du købe dig en programmerings-bog.
Eller noget i den retning. Som #23 siger, så ville det hjælpe hvis vi vidste hvad det i virkeligheden er du vil lave.
Dim searchwords() as string, searchpoints() as Integer
ReDim searchwords(1)
ReDim searchpoints(1)
searchwords(0) = " "
searchpoints(0) = 4
searchwords(1) = "ost"
searchpoints(1) = 6
Dim i as Integer, points as Integer, p as integer
For i = 0 To UBound(searchwords)-1
p = 0
p = InStr(searchstring, str)
while(p >= 0)
points = points + searchpoints(i)
p = InStr(searchstring, str, p+1)
Wend
Next i
Eller noget i den retning. Som #23 siger, så ville det hjælpe hvis vi vidste hvad det i virkeligheden er du vil lave.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.