When working with data in Delphi, you usually don't work with memory segments where any kind of data can be found or stored. Instead, you usually work with segments of memory that are strictly defined by a data type. A data type can be regarded as a name for a specific type of data — a string, character, integer, etc. A data type defines not only the name but also the memory size, value range, and operations that can be performed on the data.
Delphi has a plethora of data types (the more the merrier), but a vast majority of these are user-defined types. Basic data type categories in Delphi are string, integer, real, character, and Boolean.
We use the string data type when we want to work with a sequence of characters. The default string data type we use in Delphi is called the AnsiString or long string. The Delphi string can be used to hold very long strings up to 2 GB. That's a lot of text! The string data type is actually the only data type you've used so far. A string in Delphi is any value enclosed in single quotation marks.
Along with the AnsiString type, Delphi supports two other string types: the ShortString and the WideString. The ShortString is an old string type used in DOS and Win 3.x, but there are a few of situations where this type can still be utilized. The ShortString cannot hold more than 255 characters, while the WideString can hold a 2 GB string, just like the default AnsiString. The difference between the AnsiString and WideString data types is that the WideString works with 16-bit Unicode characters.
The string data type defines several operators, including the concatenation operator (+) that can be used to concatenate any number of characters and string parts into a final string:
WriteLn('This ' + 'is ' + 'a ' + 'concatenated ' + 'string.');
Table 2-2 shows the Delphi integer types. The Integer and Cardinal types give the best performance results.
Type Name | Range |
---|---|
Integer | –2147483648..2147483647 |
Cardinal | 0..4294967295 |
Shortint | –128..127 |
Smallint | –32768..32767 |
Longint | –2147483648..2147483647 |
Int64 | –263..263–1 |
Byte | 0..255 |
Word | 0..65535 |
Longword | 0..4294967295 |
You can display integer values by passing them directly to the Write/WriteLn statements:
WriteLn(65); WriteLn(-165 + 35);
Real types are used to store floating-point values. Table 2-3 displays the list of real types. The Double data type gives the best performance results.
Type Name | Range |
---|---|
Double (Real) | 5.0 x 10–324..1.7 x 10308 |
Single | 1.5 x 10–45..3.4 x 1038 |
Extended | 3.6 x 10–4951..1.1 x 104932 |
Comp | –263+1..263–1 |
Currency | –922337203685477.5808..922337203685477.5807 |
When displaying integer data, you can specify the display width of the value. This is useful when you want to display a simple table or format the output. To specify the width, append the display value with a colon and an integer value that defines the width in characters:
Write(1:5); WriteLn(12:5); Write(123:5); WriteLn(1234:5);
The result of this code is displayed in Figure 2-6.
Figure 2-6: Result of the Write/WriteLn width parameter
When displaying real data, you can add another parameter, DecPlaces, to define how many characters should be displayed. The decimal places parameter is also defined by appending a colon and an integer value that specifies the width in characters. When specified, the decimal spaces value is a portion of the entire width value; thus, writing 8:2 results in the width of six spaces and two decimal places (see Figure 2-7):
Figure 2-7: Formatting real values
WriteLn(123.4687:8:2); WriteLn(90.1:8:2); WriteLn((33.34 + 66.66):8:2);
There are two basic character types in Delphi: AnsiChar and WideChar. The default character data type is Char, which is identical to AnsiChar. Characters are usually enclosed in single quotation marks, just like strings:
WriteLn('A');
Since characters are really integer values that map to a specific position in the character table (ANSI or Unicode), they can be represented by integers, but we have to insert the number symbol (#) in front of the integer value:
WriteLn(#65);
Now that we know how to write character values using their integer representation, we can display text in a new line without using the WriteLn statement. To do that we have to use characters 10 and 13, which are better known as linefeed and carriage return, respectively:
Write('a'); Write(#10#13); Write('b');
Another way of writing these characters is to combine them into a string and display them with only one Write statement (making sure there are no spaces between the text in single quotation marks and the character values):
Write('a'#10#13'b');
The Boolean data type is used to represent two logical values: True and False. Boolean values can also be represented as an integer where False is 0 and True is 1.