如何在DELPHI中读取字符串并从字符串列表中获取值

时间:2018-09-05 08:31:10

标签: parsing delphi

如何读取字符串,然后从文件中获取字符串作为值。 然后我需要将该值/字符串显示为TextEdit组件。

  

示例:

     

BHG | 22 | CLASS | 12345 ^ JOHN CARTER || 200 | Good | 155 ^ 200 |

     

BHG | 333 | CLASS | 23231 ^ AMIRA || 100 | BAD | 100 ^ 150 |

我需要基于'22'值在TextEdit1中获取字符串“ 200” 然后根据'333'的值在TextEdit2中获取字符串“ 100”。

2 个答案:

答案 0 :(得分:4)

您可以使用Delimiter中的DelimitedTextTStringList在几行中执行此操作 代码-见下文。

简而言之,一个TStringList就像一个字符串数组, 可以按索引引用。您可以获取它以将输入字符串解析到数组中 通过设置定界符的值,在您的情况下为“ |”然后分配 输入其DelimitedText属性的字符串。

procedure TForm1.Button1Click(Sender: TObject);
var
  StringList : TStringList;
begin
  StringList := TStringList.Create;
  try
    StringList.Delimiter := '|';
    StringList.DelimitedText := 'BHG|22|CLASS|12345^JOHN CARTER||200|Good|155^200|';
    Edit1.Text := StringList[6];    //  Fills Edit1.Text with 200
  finally
    StringList.Free;
  end;
end;

答案 1 :(得分:-1)

MartynA的答案使用TStringList将字符串拆分成单独的单词(我应该注意,这很不错),我实现了另一种方法来完成相同的任务。请参见下面的代码。

procedure TForm1.Button1Click(Sender: TObject);
var
  S, D, Res: String;
  Arr: Array of String;
  i: integer;
begin
  S := 'BHG|22|CLASS|12345^JOHN CARTER||200|Good|155^200|';
  D := '|';

  Res := '';
  for i:=Low(S) to High(S) do
    begin
      if S[i] <> D then
        Res := Res + S[i]
      else
        begin
          SetLength(Arr, Length(Arr) + 1);
          Arr[Length(Arr) - 1] := Res;
          Res := '';
        end;
    end;

  // Display each word to us
  for i:=Low(Arr) to High(Arr) do
    ShowMessage(Arr[i]);
end;  

好吧,现在您要做的就是通过迭代数组的每个条目并将返回的值与所需的值进行比较,来构建条件以从数组中获取适当的值。