嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈��
源平慎弌傍利 卦指云慕朕村 紗秘慕禰 厘議慕尺 厘議慕禰 TXT畠云和墮 〆辺茄欺厘議箝誓匂〇

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及15何蛍

酔楯荷恬: 梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈 梓囚徒貧議 Enter 囚辛指欺云慕朕村匈 梓囚徒貧圭�鮗� ● 辛指欺云匈競何! 泌惚云慕短嗤堋響頼���誅卒亮茂�俊彭堋響��辛聞喘貧圭 "辺茄欺厘議箝誓匂" 孔嬬 才 "紗秘慕禰" 孔嬬��





Quoting Strings 



Along with strings�察�Visual Basic has the Char type。 A Char can be described as a single letter of a  

sentence。 However�察�it would be more accurate to say that it is a single character。 You can assign  

a string to a Char type�察�as long as Option Strict is Off ��which it is by default��。 For example�察�suppose  

you wrote the following code to assign a string to the variable val。 



 ' The Option Strict declaration must e right at the top of your code 

Option Strict Off 

 。 。 。 

Dim val As Char 

val = ;hello; 



     The example piles�察�but you will not get what you want。 Because Option Strict is Off�察 �

the string is converted to a character。 In this conversion�察�data is lost!specifically�察�the characters  

ello are lost。 The value stored in the variable val is the single letter h。 

      If Option Strict were On�察�the example would not pile。 When Option Strict is On�察�the  

piler does not do conversions where data might be lost。 If you have code that does attempt  

a conversion�察�an error will be flagged by the piler。  

      If you really wanted to store the single letter h in the variable val�察�you would need to explicitly  

define the character to be assigned to the variable�察�as follows�此�



Option Strict On 

 。 。 。 

Dim val As Char 

val = ;h;c 



     To define a single´character string�察�you enclose that character in double quotation marks�察 �

followed by a lowercase c to indicate that the single´character string is a character。 


´´´´´´´´´´´´´´´´´´´´´´Page 88´´´´´´´´´´´´´´´´´´´´´´´

66          CH AP T E R   3   *    L E A R N IN G   AB OU T   ST R I N G   M A N I P U L AT IO N S   



                                                   VISUAL BASIC STRICT AND EXPLICIT 



                Programming languages have two distinct flavors�此�static typed and dynamic typed。 Do not get these two terms  

                confused with the terms strongly typed and  weakly typed。 Those two sets of terms are orthogonal to each  

                other。 A language can be dynamic typed and strongly typed at the same time。 For example�察�the following code  

                is strongly and dynamic typed。 



                Dim a = 10 



                      The type is dynamic because I have not declared the variable to be of any type。 It is strongly typed because  

                when a is assigned to a value of 10�察�it is defined to be an Integer。 A strongly and dynamic typed language  

                means that variables can be any type�察�but once they are assigned�察�their type cannot be changed。 Thus�察�you  

                cannot convert an integer to a string or a string to an integer without some type of failure。 

                      The following code is weakly and static typed。 



                Dim val As Char = ;hello; 



                      Here�察�I explicitly say that val is a Char�察�and I¨ve assigned to it a string。 However�察�because of weak  

                typing�察�a strong´armed conversion of the string to a Char is made。 Think of it as fitting a square peg into a  

                round hole。 If the square peg has a diagonal length less than the diameter of the hole�察�the process works  

                without much effort。 But if the square peg¨s length is the same as the diameter of the hole�察�you will need to  

                use brute force。 

                      Visual Basic allows you to write all types of code�察�and the flags Option Strict and Option Explicit  

                relate to what kind of code you want。 When you set Option Strict to On�察�you are saying that you don¨t want  

                to support weakly typed code。 The flag has no effect on dynamic typing。 The Option Explicit flag does not  

                affect weakly typed code�察�but it partially affects dynamic typed code。 Consider the following code that piles  

                when Option  Explicit is set to Off。 



                a = 10 



                      The code is an assignment�察�but you don¨t know if the variable is declared in the file�察�in the class�察�or local  

                to the method。 The variable could be defined out of the blue and then used。 Dynamic typing allows this�察�but  

                again�察�after the variable has been assigned�察�it stays the same type。 When you set Option  Explicit to On�察 �

                you are making an explicit declaration of the variable a requirement。 

                      With all of these options�察�you are left wondering which bination of flags you want。 The answer is that  

                it depends on what style of programmer you are。 If you want a traditional language ��like C#�察�Java�察�C�����察�and  

                so on���察�then you should have both flags set to On。 If you want a more dynamic programming language ��like  

                Python�察�Ruby�察�PHP�察�and so on���察�then you should have both flags set to Off。 Unless you have experience in the  

                dynamic programming environment and know what side effects may occur�察�you should start off taking the  

                traditional language approach。 For that reason�察�the code in this book is written with both flags set to On。 

                      You can define the Option Strict and Option Explicit flags in the source code�察�as shown in the  

                examples in the previous ^Quoting Strings ̄ section�察�or you can set them in the pile settings of the individual  

                project settings or for the whole of Visual Basic Express。 To set them for a project�察�right´click the project  

                name and select Properties  pile。 The two settings are in the drop´down boxes at the top of the page。  

                To set the options for all projects�察�select Tools  Options�察�and then select Projects and Solutions  VB Defaults。 


