18. april 2003 - 22:36Der er
8 kommentarer og 1 løsning
Streng Case i en procedure med parametre...
Hej eksperter... Så har jeg igen rodet mig ud i noget nams...tja... Jeg har et problem mht. mit lille projekt, hvor jeg er i gang med at udvikle klient-delen af det. Problemet: 1) Min klient modtager en streng fra serveren efter login. 2)! Klienten skal så i en selv-erkleret procedure (med en parameter) cheke hvad der står i starten af strengen. (Denne skal være en case løkke, eftersom der er mindts 30 foskellige) 3)Klienten skal derefter tilføje strengene de forskellige steder, alt efter hvad der stod i starten.
Som i nok kan se er det 2. trin der driller! Jeg ville gerne have at min kode kom til at se nogenlunde således ud:
Procedure ChkRecLine(streng:string); begin case streng of //her tjekkes så ... end; end;
Jeg bruger forresten Delphi 6 og Indy til at komunikere med... på forhånd tak... :)
Øhmm det kan godt være at jeg har skræmt nogen væk pga. det 3 punkter. Men det er dog kun punkt 2 jeg skal have hjælp med... Dvs. ChkRecLine proceduren. ^^
Du har jo nok fundet ud af, at man ikke kan bruge strings i case sætninger...
Men hvad er det du checker på i strengen? Hvis det er en enkelt karakter eller f.eks. et tal kan du jo godt pille den ud af strengen og bruge den i casen.
Men ellers vil det nemmeste være en if else if else if... sætning
Her er et eksempel på en modtaget streng fra serveren: $NAME:Hulubulu; Proceduren skal tjekke hvad der står efter $ og derefter slette fra $ til og med : derefter skal navnet ind i en variabel og ; skal bare bruges som en afslutter...
Ja jeg har set at man ikke kan bruge strenge i en case... men der var også et par forsklag på eksperten her, men de kan ikke rigtigt bruges, eftersom der er ca. 30 forskellige strenge og pga det her er i en procedure for sig selv med en parameter.
Du *kunne* godt lave en const table med dine check navne, finde indexet og så bruge en case sætning, men så har du bare rodet med at sikre dig at du gør det rigtige med de rigtige index i casen... Det bliver hurtigt noget rod og det er hamrende nemt at lave fejl i.
Men hvis det er 'faste' check navne du får som input, så er nedenstående nok den nemmeste løsning:
var Chk : string; .. Chk := LowerCase(Copy(InputStr,2,Pos(InputStr,':')-2)); if Chk = 'abc' then ... else if Chk = 'efg' then ...
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.