我在.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
什麼是數組列表?如何轉換它們?數字的可能格式是什麼?實數?整數?什麼是十進制數點是用來的嗎?你有沒有寫過任何代碼?你知道如何編寫代碼嗎?你是專家級程序員還是全新手?我們怎樣才能幫你沒有更多的信息? –