Enumerating a string

Posted by JamesB on Stack Overflow See other posts from Stack Overflow or by JamesB
Published on 2010-03-18T15:46:29Z Indexed on 2010/03/18 16:51 UTC
Read the original article Hit count: 360

Filed under:
|
|

I have a status which is stored as a string of a set length, either in a file or a database.

I'm looking to enumerate the possible status'

I have the following type to define the possible status'

Type TStatus = (fsNormal = Ord('N'),fsEditedOnScreen = Ord('O'),
                fsMissing = Ord('M'),fsEstimated = Ord('E'),fsSuspect = Ord('s'),
                fsSuspectFromOnScreen = Ord('o'),fsSuspectMissing = Ord('m'),
                fsSuspectEstimated = Ord('e'));

Firstly is this really a good idea? or should I have a seperate const array storing the char conversions? That would mean more than one place to update.

Now convert a string to a status array I have the following, but how can I check if a char is valid without looping through the enumeration?

Function StrToStatus(Value : String):TStatusArray;
var
    i: Integer;
begin
    if Trim(Value) = '' then
    begin
        SetLength(Result,0);
        Exit;
    end;
    SetLength(Result,Length(Value));
    for i := 1 to Length(Value) do
    begin
        Result[i] := TStatus(Value[i]); // I don't think this line is safe.
    end;
end;

AFAIK this should be fine for converting back again.

Function StatusToStr(Value : TStatusArray):String;
var
  i: Integer;
begin
    for i := 0 to Length(Value) - 1 do
        Result := Result + Chr(Ord(Value[i]))
end;

I'm using Delphi 2007

© Stack Overflow or respective owner

Related posts about delphi

Related posts about enumeration