Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2018年05月24日] [更新 2018年05月24日] Delphi サンプルプログラム集
455_大文字と小文字の判定と大文字または小文字への変換
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro
TCharHelper のサンプルは Delphi XE5(UP2) Pro
455_IsUpperIsLower.zip [2,857 KB] 2018年05月24日版 (EXE 同梱)







大文字と小文字の判定と大文字または小文字への変換


文字が大文字か小文字かを判定する方法と、文字を大文字あるいは小文字にするサンプルです。
この場合、対象となる文字は ASCII 文字のアルファベットだけです。

このような文字の判定や変換は、文字のコードポイントを操作することで可能です。 実際 [半角の英字や数字だけの入力] の最初のサンプルや [全角の英数字を半角に変換等] のサンプルではそのような方法を使用しています。
TCharacter クラスのメソッドを使用すると文字のコードポイントの値を意識することなく大文字と小文字の判定や変換ができます。それらのメソッドはクラスメソッドになっています。TCharacter のインスタンスを生成する必要はありません。

後半は Delphi XE3 で実装された Char 型のヘルパーである TCharHelper のメソッド類を使用したサンプルになっています。



[備考 1]
本ページに「文字」単位ではなく「文字列」を大文字にしたり小文字にするサンプルがあります。
同じ機能を持つ関数として、SysUtilts に以下の UpperCase, LowerCase があります。


[備考 2]
本ページで対象にしているのは、半角の英字、つまり、ASCII 文字の範囲のアルファベットです。ひらがな、カタカナについては以下の記事を参考にしてください。ページのタイトルは半角カタカナとなっていますが、全角カタカナのサンプルも掲載しています。





01_IsUpper, IsLower を使用した大文字と小文字の判定


TCharacter の IsUpper, IsLower メソッドを使用シテ大文字か小文字かを判定するテストです。
下のサンプルコードでは、これらのメソッドの引数に文字列とそのインデックスを指定して実行していますが、Char 型の変数も引数に使えます。



[備考]
Delphi XE3 で実装された後述の TCharHelper にも同名のメソッドがあります。TCharacter のメソッドであることを明確にするには、クラス名を付けて TCharacter.IsUpper, TCharacter.IsLower のように書きます。
Delphi XE3 以降ではこの TCharacter は非推奨になっています。




図1
TCharacter のメソッドを使用して、大文字と小文字を判定

リスト1
TCharacter の IsUpper, IsLower メソッドを使用して大文字か小文字かを判定
uses に Character が必要
implementation

uses
  Character;

{$R *.DFM}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := 'Test東Str2';
end;

//=============================================================================
//  大文字または小文字の判定
//
//  Character.pasのメソッド類を使用する例
//  TCharHelperにも同様のメソッド類がある
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
  LChar  : Char;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to Length(LText) do begin
    LChar := LText[LIndex];
    if IsNumber(LText, LIndex) then begin
      Memo1.Lines.Add(LChar + ' : 数字');
    end else
    if IsUpper(LText, LIndex) then begin
      Memo1.Lines.Add(LChar + ' : 大文字');
    end else
    if IsLower(LText, LIndex) then begin
      Memo1.Lines.Add(LChar + ' : 小文字');
    end else begin
      Memo1.Lines.Add(LChar + ' : その他');
    end;
  end;

  Memo1.Lines.EndUpdate;
end;


TCharacter のクラスメソッドであることを明確にするには、クラス名を付けて TCharacter.IsUpper のように書きます。以下はその例です。



procedure TForm1.Button1Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
  LChar  : Char;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to Length(LText) do begin
    LChar := LText[LIndex];
    if TCharacter.IsNumber(LText, LIndex) then begin
      Memo1.Lines.Add(LChar + ' : 数字');
    end else
    if TCharacter.IsUpper(LText, LIndex) then begin
      Memo1.Lines.Add(LChar + ' : 大文字');
    end else
    if TCharacter.IsLower(LText, LIndex) then begin
      Memo1.Lines.Add(LChar + ' : 小文字');
    end else begin
      Memo1.Lines.Add(LChar + ' : その他');
    end;
  end;

  Memo1.Lines.EndUpdate;
end;




02_ToUpper, ToLower を使用した大文字または小文字への変換


TCharacter には、文字を大文字に変換する ToUpper、小文字に変換する ToLower というクラスメソッドが実装されています。以下はこれらのメソッドの使用例です。




図2
TCharacter.ToUpper メソッドで大文字に変換

図3
TCharacter.ToLower メソッドで小文字に変換

リスト2
TCharacter の ToUpper, ToLower を使用した大文字または小文字への変換
uses に Character が必要
implementation

uses
  Character;

{$R *.DFM}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := 'Test東Str2';
end;

