Professional Documents
Culture Documents
functions
< A-level Computing | AQA | Paper 1 | Fundamentals of programming
You need to be familiar with several programming routines that come built into most common
programming languages. These routines are very useful and should save you a lot of effort in writing
code to perform common tasks. You might be asked to use them in the exam so learn them!
Contents
[hide]
1Arithmetic functions
o 1.1Round
o 1.2Truncation
o 2.1Length
o 2.2Position
o 2.3Substring
o 2.4Concatenation
Truncation[edit]
The truncate function returns the integer part of a number, regardless of the decimal places.
Math.Truncate(19.45) 'Returns 19
Math.Truncate(19.9999) 'Returns 19
This is particularly useful when you are trying to perform DIV in modular arithmetic.
Extension: Random numbers
An essential part of most games is the ability to use random numbers. These might be used to randomly place gold coins on a ma
The above code will give you a random number between 1 and 2,147,483,647. You might well require a number that is a little sm
and 10 you can use the following:
randomNumber = rndGen.Next(5,10)
So how exactly can we use this? Take a look at the following game:
Adjust the code above to tell the user how many guesses they took to find the random number. HINT: you'll need a variable
[Expand]
Answer :
Exercise: Arithmetic function
What does the following code output:
num2 = Math.Round(num2, 1)
num1 = Math.Truncate(num1)
total = num1 + num2
console.writeline(Math.Round(total))
[Expand]
Answer :
Write some code to output the integer part of a number input by the user
[Expand]
Answer :
Write code to output the integer and decimal parts of an input number:
Code Output
[Expand]
Answer :
Code Output
22
Position[edit]
This function allows us to find the position of an item within a given string and returns the position's
location. In visual basic this is performed by the following command: InStr([string],
[item]) For example we might want to find the location of an end of a sentence by looking for a
fullstop:
someText = "Gary had a little lamb. His fleece was white as snow."
Console.writeline(InStr(someText,"."))
Code Output
23
We can also use this command to search for strings within strings. For example if we were to look for
to see if a sentence contained a certain name:
someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Dave"))
Code Output
25
If the search item is not contained in the string then it will return 0
someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Julie"))
Code Output
Substring[edit]
This function allows you to snip items out of a string and return a substring. Visual Basic uses the
following command: [string].Substring([startPosition],[lengthOfReturnString]) .
For example we might want to find the local number from a landline phone number we have been
given. We'll have to ignore the area code:
phone = "(01234)567890"
local = phone.Substring(7, 6)
console.writeline(local)
Code Output
567890
Concatenation[edit]
This function allows you to stick strings together (concatenate) so that you can start to build strings
using variables. Visual Basic uses the following command: [stringA & stringB] For example
we might have a users name stored in a variable dim name as string and a greeting that we
would like to give them:
name = "Charles"
console.writeline("Hello " & name & ". How are you today?")
Code Output
Code Output
34
This might seem OK, but in other lanuages we might run into trouble. To perform this we
would have to convert from one datatype to another:
Code Output
34.3 34
Exercise: String functions
Write a short program to tell someone how many letters they have in their name (just in case they don't know!), for
Code Output
Input: Fremlin
Hello Fremlin, you have 7 letters in your name.
[Expand]
Answer :
Some people have stupidly typed their firstname and their surname into a database, write some code to display the f
Code Output
[Expand]
Answer :
A telephone number has been typed into a computer as a string: (01234)567890
Code Output
Input: (01234)567890
Output: 01234567890
[Expand]
Answer :
A similar question to the one above, telephone numbers are currently stored in a very unreadable format: 01234567
5 figures are the area code:
Code Output
Input: 01234567890
Output: (01234)567890
[Expand]
Extension: REGEX
You will often want to check the format of a string being input and if it is incorrect you will want it to be submitted
meaning that they shouldn't be inputting any letters or spaces, and it should start with a capital letter:
Code Output
[a-z]+ - followed by as many lower case letters as you like (that's what the + means)
Another example might be checking for the correct spelling of a famous composer:
We can check this using the pattern H(|ae?)ndel . Let's take a look at what this means:
H - start with an H
Most regular expression tools provide the following operations to construct expressions.
Boolean "or"
A vertical bar separates alternatives. For example, gray|grey can match "gray" or "grey".
Grouping
Parentheses are used to define the scope and precedence of the operators (among other uses). For example, gr
"gray" and "grey".
Quantification
A quantifier after a token (such as a character) or group specifies how often that preceding element is allowed t
? The question mark indicates there is zero or one of the preceding element. For example, colou?r matc
* The asterisk indicates there is zero or more of the preceding element. For example, ab*c matches "ac",
+ The plus sign indicates there is one or more of the preceding element. For example, ab+c matches "abc
Most programming languages have regular expression functions. In VB.NET we can use regular expressions b
Contents
[hide]
o 1.1Length
o 1.2Position
o 1.3Substring
o 1.4Concatenation
Code Output
22
Position[edit]
This function allows us to find the position of an item within a given string and returns the position's
location. In visual basic this is performed by the following command: InStr([string],
[item]) For example we might want to find the location of an end of a sentence by looking for a
fullstop:
someText = "Gary had a little lamb. His fleece was white as snow."
Console.writeline(InStr(someText,"."))
Code Output
23
We can also use this command to search for strings within strings. For example if we were to look for
to see if a sentence contained a certain name:
someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Dave"))
Code Output
25
If the search item is not contained in the string then it will return 0
someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Julie"))
Code Output
Substring[edit]
This function allows you to snip items out of a string and return a substring. Visual Basic uses the
following command: [string].Substring([startPosition],[lengthOfReturnString]) .
For example we might want to find the local number from a landline phone number we have been
given. We'll have to ignore the area code:
phone = "(01234)567890"
local = phone.Substring(7, 6)
console.writeline(local)
Code Output
567890
Concatenation[edit]
This function allows you to stick strings together (concatenate) so that you can start to build strings
using variables. Visual Basic uses the following command: [stringA & stringB] For example
we might have a users name stored in a variable dim name as string and a greeting that we
would like to give them:
name = "Charles"
console.writeline("Hello " & name & ". How are you today?")
Code Output
Code Output
34
This might seem OK, but in other lanuages we might run into trouble. To perform this we
would have to convert from one datatype to another:
Code Output
34.3 34
Exercise: String functions
Write a short program to tell someone how many letters they have in their name (just in case they don't know!), for
Code Output
Input: Fremlin
Hello Fremlin, you have 7 letters in your name.
[Expand]
Answer :
Some people have stupidly typed their firstname and their surname into a database, write some code to display the f
Code Output
[Expand]
Answer :
A telephone number has been typed into a computer as a string: (01234)567890
Code Output
Input: (01234)567890
Output: 01234567890
[Expand]
Answer :
A similar question to the one above, telephone numbers are currently stored in a very unreadable format: 01234567
5 figures are the area code:
Code Output
Input: 01234567890
Output: (01234)567890
[Expand]
Extension: REGEX
You will often want to check the format of a string being input and if it is incorrect you will want it to be submitted
meaning that they shouldn't be inputting any letters or spaces, and it should start with a capital letter:
Code Output
[a-z]+ - followed by as many lower case letters as you like (that's what the + means)
Another example might be checking for the correct spelling of a famous composer:
We can check this using the pattern H(|ae?)ndel . Let's take a look at what this means:
H - start with an H
Most regular expression tools provide the following operations to construct expressions.
Boolean "or"
A vertical bar separates alternatives. For example, gray|grey can match "gray" or "grey".
Grouping
Parentheses are used to define the scope and precedence of the operators (among other uses). For example, gr
"gray" and "grey".
Quantification
A quantifier after a token (such as a character) or group specifies how often that preceding element is allowed t
? The question mark indicates there is zero or one of the preceding element. For example, colou?r matc
* The asterisk indicates there is zero or more of the preceding element. For example, ab*c matches "ac",
+ The plus sign indicates there is one or more of the preceding element. For example, ab+c matches "abc
Most programming languages have regular expression functions. In VB.NET we can use regular expressions b
This preview shows pages 3245. Sign up to view the full content.
32
Example
4StructureFullNa
meDimfirstNameAs
StringDimlastNam
eAs StringEnd
Structure33Structur
eStudentDimname
AsFullNameDimcre
dits()As IntegerEnd
StructurePrivate
SubbtnGet_Click(...
)HandlesbtnGet.Cli
ckDimnumYearsAs
IntegerDimpersonA
sStudentStructure
"FullName"contain
ed, or
nested,inside
Student
Example
4
continue
dtxtResult.Clear()
person.name.firstN
ame =
InputBox("First
Name:")person.na
me.lastName =
InputBox("Second
Name:")numYears
=CInt(InputBox("N
umber of years "&
_"completed:"))34R
eDimperson.credit
s(numYears -
1)ForiAs Integer=
0TonumYears -
1person.credits(i)=
CInt(InputBox("Cre
dits in year "_& i +
1))NextDetermineS
tatus(person)End
Sub
How to Easily Extract
From Any String Without
Using VBA InStr
AUGUST 18, 2015 BY PAUL KELLY 13 COMMENTS
The VBA InStr function is one of the most used functions in VBA. It is used to find a
string within a string and indeed it does a very fine job.
However, it is often used to help extract part of a string and for this task it performs
badly.
If you have found string extraction in VBA to be a painful process, then read on. This
post will show you a simpler and better way using three real world examples!
Contents [hide]
1 A Quick Guide to this Post
2 Quick Reference Notes
3 Introduction
4 When VBA InStr, Left, Right and Mid are useful
o 4.1 Using InStr to check if string contains text
o 4.2 Extracting with Left, Right and Mid
5 Dealing with Strings of Varying Lengths
o 5.1 Using the VBA InStr Function with Left
o 5.2 Using the VBA InStr Function with Right
o 5.3 Using the VBA InStr Function with Mid
6 The Split Function
7 Example 1: Getting part of a file name
8 Example 2: IP Address Range
9 Example 3: Check if a filename is valid
10 Conclusion
11 Whats Next?
12 Get the Free eBook
"John Henry Smith" Variable size get first name Split(s," ")(0)
"John Henry Smith" Variable size get second name Split(s," ")(1)
String Type Task How to
"John Henry Smith" Variable size get third name Split(s," ")(2)
"John Henry Smith" Variable size Get last name Dim v As Variant
v = Split(s, " ")
lastname= v(UBound(v))
If you would like to know more about the InStr or InStrRev functions then please
read Searching within a string.
If you would like to know more about Mid, Left or Right functions then check
out Extracting Part of a String.
For more about the Split function check out String to Array using Split.
I use Debug.Print in my examples. It prints values to the Immediate Window which you
can view by pressing Ctrl and G (or select View->Immediate Window)
Introduction
In this post, Im going to show you a better way to extract values from a string than
using then VBA InStr function with Left, Right or Mid.
Debug.Print "Found"
End If
End Sub
These three functions work fine if the text you require is always the same size and in the
same place. For other scenarios, they require the use of InStr to find a particular
position in the string. This makes using them complicated.
Use Left, Right or Mid when the characters will always be in the same position.
Brooke Hilt
Pamela Jurado
Zack Kinzel
Eddy Wormley
Kaitlyn Rainer
Jacque Trickett
Kandra Stanbery
Margo Hoppes
Berenice Meier
Garrett Hyre
(If you need random list of test names then try this random name generator)
We use the VBA InStr function to get the position of the first space. We want to get all
the characters before the space. We subtract one from the position as this gives us the
position of the last letter of the name.
Sub GetFirstname()
s = "Lorraine Huggard"
End Sub
Lets look at the first example in the above code. The first space is at position 5. We
substract 1 so which gives us position 4. This is the position of the last letter of John
i.e.n.
We then give 4 to the Left function and it returns the first four characters e.g. John
We can perform the same task in one line by passing the return value from InStr to the
Left function.
Dim s As String
Its important to note that InStrRev gives us the position from the start of the string .
Therefore, we need to use it slightly differently than we used InStr and Left.
Sub GetLastName()
Length = Len(s)
End Sub
Sub GetSecondName()
End Sub
You can see this is tricky to do and requires a bit of effort to figure out. We need to find
the first space. Then we need to find the second space. Then we have to substract one
from the other to give us the number of characters to take.
If have a string with a lot of words then this can get very tricky indeed. Luckily for us
there is a much easier was to extract characters from a string. Its called
the Split function.
The Split Function
We can use the Split function to perform the above examples. The Split function splits a
string into an array. Then we can easily access each individual item.
Lets try the same three examples again and this time we will use Split.
Boom! What a difference using Split makes. The way it works is as follows
The following table shows what the array might look like after Split has been used.
Note: the first position in the array is zero. Having zero based arrays is standard in
programming languages.
0 1 2
In the above code we split the string each time we used it. We could also split the string
once and store it in an array variable. Then we can access it when we want.
Sub SplitName()
End Sub
If you would like to know more about arrays then I wrote an entire post about them
called The Complete Guide to Using Arrays in Excel VBA.
In the next sections, we will look at some real world examples. You will see the benefit
of using Split instead of the InStr function.
Please feel free to try these yourself first. It is a great way to learn and you may have fun
trying to figure them out(or maybe thats just me!)
VB_23476_Val.xls
VV_987_Val.txt
VZZA_12223_Val.doc
This is similar to the example about where we get the second item. To get the values
here we use the underscore(i.e. _) to split the string. See the code example below
Sub GetNumber()
End Sub
In the real world you would normally read strings like these from a range of cells. So lets
say these filenames are stored in cells A1 to A3. We will adjust the code above slightly
to give us:
Sub ReadNumber()
Dim c As Range
Next c
End Sub
The user has a string with an IP address in the format BE-ABCDDD-DDS 172.16.23.3.
This is how I would do this. First I split the string by the periods. The number we are
looking for is between the first and second period. Therefore, it is the second item.
When we split the string it is placed at position one in the array (remember that the array
starts at position zero).
BE-ABCDDD-DDS 172 31 23 3
Sub IPAdd()
End Sub
2. It must contain AA
Filename Status
AA1234.pdf valid
AA_ljgslf_1234.pdf valid
12_AA_1234_NM.pdf Valid
Sub UseInstr()
' Search for 1234 and ensure last four chars are .pdf
This code is very messy. Luckily for us, VBA has Pattern Matching. We can check the
pattern of a string without having to search for items and positions etc. We use
the Like operator in VBA for pattern matching. The example below shows how to do it.
Sub UsePattern()
End Sub
In the above example, the asterisk in the pattern refers to any number of characters.
To show this works correctly, lets try it on all the example names in the table
Sub UsePatternTest()
coll.Add "AA1234.pdf"
coll.Add "AA_ljgslf_1234.pdf"
coll.Add "AA1234.pdf1"
coll.Add "12_AA_1234_NM.pdf"
Dim f As Variant
Next f
End Sub
The output is
True
True
False
False
True
To find out more about Pattern Matching and the Like keyword please check out this
post.
Conclusion
InStr and InStrRev are really only useful for simple tasks like checking if text exists in a
string.
Left, Right and Mid are useful when the position of the text is always the same.
The Split function is the best way to extract from a variable string.
When trying to check the format of a string that is not fixed in size,
the Like keyword(i.e. Pattern Matching) will generally provide an easier solution.