2004. január 16., péntek

How to remove white-spaces from a string


Problem/Question/Abstract:

I need to be able to search through a list of strings and remove the ones that only contain what I call "white space" - spaces, tabs, control chars, etc.. Is there a function (either Delphi or WinAPI) that will do this?

Answer:

Solve 1:

procedure RemoveBlanks(sl: TStringList);
var
  i, j: Integer;
  blank: Boolean;
  c: Char;
  chars: array[Char] of Boolean;
begin
  { Set all significant chars to false }
  FillChar(chars, SizeOf(chars), True);
  for c := 'A' to 'Z' do
    chars[c] := False;
  for c := 'a' to 'z' do
    chars[c] := False;
  for c := '0' to '9' do
    chars[c] := False;
  i := Pred(sl.Count);
  while (i >= 0) do
  begin
    blank := True;
    j := Length(sl[i]);
    while (blank and (j >= 0)) do
    begin
      blank := blank and chars[sl[i][j]];
      Dec(j);
    end;
    if blank then
      sl.Delete(i);
    Dec(i);
  end;
end;


Solve 2:

procedure DeleteWhiteLines(Strings: TStrings);
var
  I: Integer;
begin
  for I := Strings.Count - 1 downto 0 do
    if TrimLeft(Strings[I]) = '' then
      Strings.Delete(I);
end;


Solve 3:

function KeepStr(sSource: string; ValidChars: TCharSet): string;
var
  iCurPos: Integer;
begin
  Result := Trim(sSource);
  iCurPos := 1;
  if Length(Result) > 0 then
  begin
    repeat
      if Result[iCurPos] in ValidChars then
        Inc(iCurPos)
      else
        Delete(Result, iCurPos, 1);
      if length(Result) = 0 then
        break;
    until (iCurPos = Length(Result) + 1);
  end;
end;

You use KeepStr like this:

type
  TCharSet = set of char;

var
  i: integer;
  s: string;
begin
  {AList is a TStringList declared somewhere}
  {have to work from the end of the list}
  for i := pred(AList) downto 0 do
  begin
    s := AList[i];
    s := KeepStr(s, ['A'..'Z'] + ['a'..'z'] + ['0'..'9']);
    if s = '' then
      AList.Delete(i);
  end;
end;

Nincsenek megjegyzések:

Megjegyzés küldése