文字列の操作
DelphiはCスタイル(NULLターミネート)文字列とPascalスタイル文字列があります。
文字列の宣言
C文字列の宣言
例 p: PChar; // Cではchar *p;
この場合、pはポインタなので文字列領域は次のようにして確保しなければなりません。
p := AllocStr(80);
あるいは
buff: array[0..79] of Char;
...
p := buff;
Pascal文字列の宣言
例 s: String;
C文字列は、ポインタなので動的に領域を確保するなどして使用します。Pascal文字列は領域を確保せずに使用できます。デフォルトでは長い文字列が使用できますが、$H-オプションを使用した場合、長さは255までになります。これは下位互換性のためのものです。
Pascal文字列とC文字列の変換の方法
function StrPas(Str:PChar): string;
StrPas はC文字列 Str を Pascal 文字列に変換します。
function StrPCopy(Dest: PChar; const Source: string): PChar;
StrPCopy は Pascal 文字列を,C文字列にコピーします。
Cスタイル文字列を操作する関数
関数 | 機能 | |
StrAlloc | C文字列にバッファを割り当て,文字列の最初の文字を指すポインタを返します。 | |
StrBufSize | StrAlloc で割り当てた文字列バッファに格納できる最大文字数を返します。 | |
StrCat | Sourceのコピーを Dest の最後に追加し,結合された文字列を返します。 | |
StrComp | Str1 を Str2 と比較します。 | |
StrCopy | Source を Dest にコピーしてから Dest を返します。 | |
StrDispose | 文字列を破棄します。 | |
StrECopy | Source を Dest にコピーし,文字列の末尾のヌル文字を指すポインタを返します。 | |
StrEnd | ヌルで終わる文字列の末尾を指すポインタを返します。 | |
StrFmt | 配列のエントリを形式化します。 | |
StrIComp | 指定された文字数分だけ 2 つの文字列を比較します。 | |
StrLCat | 指定された文字数を文字列に追加します。 | |
StrLComp | 指定された文字数分だけ 2 つの文字列を比較します。 | |
StrLCopy | 指定された文字数を Source から Dest にコピーします。 | |
StrLen | 文字列内のヌルターミネータを除いた文字数を返します。 | |
StrLFmt | 指定されたオープン配列の一連の引数を形式化します。 | |
StrLIComp | 指定された文字数分,大文字と小文字の区別なしに 2 つの文字列を比較します。 | |
StrLower | 文字列を小文字に変換します。 | |
StrMove | 指定された文字数を文字列にコピーします。 | |
StrNew | ヒープの領域を割り当てて文字列をコピーし,その文字列を指すポインタを返します。 | |
StrPCopy | Pascal スタイルの文字列を,ヌルで終わる文字列にコピーします。 | |
StrPLCopy | Pascal スタイルの文字列の文字を,ヌルで終わる文字列にコピーします。 | |
StrPos | Str1 内の最初の Str2 を指すポインタを返します。 | |
StrRScan | Str 内の最後の Chr を指すポインタを返します。 | |
StrScan | 文字列内の最初の指定文字を指すポインタを返します。 | |
StrUpper | 文字列を大文字にして返します。 |
Pascalスタイル文字列の操作
連結 | +演算子を使用して2つの文字列を連結します。 | |
例 | s := s1 + s2; | |
Concat関数を使用して連結することもできます。 | ||
部分文字列 | Copy関数を使用して部分文字列を得ることができます。 | |
部分文字列の削除 | Delete手続きを使用すると、文字列の一部を削除できます。 | |
挿入 | Insert手続きを使用して、文字列を別の文字列に挿入できます。 | |
文字列の長さ | Length関数は文字列の長さを返します。 | |
部分文字列の位置 | Pos関数は文字列内の指定された部分文字列の位置を返します。 | |
形式化 | Format関数は指定した形式で数値や文字列を変換します。 |
文字列と数値の変換
IntToStr | 整数をPascal文字列に変換します。 | |
DateToStr | DateToStr は TDateTime 型の変数を指定された形式のPascal文字列に変換します。 | |
FloatToStr | 浮動小数点値をPascal文字列に変換します。 | |
IntToHex | 整数の 16 進表現Pascal文字列を返します | |
StrToInt | 整数(10 進または 16 進表記)を表すPascal文字列を数値に変換します | |
StrToIntDef | 文字列を数値に変換します。 | |
TimeToStr | TDateTime 変数から文字列を返します。 | |
Val | 文字列を数値表現に変換します。 |
文字列内で制御文字を使うには
#を使うと文字列内で制御文字が使えます。
例
'#9TAB'
'#13#10'
文字の判別
判別関数 | 機能 |
IsCharLower | 小文字かどうか判別 |
IsCharUpper | 大文字かどうか判別 |
IsCharAlpha | 英字かどうか判別 |
IsCharAlphaNumeric | 英数字かどうか判別 |
文字の変換
例 小文字を大文字に変換する
while p^ <> Char(0) do begin if IsCharLower(p^) then p^ := Char(Ord(p^) - Ord('a') + Ord('A')); Inc(p); end; Result := StrPas(buff);
上のようにしないで、UpCase(ch:Char)も使えます。
16進数文字列の扱い
16進数電卓(サンプルプログラム)を参考にしてください。