[英]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.