16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:全角対応 StrToIntDef"
この発言は #01223 武丸タケシ さんの全角対応 StrToIntDef に対するコメントです
この発言に対し以下のコメントが寄せられています
#01226 十兵衛 さん RE^2:全角対応 StrToIntDef
武丸タケシ さん、こんにちは。十兵衛です。
>全角対応の StrToIntDef です。
標準のStrToIntDefの場合数字文字列の間に全角空白が入っていてもデフォルト
数値を返しますが、この関数ではダメなようですね。
また、TrimLeft、TrimRight関数も標準のものを使うといいかもしれません。
ということで、関数仕様を「変換対象の数値文字列に全角・半角空白が含まれて
いた場合その空白文字を除去し、且つ、全角数字文字が含まれている場合は数字
文字として数値変換を行う」ということと、Int64対応にし、そしてmathユニッ
トを使わない方法で以下の関数を書いてみました。
やっていることは全角の数字文字を半角に置き換えて、標準関数を使っているだ
けです(^^;)
function ZenToIntDef(const AStr:string;ADef:Integer):Int64;
const
CNumStr:array [0..1] of WideString = (
'1234567890',
'1234567890');
var
IDX,FPos:Integer;
FStr1,FStr2:WideString;
begin
//変換対象文字列内の空白をすべて除去する
FStr1 := StringReplace(StringReplace(AStr,' ','',[rfReplaceAll]),
' ','',[rfReplaceAll]);
for IDX := 1 to Length(FStr1) do begin
FPos := Pos(FStr1[IDX],CNumStr[0]);
if FPos > 0 then FStr2 := FStr2 + CNumStr[1][FPos]
else begin
FPos := Pos(FStr1[IDX],CNumStr[1]);
if FPos > 0 then FStr2 := FStr2 + CNumStr[1][FPos]
else begin
Result := ADef;
Exit;
end;
end;
end;
Result := StrToInt64Def(FStr2,ADef);
end;
01/01/04(木) 03:50 十兵衛(BZT01311)
Original document by 十兵衛 氏 ID:(BZT01311)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|