2014-03-31 313 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]); 

過程中的錯誤處理的,例如應該加入,但是這是你想要什麼樣的基本。此外,如果列表由空格,分號等分隔,這取決於您的正則表達式。

相關問題