//=============================================================================
//  大文字への変換
//  TCharacterのメソッド類を使用する例
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to Length(LText) do begin
    Memo1.Lines.Add(ToUpper(LText[LIndex]));
  end;

  Memo1.Lines.EndUpdate;
end;

//=============================================================================
//  小文字への変換
//  TCharacterのメソッド類を使用する例
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to Length(LText) do begin
    Memo1.Lines.Add(ToLower(LText[LIndex]));
  end;

  Memo1.Lines.EndUpdate;
end;


上の LText[LIndex] は String 型の変数から 1 つだけ文字を取り出しています。これは Char 型となります。以下のように TCharacter.ToUpper, TCharacter.ToLower の引数を文字列とすると、その文字列全体を大文字あるいは小文字に変換します。




図4
文字列を大文字または小文字に変換

リスト3
TCharacter の ToUpper, ToLower を使用して文字列全体をた大文字または小文字への変換
uses に Character が必要
//=============================================================================
//  文字列の大文字または小文字への変換
//  ToUpper,ToLowerの引数を文字列にすると文字列を大文字または小文字に変換する
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LText : string;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  Memo1.Lines.Add(ToUpper(LText));
  Memo1.Lines.Add(ToLower(LText));

  Memo1.Lines.EndUpdate;
end;




03_TCharHelper を使用した大文字と小文字の判定


Delphi XE3 で実装された TCharHelper を使用して大文字と小文字を判定するテストです。
IsUpper メソッドで大文字かを判定します。小文字の判定には IsLower メソッドを使用します。




図5
TCharHelper のメソッドを使用して、大文字と小文字を判定

リスト4
TCharHelper の IsUpper, IsLower メソッドを使用して大文字か小文字かを判定
uses に Character が必要
implementation

uses
  Character;

{$R *.DFM}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := 'Test東Str2';
end;

//=============================================================================
//  大文字または小文字の判定
//
//  TCharHelperのメソッド類を使用する例
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
  LChar  : Char;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to LText.Length do begin
    LChar := LText[LIndex];
    if LChar.IsNumber then begin
      Memo1.Lines.Add(LChar + ' : 数字');
    end else
    if LChar.IsUpper then begin
      Memo1.Lines.Add(LChar + ' : 大文字');
    end else
    if LChar.IsLower then begin
      Memo1.Lines.Add(LChar + ' : 小文字');
    end else begin
      Memo1.Lines.Add(LChar + ' : その他');
    end;
  end;

  Memo1.Lines.EndUpdate;
end;




04_TCharHelper を使用した大文字または小文字への変換


Delphi XE3 で実装された TCharHelper を使用して大文字または小文字に変換するテストです。
大文字に変換するはに ToUpper メソッドを、小文字に変換するには ToLower メソッドを使用します。




図6
ToUpper メソッドで大文字に変換

図7
ToLower メソッドで小文字に変換

リスト5
TCharHelper の ToUpper, ToLower メソッドを使用して大文字または小文字に変換
uses に Character が必要
implementation

uses
  Character;

{$R *.DFM}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := 'TestStr2';
end;

//=============================================================================
//  大文字への変換
//  TCharHelperのメソッドを使用する例
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to LText.Length do begin
    Memo1.Lines.Add(LText[LIndex].ToUpper);
  end;

  Memo1.Lines.EndUpdate;
end;

//=============================================================================
//  小文字への変換
//  TCharHelperのメソッドを使用する例
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LText  : string;
  LIndex : Integer;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 1 to LText.Length do begin
    Memo1.Lines.Add(LText[LIndex].ToLower);
  end;

  Memo1.Lines.EndUpdate;
end;


上のコードでは LText[LIndex] という Char 型の変数で ToUpper, ToLower メソッドを使用していますが、以下のように文字列に ToUpper, ToLower メソッドを使用すると、文字列全体を大文字あるいは小文字に変換します。
ただし、これらのメソッドは TCharHelper のメソッドではありません。TStringHelper のメソッドです。TStringHelper も Delphi XE3 で実装された文字列 String 型用のヘルパーです。




図8
文字列を大文字または小文字に変換

リスト6
文字列を大文字または小文字に変換
このコードは TStringHelper の ToUpper ToLower を使用したことになる
したがって、uses に Character は必要ない
//=============================================================================
//  文字列の大文字または小文字への変換
//
//  Delphi XE3以降では、
//  文字列に対してToUpper, ToLowerを実行すると文字列に対する変換となる
//  この場合はTCharHelperではなくTStringHelperのメソッドが実行される
//  したがって、usesにCharacterは必要ない
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LText : string;
begin
  LText := Edit1.Text;

  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  Memo1.Lines.Add(LText.ToUpper);
  Memo1.Lines.Add(LText.ToLower);

  Memo1.Lines.EndUpdate;
end;