Avatar billede schubert1 Nybegynder
18. april 2003 - 22:36 Der 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... :)
Avatar billede schubert1 Nybegynder
19. april 2003 - 00:36 #1
Ø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. ^^
Avatar billede doc404 Novice
19. april 2003 - 00:49 #2
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
Avatar billede dkn Nybegynder
19. april 2003 - 00:49 #3
du kan ikke bruge case på strings, så jeg tror du bliver nødt til at lave en masse if sætninger.

Men først split teksten op i de stumper du skal bruge og smid dem i et array
Avatar billede schubert1 Nybegynder
19. april 2003 - 01:01 #4
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.
Avatar billede dkn Nybegynder
19. april 2003 - 01:30 #5
well der er ikke andet en at sige if så....

var
instr, indent, varia:string;
begin
instr := '$NAME:Hulubulu;';

indent := copy(instr, 2, length(instr));
indent := copy(indent, 0, pos(':', indent)-1);

varia := copy(instr, pos(':', instr)+1, length(instr)-1);

showmessage(indent+#13#10+varia);
end;


koden er ikke testet, bare et lille eksempel på hvordan man pakker stringen ud.
Avatar billede doc404 Novice
19. april 2003 - 01:38 #6
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
    ...
Avatar billede schubert1 Nybegynder
19. april 2003 - 23:01 #7
Lukker... fandt selv på en løsning (skal bruge det færdige progam på tirsdag!!!)
Avatar billede doc404 Novice
19. april 2003 - 23:11 #8
Tja, sådan kan man jo også gøre...
Avatar billede dkn Nybegynder
20. april 2003 - 01:48 #9
yep
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