delphi字符串分割

  • Post category:other

在Delphi中,可以使用AnsiStringsSysUtils单元中的函数来实现字符串分割。下面是两种常用的方法:

1. 使用AnsiStrings单元中的ExtractStrings函数

ExtractStrings函数可以将一个字符串按照指定的分隔符分割成多个子字符串,并将这些子字符串存储在一个字符串列表中。使用方法如下:

uses
  AnsiStrings;

var
  StrList: TStringList;
begin
  StrList := TStringList.Create;
  try
    ExtractStrings([';'], [], PChar('Delphi;is;awesome'), StrList);
    // StrList 中的内容为 'Delphi', 'is', 'awesome'
  finally
    StrList.Free;
  end;
end;

在上面的示例中,ExtractStrings函数的第一个参数是一个字符数组,用于指定分隔符。第二个参数是一个字符数组,用于指定特殊字符,例如引号和括号。第三个参数是要分割的字符串。最后一个参数是一个字符串列表,用于存储分割后的子字符串。

2. 使用SysUtils单元中的SplitString函数

SplitString函数可以将一个字符串按照指定的分隔符分割成多个子字符串,并将这些子字符串存储在一个字符串数组中。使用方法如下:

uses
  SysUtils;

var
  StrArray: TArray<string>;
begin
  StrArray := SplitString('Delphi;is;awesome', ';');
  // StrArray 中的内容为 'Delphi', 'is', 'awesome'
end;

在上面的示例中,SplitString函数的第一个参数是要分割的字符串。第二个参数是一个字符数组,用于指定分隔符。

示例1:使用ExtractStrings函数分割CSV文件

假设有一个CSV文件,每行包含三个字段,字段之间用逗号分隔。可以使用ExtractStrings函数将每行分割成三个子字符串,并将这些子字符串存储在一个字符串列表中。示例代码如下:

uses
  AnsiStrings;

var
  StrList: TStringList;
  Line: string;
  FileStream: TFileStream;
  StreamReader: TStreamReader;
begin
  StrList := TStringList.Create;
  try
    FileStream := TFileStream.Create('data.csv', fmOpenRead);
    try
      StreamReader := TStreamReader.Create(FileStream);
      try
        while not StreamReader.EndOfStream do
        begin
          Line := StreamReader.ReadLine;
          ExtractStrings([','], [], PChar(Line), StrList);
          // StrList 中的内容为当前行的三个字段
 // 处理 StrList 中的数据
          StrList.Clear;
        end;
      finally
        StreamReader.Free;
      end;
    finally
      FileStream.Free;
    end;
  finally
    StrList.Free;
  end;
end;

在上面的示例中,首先创建一个字符串列表StrList,然后打开CSV文件并逐行读取文件内容。对每一行,使用ExtractStrings函数将其分割成三个子字符串,并将这些子字符串存储在StrList中。最后,处理StrList中的数据并清空StrList

示例2:使用SplitString函数分割URL参数

假设有一个URL,其中包含多个参数,参数之间用&符号分隔。可以使用SplitString函数将URL按照&符号分割成多个子字符串,并将这些子字符串存储在一个字符串数组中。示例代码如下:

uses
  SysUtils;

var
  StrArray: TArray<string>;
  URL: string;
  Params: TStringList;
  I: Integer;
begin
  URL := 'http://www.example.com/?name=John&age=30&gender=male';
  Params := TStringList.Create;
  try
    StrArray := SplitString(URL, '&');
    for I := 0 to Length(StrArray) - 1 do
    begin
      Params.Values[ExtractWord(1, StrArray[I], ['='])] := ExtractWord(2, StrArray[I], ['=']);
    end;
    // Params 中的内容为 'name=John', 'age=30', 'gender=male'
    // 可以使用 Params.Values['name'] 获取参数值
  finally
    Params.Free;
  end;
end;

在上面的示例中,首先创建一个字符串StrArray,然后使用SplitString函数将URL按照&符号分割成多个子字符串。对于每个子字符串,使用ExtractWord函数将其分割成参数名和参数值,并将其存储在一个字符串列表Params中。最后,可以使用Params.Values['name']获取参数值。