´´´´´´´´´´´´´´´´´´´´´´Page 89´´´´´´´´´´´´´´´´´´´´´´´

                                               CH AP T E R   3   *    L E AR N IN G   AB O U T   ST R I N G   M A N I PU L A TI O N S  67 



Character Mapping 



A single character takes 16 bits of space�察�and the space that a string consumes depends on the  

number of characters in a buffer。 If a buffer is 10 characters long�察�then the entire buffer takes up  

160 bits of space。  

      A single character is 16 bits long so that a buffer can store text in a multitude of different  

formats。 The standardized length is due to a standard called Unicode。 

      Consider the character a。 Philosophically�察�how do you know that an a is an a�拭�For humans�察 �

that¨s easy because our brains are trained to recognize the curve and look of an a。 Now look at  

the Russian letter shown in Figure 3´10。 



Figure 3´10。 A Russian letter 



      What letter does Figure 3´10 show�拭�It looks like an H�察�right�拭�But paring it to the English  

language�察�it is an N。 The Russian language has its own set of letters�察�and someone has deter

mined that a Russian H is an English N。 Figure 3´11 is a mapping of the Russian letters to the  

English letters。 



Figure 3´11。 Mapping of Russian letters to English letters 


´´´´´´´´´´´´´´´´´´´´´´Page 90´´´´´´´´´´´´´´´´´´´´´´´

68        CH AP T E R   3   *    L E A R N IN G   AB OU T   ST R I N G   M A N I P U L AT IO N S   



                If I were learning Russian�察�I would want the mapping provided in Figure 3´11。 The mapping  

           gives me an idea of what each letter in Russian represents。 You could think of Figure 3´11 as a  

          lookup table。 The puter has the same sort of need�察�because a puter does not under

           stand letters。 A puter understands only numbers and thus uses lookup tables that map a  

           set of letters to a set of numbers。  

                There are many lookup tables�察�such as American Standard Code for Information Inter

           change ��ASCII��。 For example�察�using ASCII�察�the letter a maps to the number 97。 The problem  

          with ASCII is that it works well for English�察�but works horribly for other languages。 ASCII was  

           extended to deal with Western European languages�察�but still fails for languages such as Chinese�察 �

           Russian�察�and Arabic。 

                The solution chosen by  is Unicode。 Unicode is the definition of a set of lookup tables  

           that map to letters for all of the languages of the world。 

                For the most part�察�you will not have to concern yourself with the Unicode�察�because   

           manages everything transparently。 This was not the case many years ago�察�when programmers  

          had to manage the lookup tables themselves。 So consider yourself lucky that you did not expe

           rience this pain in developing multilingual applications。 



           Dealing with Languages and Cultures 



           Managing strings in  does not stop with Unicode。  is very innovative in that it under

           stands concepts such as culture and language�察�which are a reflection of how humans speak and  

          live。 The ideas of culture and language do not exist in other programming environments。 

                Consider Switzerland as an example。 Throughout Switzerland�察�there are mountains that  

          happen to separate four individual languages�此�German�察�Italian�察�Romansch�察�and French。 Even  

          with the four languages�察�the Swiss all trade the same currency and write numbers the same  

          way。 

                In previous programming environments�察�the language would be tied to a particular country。  

          This works fine for France�察�Germany�察�and the United States�察�but fails miserably for Canada�察 �

           Switzerland�察�Belgium�察�and India。 You need to separate language from culture�察�because multiple  

          languages are used in different cultures。 For example�察�Italian is spoken in Switzerland and Italy。  

           French is spoken in France�察�Switzerland�察�Luxembourg�察�and Canada。 German is spoken in  

           Germany�察�Switzerland�察�and Austria。  



           Setting Culture and Language in Windows 



          The Windows operating system allows you to set the culture and language of your puter�察 �

           regardless of the language in which Windows is operating。 Figure 3´12 shows an example。 

                The example in Figure 3´12 is running a German version of Windows in Switzerland。 The  

          language is English�察�and the culture is Canada。 It would seem that Windows would get confused�察 �

          but in fact�察�if you write your  application properly�察�multilanguage support is simple。 


