gpt4 book ai didi

inno-setup - Innosetup 中的字符串数组

转载 作者:行者123 更新时间:2023-12-02 18:49:58 28 4
gpt4 key购买 nike

我试图在一行中 InnoSetup 的子字符串后面获取一个特定的整数。有Trim、TrimLeft、TrimRight函数,但没有子串提取函数。

示例:

line string:    2345
line another string: 3456

我想提取“2345”和“3456”。

我正在将文件内容加载到数组中,但无法通过 array[count][char_count] 取消引用。

最佳答案

我会将输入文件加载到 TStrings 集合中并逐行迭代它。对于每一行,我都会找到一个 ":" 字符位置,并从这个位置复制我最终要修剪的字符串。步骤:

1. line string:    2345
2. 2345
3. 2345

现在需要将此类字符串转换为整数并将其添加到最终集合中。由于您在文件示例中显示了一个空行,并且您没有说明此格式是否始终固定,因此让我们以安全的方式转换此字符串。 Inno Setup 仅为这种安全转换提供了一个函数,StrToIntDef功能。但是,此函数需要一个默认值,当转换失败时会返回该默认值,因此您必须向其调用传递一个值,而您在文件中永远不会期望该值。在下面的示例中,我选择了 -1,但您可以将其替换为您在输入文件中意想不到的任何其他值:

[Code]
type
TIntegerArray = array of Integer;

procedure ExtractIntegers(Strings: TStrings; out Integers: TIntegerArray);
var
S: string;
I: Integer;
Value: Integer;
begin
for I := 0 to Strings.Count - 1 do
begin
// trim the string copied from a substring after the ":" char
S := Trim(Copy(Strings[I], Pos(':', Strings[I]) + 1, MaxInt));
// try to convert the value from the previous step to integer;
// if such conversion fails, because the string is not a valid
// integer, it returns -1 which is treated as unexpected value
// in the input file
Value := StrToIntDef(S, -1);
// so, if a converted value is different from unexpected value,
// add the value to the output array
if Value <> -1 then
begin
SetArrayLength(Integers, GetArrayLength(Integers) + 1);
Integers[GetArrayLength(Integers) - 1] := Value;
end;
end;
end;

procedure InitializeWizard;
var
I: Integer;
Strings: TStringList;
Integers: TIntegerArray;
begin
Strings := TStringList.Create;
try
Strings.LoadFromFile('C:\File.txt');

ExtractIntegers(Strings, Integers);
for I := 0 to GetArrayLength(Integers) - 1 do
MsgBox(IntToStr(Integers[I]), mbInformation, MB_OK);
finally
Strings.Free;
end;
end;

关于inno-setup - Innosetup 中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22139355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com