Avatar billede kennethv Nybegynder
02. september 2009 - 10:23 Der er 8 kommentarer og
1 løsning

String spørgsmål

Er det ikk muligt at kunne tjekke om en værdi findes på et bestem positioin i en string?

f.eks:

if strTest[1] = '0' then
begin
//
End;

eller er det kun hvis man skal give en værdi på en bestem position?
Avatar billede hrc Mester
02. september 2009 - 10:34 #1
Jo. Det er da muligt - også sådan som du gør det her.

Du tjekker naturligvis først om strengen er lang nok før du laver testen.

Alternativt kan du måske bruge copy(strTest,1,1) = '0'. Fordelen her er, at hvis strengen er tom, sker der ikke fejl. Det gør der med den direkte indeksering.
Avatar billede hrc Mester
02. september 2009 - 10:37 #2
Der er også funktionerne Pos og PosEx (sidstnævnte findes i StrUtils)

  if Pos('0',strTest) = 1 then

... men den returnerer kun den første forekomst af 0'et. Med PosEx kan man starte inde i strengen:

  if PosEx('0',strText,22) = 24 then

Umiddelbart er det bedst bare at pløje gennem strengen via indeksering.
Avatar billede kennethv Nybegynder
02. september 2009 - 11:26 #3
Jeg skal bruge det i forbindelse med at holde styr på om jeg har fuldt op på nogle forskellige ting i forbindelse med at en medarbejder er stoppet. Her er tanken at hvis person er slettet i vores system, så skal der sættes et "hak" = 1. Jeg har 4 ting jeg skal holde styr på og havde tænkt at bruge et felt i min db, som hedder "Status" og i den vil det se 0000, hvis intet er gjort. Når der efterhånden er gjort det skal gøres, vil den se ud som 0110 hvis 2 af de ting er udført og tilsidst 1111 når alt er klaret. Ved dog ikke om det latterligt at gøre det sådan. Måske du har en ide?
Avatar billede hrc Mester
02. september 2009 - 11:36 #4
Det kan være meget godt med sådan streng af flag, men kører du MSSQL, så findes der bit-felter som jeg vil synes er smartere at bruge.

Bevares, det giver lidt flere mere kode i selecten, men jeg synes det er måden:

select ...
from ...
where (flag1 = 1)
  and (flag2 = 0)
  and (flag3 = 0)
  and (flag4 = 1)

Men det er bare min mening. Hvis det andet giver dig den bedste mavefornemmelse, så er det nok den rigtige fremgangsmåde. Du kunne også lave et bytefelt og sætte bittene. Så sparer du 3 bytes på feltet...
Avatar billede kennethv Nybegynder
02. september 2009 - 12:05 #5
Når du skriver "bit-felter" kan jeg se at der er et "felt" der hedder bit, men der kan jeg kun have false eller true i.

Bytefelt kan jeg ikke se.

Jeg bruger MSSQLEXPRESS 2005
Avatar billede hrc Mester
02. september 2009 - 12:40 #6
(Hvis muligt kan du kan ligeså godt opgradere til 2008 express - den kører fint)

Det er vel også det der er brug for. Jeg snakker bare om at have 4 bit-felter i stedet for de 4 tegn i strengen. Hvad byte-feltet angår, så kan datatype tinyint bruges men det er nok for meget at gøre ud af det. Jeg demonstrerer det dog lige:

tinyint: 1 byte = 8 bit -> 0000 0000

Tanken var at sætte status bit-vis, eksempelvis Value := Value or $02 for at sætte bit nr. 2 (0000 0010). Skal bitten fjernes kan det gøres med xor: Value := Value xor $02. Skal man tjekke på værdien bruger man and: if Value and $02 = $02 then
Avatar billede kennethv Nybegynder
07. oktober 2009 - 10:27 #7
Hrc. Du må lige give et svar.
Avatar billede hrc Mester
07. oktober 2009 - 11:55 #8
. (inspireret af verdens korteste dialog. Forfatteren Victor Hugo var udenlands og telegraferede (vistnok en gammeldags slags SMS) til forlæggeren for at høre hvordan det gik med langseringen af "Les Miserables". Han sendte blot et '?' og forlæggeren svarede med et '!' da salget gik strygende).
Avatar billede kennethv Nybegynder
07. oktober 2009 - 12:58 #9
ROFL
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