簡體   English   中英

delphi從字符串中復制所需的數據

[英]delphi copy needed data from string

我有字符串中的數據是6/8或有時更多的行像這樣:

part:    size   actsize  name
0dtm: 000a0000 00020000 "misc"
1dtm: 00480000 00020000 "every"
2dtm: 00300000 00020000 "hexs"
3dtm: 0fa00000 00020000 "stem"
4dtm: 02800000 00020000 "ache"
5dtm: 093a0000 00020000 "data"

我需要從第二行到總/最后一行 /每行第一和第四個字 ,如下所示:

從總行數我需要每行的第一個和第四個單詞

0dtm / misc // < - 需要的數據

總行數相同

2dtm / every // < - 需要的數據

注意: 行數並不總是相同

因為行數並不總是相同所以我不能使用復制funstion任何其他建議?

謝謝

讓你的字符串在TStringList或字符串數​​組中。 您可以使用TStrings.CommaText或DelimitedText屬性來提取字符串的一部分:

TempList := TStringList.Create; // helper list
for i := 0 to List.Count - 1 do begin //or to High(array)
  TempList.CommaText := List[i];
  if TempList.Count >= 4 then begin //use separated elements
    FirstData := TempList[0];
    FourthData := TempList[3];
  end;
end;
TempList.Free;

文本格式似乎非常嚴格。 假設可以逐行處理數據,看起來您可以使用預先確定的字符索引來解析每一行。

我首先編寫代碼來將一行解析為記錄。

type
  TItem = record
    Part: string;
    Size: Integer;
    ActSize: Integer;
    Name: string;
  end;

function GetItemFromText(const Text: string): TItem;
begin
  Result.Part := Copy(Text, 1, 4);
  Result.Size := StrToInt('$'+Copy(Text, 7, 8));
  Result.ActSize := StrToInt('$'+Copy(Text, 16, 8));
  Result.Name := Copy(Text, 26, Length(Text)-26);
end;

一旦掌握了這一點,處理數據就很簡單了。 首先將其加載到字符串列表中,作為解析為單獨行的方法。

var
  Items: TStringList;
....
Items := TStringList.Create;
Items.Text := MyData;

然后,處理每一行,記住跳過第一行標題:

var
  i: Integer;
....
for i := 1 to Items.Count-1 do 
begin
  Item := GetItemFromText(Items[i]);
  // do whatever needs to be done with the content of Item
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM