Text manipulation with GAMAP
Text strings in IDL
Creating strings
We may form a string of text characters in IDL either with the IDL's string function, or by placing the text between single quotes or double quotes. For example:
IDL> str1 = 'hello world' IDL> help, str1 STR1 STRING = 'hello world' IDL> num2 = 3.14159 IDL> str2 = string( num2 ) IDL> help, str2 STR2 STRING = ' 3.14159'
Equivalence of strings and bytes
In IDL, a string of text characters is equivalent to an array of byte values. A byte is a collection of 8 bits and may express values from 0-255. The ASCII collating sequence has 255 values. (Actually, the original ASCII table had 128 values, but this was later extended to 255 values to include special characters.) One byte represents a single ASCII text character.
This means that it is easy to convert between strings and bytes in IDL. If you have an array of bytes, you can use any of the IDL string routines on them, for example:
IDL> byte_array = [ 72B, 69B, 76B, 76B, 79B ] IDL> help, byte_array BYTE_ARRAY BYTE = Array[5] IDL> print, strtrim( byte_array, 2 ) HELLO
GAMAP comes with a very useful routine called str2byte.pro. This allows you to take a text string and to convert it into the equivalent array of bytes.
IDL> str = 'IDL is neat!' IDL> byte_array = str2byte( str, strlen( str ) ) IDL> help, byte_array BYTE_ARRAY BYTE = Array[12] IDL> print, byte_array 73 68 76 32 105 115 32 110 101 97 116 33
Note that we used IDL's STRLEN function to return the length of the string.
Special characters
We must specify some special non-printing ASCII characters with their byte value. For exaaple, the horizontal tab character is the 9th character in the ASCII table, so we may specify that as:
IDL> tab = 9B IDL> help, tab TAB BYTE = 9 IDL> str = 'hello' + string(tab) + 'world' IDL> print, str hello world
For more information about IDL's string functions, please see http://idlastro.gsfc.nasa.gov/idl_html_help/Strings.html.
Replacing characters in a string
IDL's STRPUT function is one way to insert characters into a string of text:
However,