Avatar billede landsbytossen Nybegynder
09. november 2001 - 14:43 Der er 7 kommentarer og
1 løsning

Case struktur med stringe ???

Kan man virkelig ikke bruge stringe i en case?
Hvad er det bedste alternativ til:

case str_expr of
    str_1: statements_1;
    str_2: statements_2;
    .
    .
    str_n: statements_n;
else
    else_statements;
end;
Avatar billede martinlind Nybegynder
09. november 2001 - 14:47 #1
evt. Enumarates :

type
  MyEnum = (Str_1,Str_2,Str_3);
var
  FStr : MyEnum;

begin
  case FStr of
    Str_1 : ;
    Str_2 : ;
    Str_3 : ;
  end;
end;

/Martin
Avatar billede landsbytossen Nybegynder
09. november 2001 - 14:50 #2
skide godt, god weekend (:-))
Avatar billede martinlind Nybegynder
09. november 2001 - 14:54 #3
I lige måde *S*
Avatar billede landsbytossen Nybegynder
09. november 2001 - 15:24 #4
Skal lige høre:
Kan man ikke angive en string variabel i MyEnum = (Str_1,Str_2,Str_3);
Jeg får nemlig først værdien runtime.
Får at vide at MyEnum ikke er kompatibel med String typen.
Som i det øverste eksempel, hvor jeg skal kunne styre hvad der ligger i str_expr.
Avatar billede unclebug Nybegynder
09. november 2001 - 16:24 #5
Du kan ikke bruge enum hvis det skal være runtime.

Her er et eksempel kopieret fra www.undo.com:

<---

I like to add an elegant, simplified and delphi independent :) solution to the \'Using CASE With Strings\' issue.

My solution is the function TokenNumber...

function TokenNumber(Source : string; const Delimeter, Token : string) : integer;
Here is an example of use...
          {s = ?}
          case TokenNumber(\'CASE;ON;STRINGS;POSSIBLE;SOLUTION\', \';\', s) of
            1 : ShowMessage(\'s = \'\'CASE\'\'\');
            2 : ShowMessage(\'s = \'\'ON\'\'\');
            3 : ShowMessage(\'s = \'\'STRINGS\'\'\');
            4 : ShowMessage(\'s = \'\'POSSIBLE\'\'\');
            5 : ShowMessage(\'s = \'\'SOLUTION\'\'\');
            else
              ShowMessage(\'s = unknown value\');
          end;
Here comes the source for function TokenNumber...
function TokenNumber(Source : string; const Delimeter, Token : string) : integer;
var
  i : integer;
begin
  Result := 1;
  while Result > 0 do {traverse through token\'s in Source}
  begin
    i := Pos(Delimeter, Source);
    if ((i > 0) and (Token = Copy(Source, 1, i - 1))) or
      ((i = 0) and (Token = Source)) then              {if match then      }
      Break;                                            {  mission complete }

    if i > 0 then                                  {if more tokens then      }
      Delete(Source, 1, i + Length(Delimeter) - 1) {  cut \'no match\' token  }
    else                                          {else                    }
      Result := -1;                                {  mission complete      }

    Inc(Result);
  end;
end;

--->

Du kan også finde andre måder at gøre det på, på www.undo.com, men de minder meget om hinanden (se under Articles, tips & tricks)
Avatar billede martinlind Nybegynder
09. november 2001 - 17:42 #6
Nej du kan ikke tilføje en Enum runtime, men du kan få dine enum værdier som strenge runtime med GetEnumName()

Ellers må du vælge undu eks. med det tager tid, skal du lige være opmærksom på

/Martin
Avatar billede unclebug Nybegynder
09. november 2001 - 21:48 #7
Ja, Undo eksemplet er langsomt. Hvad skal det bruges til? Måske er der et hurtigere alternativ end case.
Avatar billede landsbytossen Nybegynder
12. november 2001 - 09:13 #8
Tak for forslagene. Da mit case kun er oppe på 3 endnu, arbejder jeg videre med if - the istedet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester