Inno Setup-用零填充字符串到特定长度 [英] Inno Setup - Pad a string to a specific length with zeros

查看:93
本文介绍了Inno Setup-用零填充字符串到特定长度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码当前的样子:

Here's what my code currently looks like:

var
  Page: TInputQueryWizardPage;

procedure IDKeyPress(Sender: TObject; var Key: Char);
var
  KeyCode: Integer;
begin
  KeyCode := Ord(Key);
  if not ((KeyCode = 8) or ((KeyCode >= 48) and (KeyCode <= 57))) then
    Key := #0;
end;

Procedure InitializeWizard();
Begin
Page := CreateInputQueryPage(blahblah);
  Page.Add('Profile ID:', False);
  Page.Edits[0].MaxLength := 16;
  Page.Edits[0].OnKeyPress := @IDKeyPress;
  Page.Values[0] := '0000000000000000';
End;

procedure WriteUserInput;
var
A: AnsiString;
U: String;
begin
    LoadStringFromFile(ExpandConstant('{app}\prefs.ini'), A);
    U := A;
    StringChange(U, '0000000000000000', Page.Values[0]);
    A := U;
    SaveStringToFile(ExpandConstant('{app}\prefs.ini'), A, False);
end;

procedure CurStepChanged(CurStep: TSetupStep);
Begin
if  CurStep=ssPostInstall then
  begin
    WriteUserInput;
  end
End;

现在,我需要Inno要做的就是保留用户输入的内容(如果已经是16位数字),如果小于16则以0填充(例如,如果只有15位,则仅填充0;如果是15位,则填充2).是14等).什么功能可以做到这一点?

Now what I need Inno to do is to leave the user input as it is, if it's already 16 digits, of fill with 0's at end, if it's less than 16 (e.g only one 0 if it's 15 digits, two if it's 14, etc.). What function would be able to do that?

推荐答案

一个通用函数,用于使用给定字符将字符串右填充到特定长度:

A generic function for right-padding a string to a certain length with a given character:

function PadStr(S: string; C: Char; I: Integer): string;
begin
  Result := S + StringOfChar(C, I - Length(S));
end;

根据您的特定需求,使用:

For your particular need, use:

StringChange(U, '0000000000000000', PadStr(Page.Values[0], '0', 16));


如果需要在编译时进行填充(在预处理器中),请参见如何使用零填充版本组件Inno Setup中的OutputBaseFilename .

这篇关于Inno Setup-用零填充字符串到特定长度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