Computer Hope
Software => Computer programming => Topic started by: thunder708 on February 03, 2010, 03:20:11 PM
-
right i have this script and i wonder if theres a way i can make it shorter? ive tried using an array but it dint work, any ideas?
ill only put part of the script as its too bgi and you will get the gist of it
dim letter(25)
dim value
value = 0
name=inputbox("Input Your Name to Get a Value:","Input Name")
name2=LCase(name)
length = len(name)
for i = 1 to length
letter(i) = mid(name2, i, 1)
if letter(i) = "a" then
value = value + 1
end if
if letter(i) = "b" then
value = value + 2
end if
if letter(i) = "c" then
value = value + 3
end if
if letter(i) = "d" then
value = value + 4
end if
if letter(i) = "e" then
value = value + 5
end if
etc.... untill
if letter(i) = "z" then
value = value +26
msgbox(value)
so any takers?
-
Make a string with all the letters.
Find the position of the single letter in the string. That number you will add to value. There is a function that finds the start position of a small sting inside of larger string. Avoid null strings.
Look up VBScript InStr Function
-
the trick is to understand the ASCII codes involved. lowercase A is 97; and each subsequent code up to 122 is another letter. What I've done in the following is take the ascii code of each character, and if it is a alphabetic char (>=97, and smaller then 123) then 97 subtracted from the ascii value is added to the result.
any other character, such as a exclamation mark (ascii code 33) would result in a negative number being added, thus the check. in those cases the code is simply added as-is. you could make it ignore non-alphabetic characters, though.
Dim name,value
Const lowercaseA=97
name=inputbox("Input Your Name to Get a Value:","Input Name")
name2=LCase(name)
length = Len(name)
for i = 1 to length
charasc=Asc(Mid(name2,i,1))
if charasc >= lowercaseA and charasc < lowercaseA+26 then
value = value + (charasc)-lowercaseA
else
value = value + charasc
end if
next
msgbox value
-
the trick is to understand the ASCII codes involved. lowercase A is 97; and each subsequent code up to 122 is another letter. What I've done in the following is take the ascii code of each character, and if it is a alphabetic char (>=97, and smaller then 123) then 97 subtracted from the ascii value is added to the result.
any other character, such as a exclamation mark (ascii code 33) would result in a negative number being added, thus the check. in those cases the code is simply added as-is. you could make it ignore non-alphabetic characters, though.
Dim name,value
Const lowercaseA=97
name=inputbox("Input Your Name to Get a Value:","Input Name")
name2=LCase(name)
length = Len(name)
for i = 1 to length
charasc=Asc(Mid(name2,i,1))
if charasc >= lowercaseA and charasc < lowercaseA+26 then
value = value + (charasc)-lowercaseA
else
value = value + charasc
end if
next
msgbox value
WRONG!
He never said it was ASCII. You get two demerits for that!
InStr makes it a one liner and is not ASCII dependent.
-
WRONG!
He never said it was ASCII. You get two demerits for that!
InStr makes it a one liner and is not ASCII dependent.
Instr doesn't help at all.
perhaps you should actually run the code and see what it does.
he's creating a sum of the alphabetic sequence characters. a is 1, b is 2, etc. and they are added up for every character, and the result printed.
Instr does not even come close to doing any of that.
Additionally, InStr doesn't work with non-ANSI characters, anyway. otherwise:
instr("AAAAĆAAA","AE")
would return 5; but it returns zero. AE and the Ć character are typographically equivalent for any unicode aware comparison, so evidently Instr is not Unicode aware, and since VBScript only runs on windows it's safe to assume that it uses the only other available character set, which is ANSI. the first 127 characters of ANSI are the same as those in ASCII.
Sure, Visual Basic/VBScript store All their strings in unicode internally, but Asc("A") will always give you 65. in fact, AscW("A") still gives you 65.
-
Right. Not Unicode. Did I say Unicode?
I was thinking of extended ASCII.
Like what some body had the name 'Peńa' ?
-
Right. Not Unicode. Did I say Unicode?
I was thinking of extended ASCII.
Like what some body had the name 'Peńa' ?
the ASCII standard calls for 8 bits; the older 7-bit constraint hasn't been seen for ages, when EBCDIC was still prevalent.
In any case, since they are only counting alphabetic characters, and the alphabetic characters have the same ordinal values in your "basic ASCII" as well as normal 8-bit ascii as well as Unicode I really don't see my method having any issues.
-
You have made the point.
I should not have said WRONG.
I should have said POOR EXAMPLE!
So your still get one demerit.
Look over your code and see what you could have done.
Or what you should have left out.
-
Aside from the constant, there is nothing even remotely ASCII-specific.
And unlike the OPs code mine doesn't error when you type in a z with "Subscript out of Range" :P
I could have left out the extraneous variables but I was trying to keep things consistent with the Original Posters code.
I should have said POOR EXAMPLE!
Better then yours. Because you didn't provide one.
-
And unlike the OPs code mine doesn't error when you type in a z with "Subscript out of Range" Tongue
Really? How did that happen? Are you sure?
-
Really? How did that happen? Are you sure?
Oh, actually, I was reading it wrong... the error would occur if you type in something longer then 25 characters.
-
Oh, actually, I was reading it wrong... the error would occur if you type in something longer then 25 characters.
Right!
Now aren't you glad I made you pay attention.
name2=LCase(name2)
for i = 1 to length
charasc = Asc(Mid(name2, i, 1))
value = value + (charasc) - lowercaseA + 1
next
-
ahhh, good catch. Too bad it took 4 posts for you to mention it, heh.
-
thanks for the help, but when i run this code:
Dim name,value
Const lowercaseA=97
name=inputbox("Input Your Name to Get a Value:","Input Name")
name2=LCase(name)
length = Len(name)
for i = 1 to length
charasc=Asc(Mid(name2,i,1))
if charasc >= lowercaseA and charasc < lowercaseA+26 then
value = value + (charasc)-lowercaseA
else
value = value + charasc
end if
next
msgbox value
when typing in my name - mike - i get a value of 34 when i know with my code i get 38
also when i use this code
name2=LCase(name2)
for i = 1 to length
charasc = Asc(Mid(name2, i, 1))
value = value + (charasc) - lowercaseA + 1
next
i get a value of 0 everytime.
WRONG!
He never said it was ASCII. You get two demerits for that!
InStr makes it a one liner and is not ASCII dependent.
I know i didnt say ASCII but i asked for any help to shorten my code, which i think he has done, so i don't think this was neccessary was it?
I have made a smiliar program in Small Basic and here is the code
TextWindow.Title = "Word & Name Valuer By Thunder708"
l = "a=1;b=2;c=3;d=4;e=5;f=6;g=7;h=8;i=9;j=10;k=11;l=12;m=13;n=14;o=15;p=16;q=17;r=18;s=19;t=20;u=21;v=22;w=23;x=24;y=25;z=26"
TextWindow.Write("Please Enter A name or word to get a value: ")
name = textwindow.read()
TextWindow.WriteLine("")
tvalue = 0
TextWindow.WriteLine("Letter Value")
TextWindow.WriteLine("")
For i = 1 To Text.GetLength(name)
letter[i] = Text.GetSubText(name, i, 1)
value[i] = l[letter[i]]
if letter[i] <> " " then
TextWindow.Writeline(letter[i] + " " + value[i])
Else
TextWindow.Write("")
EndIf
tvalue = tvalue + value[i]
EndFor
TextWindow.WriteLine("")
TextWindow.WriteLine("The total value for your word/name, " +name+ " = " + tvalue)
it is this bit that stores the info
l = "a=1;b=2;c=3;d=4;e=5;f=6;g=7;h=8;i=9;j=10;k=11;l=12;m=13;n=14;o=15;p=16;q=17;r=18;s=19;t=20;u=21;v=22;w=23;x=24;y=25;z=26"
is there a way of doing this in vbs?
-
dim name,value
Const lowercaseA=97
name=inputbox("Input Your Name to Get a Value:","Input Name")
name2=LCase(name)
length = len(name)
for i = 1 to length
charasc=asc(mid(name2,i,1))
if charasc >= lowercaseA and charasc < lowercaseA+26 then
value = value + (charasc)-lowercaseA+1
else
value = value + charasc
end if
next
msgbox value
The smaller segment was a portion of the original script.
-
ah right thank you =D it works fine now. cheers for the help
-
ah right thank you =D it works fine now. cheers for the help
yes, and thanks for geek-9pm pointing out the missing addition :)
-
So this thread can be closed.
But I wanted to ask BC if he has a favorite VBscript Editor and debugger?
-
So this thread can be closed.
But I wanted to ask BC if he has a favorite VBscript Editor and debugger?
I don't work with VBScript much, but I use editpad for editing scripts/text files.
-
Than ks. Looks good. And is FREE for personal use.
EditPad™ Pro
http://www.editpadpro.com/
-
Than ks. Looks good. And is FREE for personal use.
EditPad™ Pro
http://www.editpadpro.com/
Editpad Lite is free for personal use. Editpad Pro is not.
Editpad Lite doesn't have things like syntax highlighting and other useful (for scripting) features like that. The Pro Version isn't free but it's certainly worth it (to me)