´´´´´´´´´´´´´´´´´´´´´´Page 91´´´´´´´´´´´´´´´´´´´´´´´

                                           CH AP T E R   3   *    L E AR N IN G   AB O U T   ST R I N G   M A N I PU L A TI O N S  69 



Figure 3´12。 Setting the culture and language in Windows 



Parsing and Processing Numbers 



The culture and country bee important when interacting with numbers and dates that  

are stored as strings。 Imagine retrieving a string buffer with an embedded number and then  

attempting to perform an addition�察�as illustrated by Figure 3´13。 



             Variables a and b are 

             assigned buffers that 

               represent numbers 



 Dim a As String = ;1; 

Dim b As String = ;2; 

Dim c As String = a �� b                  Adding two buffers is a 

                                         concatenation operation 

      Variable c contains 

          the value 12 



Figure 3´13。 Performing arithmetic on numbers represented as strings can lead to unexpected results。 


´´´´´´´´´´´´´´´´´´´´´´Page 92´´´´´´´´´´´´´´´´´´´´´´´

70        CH AP T E R   3   *    L E A R N IN G   AB OU T   ST R I N G   M A N I P U L AT IO N S   



                Adding numbers is performing a mathematical operation。 When the add operation is  

           performed on strings�察�it always results in a buffer concatenation。 The add operation is a very  

           simple way to concatenate string buffers together。 

                However�察�concatenation is not the aim of the example。 The aim is to treat the strings as  

           numbers and then add the numbers so that c contains the value  3 ��1 �� 2 = 3��。 The rewritten  

           version of the example is shown in Figure 3´14。 This code parses a string into an integer。 



                   Integer is a value type�察�but  

                 recognizes the methods associated 

                with the value types that can be used 

                        to parse string buffers 



            Dim a As Integer = Integer。Parse�─�1;�� 

           Dim b As Integer = Integer。Parse�─�2;�� 

           Dim c As Integer = a �� b 



              Variable c contains          Variables a and b are assigned 

                   the value 3                 values that represent the 

                                                 parsed string buffers 



           Figure 3´14。 Parsing strings into integers before doing the arithmetic 



                The type Integer has a  Parse�┌� method that can be used to turn a string into an integer。  

           The parsing works only if the buffer is a valid number。 If the buffer contains letters or an invalid  

           number�察�an error will be generated。  

                If the code can cope with a failed string conversion�察�the solution used by the parsing  

           routines is to generate an exception that a program could process。 Alternatively�察�a fail´safe way  

           to parse a number is to use TryParse�┌��察�as in the following example。 



           Dim value As Integer 

           If Integer。TryParse�─�1;�察�value�� Then  

               。 。 。 

           End If 



                The TryParse�┌� method does not return an integer value�察�but instead returns a  Boolean  

           flag�察�indicating whether the buffer could be parsed。 If the return value is True�察�then the buffer  

           could be parsed�察�and the result is stored in the parameter value。 You can parse other number  

           types using the same techniques ��for example�察�Single。TryParse�┌���。  

                There are more variations in how a number can be parsed。 For example�察�how would the  

           number 100 be parsed�察�if the number 100 is hexadecimal�拭。�puters use hexadecimal numbers。��  

           Here is an example of hexadecimal conversion�此�



           Imports System。Globalization 

           。 。 。 

           Public Sub ParseHexadecimal�┌�  

               Dim value As Integer= Integer。Parse�─�100;�察�NumberStyles。HexNumber�� 

           End Sub 


´´´´´´´´´´´´´´´´´´´´´´Page 93´´´´´´´´´´´´´´´´´´´´´´´

                                             CH AP T E R   3   *    L E AR N IN G   AB O U T   ST R I N G   M A N I PU L A TI O N S  71 



     This example uses a variant of  Parse�┌��察�which has an additional second parameter that  

represents the format of the number。 In this case�察�the second parameter indicates that the  

format of the number is hexadecimal ��NumberStyles。HexNumber�察�
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��16�� 家��13��
酔楯荷恬: 梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈 梓囚徒貧議 Enter 囚辛指欺云慕朕村匈 梓囚徒貧圭�鮗� ● 辛指欺云匈競何!
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��