AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】文字の置換
今回は、文字の置換、つまり、文字を検索し該当する文字を別の文字に置き換える、というプログラムを作成しようと思います。文字の検索は、範囲選択を行ったものを対象とし、文字データの一部が合致する場合と、文字データ全部が合致(完全合致)する場合を選択して実行出来るようにします。また、「大文字・小文字を区別しない」の選択も出来るようにします。
 
文字の置換後の文字長さの最大を255バイト(半角255文字)とします。それを超える場合には置換を行いません。
 
それではバッチファイルから。
p050_文字置換.bat
REM p050−文字置換
@echo off
REM #jww
REM #cd
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #h3
REM #hc 【範囲選択】文字を選択して下さい。
REM #g1
REM #hr
start /w p050.exe
 
プロジェクト「p050」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p050」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
p050−文字置換
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\jww\p050

メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p050」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p050」の中に「p050.dpr」として保存

Form1の画面は、取りあえずいつもと同じく、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
BorderIcons
 biMaximize
False最大化しないように
BorderStylebsSingle画面をリサイズしないように
Caption文字置換タイトルバーに表示されます
ColorclWhite画面色 御自由にどうぞ
Font内
 Name
MS ゴシック プロポーショナルフォントは
文字配置調整が微妙なので
Font内
 Size
10小さいと少し見難い為
ScaledFalse 動作環境によっての文字の
大きさ変動を少し抑えられる

メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。前回及び上記で作成した「MyFunc.pas」「JwwGaibu.pas」を取り込みます。Unit1.pas の uses節に MyFunc と JwwGaibu を追加します。(※以下では全角空白を付けて桁調整等をしていますが実際は半角空白或いは無しです)
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  MyFunc, JwwGaibu ;
 
type
  TForm1 = class(TForm)
・・・
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。アイコンが Delphi6デフォルトのものになっていますので、アイコンファイルを作成してフォーム・プロジェクトで指定しておきます。

画面上に [Standard]内の Label コンポーネントを2つ、Edit コンポーネントを2つ、CheckBox コンポーネントを2つ、Button コンポーネントを2つ配置します。
Label1
Caption置換前の文字表示内容
Label2
Caption置換後の文字表示内容
Edit1、2
MaxLength255最大入力可能な文字長さ
Text 文字内容(空;何も無し)
CheckBox1
Caption文字の一部が合致左上の表示内容
CheckBox2
Caption大文字・小文字を区別しない左上の表示内容
Button1
CaptionOK(&Y)ボタン上の文字
DefaultTrue[Enter]キーを押したら[OK]
Button2
Captionキャンセル(&N)ボタン上の文字
CancelTrue[Esc]キーを押したら[キャンセル]
画面のレイアウトは下図のようにしてみました。

 
□文字の一部が合致 のチェックがオフの場合(デフォルト)は、文字が完全一致する場合、つまり、置換前の文字=文字データの場合としてプログラミングを行います。チェックがオンの場合は、AnsiPos関数で文字データ内に置換前の文字が含まれる場合、としてプログラミングを行います。この場合は1つの文字データ内に複数の置換がある場合も有り得ますので注意します。
 
□大文字・小文字を区別しない のチェックがオフの場合(デフォルト)は、大文字・小文字を区別する、という事でそのまま処理しますが、チェックがオンの場合は、置換前の文字、文字データともに AnsiUpperCase で大文字に変換した状態で処理を行います。なお、これは半角・全角の事ではありませんので御注意下さい。半角・全角は常に区別されます。
 
 
オブジェクトインスペクタにて Form1 の イベント OnShowの箇所でダブルクリック、OnCloseの箇所でダブルクリック、及び、
Button1、Button2 をダブルクリックして OnClickイベントを記述出来るようにします。なお、文字の長さを最大255文字まで使えるよう JwwGaibu.pas を少し修正しておきます。
Unit1.pas
(・・・前略・・・)
type
  TForm1 = class(TForm)
 (・・・)
  private
   { Private 宣言 }
   AppPath : string ;
  public
   { Public 宣言 }
  end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// 起動時
procedure TForm1.FormShow(Sender: TObject);
begin
  Form1.Left := Mouse.CursorPos.X - Form1.Width div 2;
  Form1.Top := Mouse.CursorPos.Y - 4;
  // 初期設定
  InitJwwGaibu ;
  // プログラムのあるフォルダを取得します
  AppPath := ExtractFilePath(Application.ExeName) ;
  //
  OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
  S_Init ;
end;
 
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
  // 最終処理
  EndJwwGaibu ;
end;
 
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : integer ;
  s,ss,st1,st2 : string ;
  cb1,cb2 : Boolean ;
begin
  st1 := Edit1.Text ;
  st2 := Edit2.Text ;
  cb1 := CheckBox1.Checked ;
  cb2 := CheckBox2.Checked ;
  if (st1 = '') then begin
   MessageBeep(Word(-1));
   Edit1.SetFocus ;
   exit ;
  end;
  if (cb2) then st1 := AnsiUpperCase(st1);
 
  for i:=0 to JW_EntTextN-1 do begin
   with JW_EntText[i] do begin
    s := st ;
    if (cb2) then s := AnsiUpperCase(s);
    if not(cb1) then begin
     // 完全一致
     if (s = st1)and(Length(st2) <= 255) then
      st := st2 ;
    end
    else begin
     // 一部一致
     ss := '';
     j := AnsiPos(st1,s) ;
     while (j > 0) do begin
      ss := ss + Copy(s,1,j-1) + st2 ;
      s := Copy(s,j+Length(st1),Length(s));
      j := AnsiPos(st1,s) ;
     end;
     ss := ss + s ;
     if (Length(ss) <= 255) then
      st := ss ;
    end;
   end;
  end;
  // 生成
  SendMem('hd');
  S_EntAll(-1,-1,-1,-1,-1,-1,-1,0, nil);
  Close ;
end;
 
// [Cancel]
procedure TForm1.Button2Click(Sender: TObject);
begin
  Close ;
end;
 
end.
 
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p050」内に作成された「p050.exe」をフォルダ「Gapp」内へコピーします。外部変形を実行して動作確認をしてみて下さい。
 
 
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、Pcataサイトに置いておきますので必要な方はそちらからダウンロードして下さい。
 
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
M7
Jw_cad
 [BACK]
 [NEXT]
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.