我在.txt文档中垂直写入.txt文件(Delphi读取的单个字符串)中的函数的21个y坐标。我如何将这个字符串分割成单独的值并将它们存储在一个“Farr”数组中?该文本文件的内容是这样的:将字符串中的数字列表转换为数组
-3
-2.5
-2
...
每个值需要被存储到的0 ... 21的规则阵列,像这样:
Farr:=[-3, -2.5, -2, ...]
谢谢!
我在.txt文档中垂直写入.txt文件(Delphi读取的单个字符串)中的函数的21个y坐标。我如何将这个字符串分割成单独的值并将它们存储在一个“Farr”数组中?该文本文件的内容是这样的:将字符串中的数字列表转换为数组
-3
-2.5
-2
...
每个值需要被存储到的0 ... 21的规则阵列,像这样:
Farr:=[-3, -2.5, -2, ...]
谢谢!
试试这个:
var
sl: TStringList;
i: integer;
s: string;
arr: array of double;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(FilePath);
SetLength(arr, sl.Count);
for i := 0 to sl.Count - 1 do
arr[i] := StrToFloat(sl[i]);
finally
sl.Free;
end;
end;
注:当我写这个答案,问题声称,多个值出现在一行,用空格隔开。显然这个信息是错误的。
该问题有多个部分。请与文档咨询阅读此答案。做一些希望有用的提示可以在这里找到:How can I search for Delphi documentation?
读取文件
很多方法可以做到这一点。也许最简单和最常见的方法是使用TStringList
。创建一个,然后致电LoadFromFile
传递您的文本文件的名称。
分割字符串
同样,大量的选择。我可能会去分裂功能,如StrUtils.SplitString
。
如果你有一个包含空格分隔的值,你会做以下字符串str
:
var
Values: TStringDynArray;
....
Values := SplitString(str, ' ');
当然,现在看起来你有每个文件的行一个值。在这种情况下,你不需要分割任何字符串。
从字符串到真正
值转换使用StrToFloat
这一点。
var
RealValue: Real;
....
RealValue := StrToFloat(StringValue);
这将使用本地用户的区域设置。如果与小数点分隔符不匹配,可能会让您头疼。如果小数点分隔符总是为(例如).
,那么您需要指定该分隔符。
var
RealValue: Real;
FormatSettings: TFormatSettings;
....
FormatSettings := TFormatSettings.Create;
FormatSettings.DecimalSeparator := '.';
RealValue := StrToFloat(StringValue, FormatSettings);
如果StrToFloat
由于任何原因失败将引发异常。作为替代方案,您可以使用TryStrToFloat
表示使用其返回值Boolean
指示失败。例如:
if not TryStrToFloat(StringValue, RealValue, FormatSettings) then
.... deal with error
您可以使用正则表达式来获取匹配数和匹配自身。 下面的代码这样做,虽然你可能要更改的正则表达式:
MyRegexp := TRegEx.Create('[-+]?[0-9]*\.?[0-9]+');
with MyRegexp.Matches do
if Count = 21 then //As you always want 21 items
for i := 0 to 20 do
FArr[i] := StrToFloat(Item[i]);
过程中的错误处理的,例如应该加入,但是这是你想要什么样的基本。此外,如果列表由空格,分号等分隔,这取决于您的正则表达式。
那么你的问题是什么? –
对不起,如果我不够具体。我不知道如何将字符串中的单个数字转换为数组列表 – user3480367
什么是数组列表?如何转换它们?数字的可能格式是什么?实数?整数?什么是十进制数点是用来的吗?你有没有写过任何代码?你知道如何编写代码吗?你是专家级程序员还是全新手?我们怎样才能帮你没有更多的信息? –