Avatar billede qnella Nybegynder
11. august 2008 - 14:05 Der er 5 kommentarer

udskrive en del af en streng

Hej

jeg har en streng der ser sådan her ud

www\erty\http:\\testigen\hoyt6\test322

jeg vil kun have den sidste del af strengen så det kun er tallene efter test jeg henter i dette her tilfælde 322
håber at nogle kan hjælpe
Avatar billede w13 Novice
11. august 2008 - 14:08 #1
Du må lige fortælle lidt mere.

Hedder strengen altid:
www\erty\http:\\testigen\hoyt6\test[tre tal]
eller er det blot de 3 sidste tegn, du vil hive ud eller hvordan?

Du henter de 3 sidste tegn således:

sStreng = "www\erty\http:\\testigen\hoyt6\test322"
sStreng = Right(sStreng,3)
Avatar billede softspot Forsker
11. august 2008 - 14:09 #2
Du kan benytte InStrRev til at finde en delstreng bagfra i en anden streng. I dit tilfælde kunne du lede efter "\test" således:

' Find den pågældende delstreng i hovedstrengen
pos = InStrRev(s, "\test")

if pos > 0 then
  ' udtag de sidste tegn efter den position som er fundet.
  lastChars = mid(s, pos + 1)
else
  lastChars = ""
end if

Lastchars indeholder så enten det der står efter \test eller en tom streng hvis \test ikke kunne findes...
Avatar billede softspot Forsker
11. august 2008 - 14:14 #3
Min metode er naturligvis også kun anvendelig hvis din streng altid ender på \testXXXX hvor XXXX er et vilkårligt antal tal. Hvis du har behov for et mere dynamisk match, så skal du over i Regular Expressions. Dette kunne muligvis bruges:

dim rx
set rx = new RegEx
rx.pattern = "\d+$"
if rx.test(s) then
  lastchars = rx.match(s)(0)
else
  lastchars = ""
end if

Jeg er noget usikker på syntaksen af RegEx-objektet, men selve regex-strengen burde fungere...
Avatar billede softspot Forsker
11. august 2008 - 14:25 #4
Følgende er testet og finder i det mindste tallet i slutningen af din streng (og der er ikke noget krav om at slutningen af strengen skal have bestemt format):

  st = "www\erty\http:\\testigen\hoyt6\test322"
  set rx = new RegExp
  rx.Pattern = "\d+$"
  set ms = rx.Execute(st)
  lastNumbers = ms(0)


rx.Execute returnerer et array af match for din søgning, så du kan gennemløbe den med for each, hvis din expression lægger op til flere resultater. Det er dog ikke umiddelbart tilfældet med den specifikke expression, så derfor har jeg blot indekseret til det første resultat i det array...
Avatar billede softspot Forsker
11. august 2008 - 14:30 #5
Det er nok en god idé at teste på ms.Count > 0 inden du aflæser ms(0), da du vil opleve en fejl, hvis det ikke er et tal der afslutter strengen.


  st = "www\erty\http:\\testigen\hoyt6\test322"
  set rx = new RegExp
  rx.Pattern = "\d+$"
  set ms = rx.Execute(st)
  if ms.Count > 0 then
    lastNumbers = ms(0)
  else
    lastNumbers = ""
  end if


Det faktum at der findes en egenskab på ms som hedder Count, vidner så om at det nok ikke er et array, men snarere en collection eller et dictionary objekt... :-)
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