2014-03-31 267 views
0

我在.txt文档中垂直写入.txt文件(Delphi读取的单个字符串)中的函数的21个y坐标。我如何将这个字符串分割成单独的值并将它们存储在一个“Farr”数组中?该文本文件的内容是这样的:将字符串中的数字列表转换为数组

-3 
-2.5 
-2 
... 

每个值需要被存储到的0 ... 21的规则阵列,像这样:

Farr:=[-3, -2.5, -2, ...] 

谢谢!

+0

那么你的问题是什么? –

+0

对不起,如果我不够具体。我不知道如何将字符串中的单个数字转换为数组列表 – user3480367

+0

什么是数组列表?如何转换它们?数字的可能格式是什么?实数?整数?什么是十进制数点是用来的吗?你有没有写过任何代码?你知道如何编写代码吗?你是专家级程序员还是全新手?我们怎样才能帮你没有更多的信息? –

回答

6

试试这个:

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; 
2

注:当我写这个答案,问题声称,多个值出现在一行,用空格隔开。显然这个信息是错误的。

该问题有多个部分。请与文档咨询阅读此答案。做一些希望有用的提示可以在这里找到: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 
1

您可以使用正则表达式来获取匹配数和匹配自身。 下面的代码这样做,虽然你可能要更改的正则表达式:

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]); 

过程中的错误处理的,例如应该加入,但是这是你想要什么样的基本。此外,如果列表由空格,分号等分隔,这取决于您的正则表达式。

相关问题