Avatar billede angelenglen Nybegynder
20. maj 2006 - 17:04 Der er 11 kommentarer og
1 løsning

Udvælge del af streng

jeg har en streng der f.eks kunne se sådan her ud:


45234daeffxxxxx45ef53fa23yyyy2346625234234534xxxxx5426fe234gyyyy234b

jeg vil så gerne vælge FRA første gang der står 5 x'er (xxxxx) og TIL første gang der står 4 y'er (yyyy).

dvs ovenstående string burde returnere:
45ef53fa23

hvordan går jeg det?
Avatar billede morhan Novice
20. maj 2006 - 17:16 #1
pos1 = Instr(str, "xxxxx") + 5
pos2 = Instr(str, "yyyy")
str2 = Mid(str, pos1, pos2-pos1)

hvis "xxxxx" varierer i længde:

s = "xxxxx"
pos1 = Instr(str, s) + Len(s)
Avatar billede tofte Juniormester
20. maj 2006 - 17:16 #2
Du kan gøre det med inStr og mid, Eks:
Dim str As String
Dim nyStr As String
str = "45234daeffxxxxx45ef53fa23yyyy2346625234234534xxxxx5426fe234gyyyy234b"
nyStr = Mid(str, 5 + InStr(1, str, "xxxxx"), (InStr(1, str, "yyyy") - InStr(1, str, "xxxxx")))
MsgBox nyStr
Avatar billede tofte Juniormester
20. maj 2006 - 17:17 #3
ja, 1 sekund, er ikke lang tid :-)
Avatar billede thesurfer Nybegynder
20. maj 2006 - 17:43 #4
Man kan også gøre sådan her:

str = split(str, "yyyy")
str2 = mid(str(0), instr(str(0), "xxxxx") + 5)

Så indeholder str2 værdien "45ef53fa23".

Det gør det også meget nemmere, hvis man skulle have fat i den værdi, der står lige efter det næste "xxxxx", da man så bare bruger "str(1)" i stedet for "str(0)"..
Avatar billede thesurfer Nybegynder
20. maj 2006 - 17:45 #5
..
og så kan det også bruges i en loop:

str = split(str, "yyyy")
for i = 0 to ubound(str) - 1
    str2 = mid(str(i), instr(str(i), "xxxxx") + 5)
    msgbox str2
next
Avatar billede angelenglen Nybegynder
20. maj 2006 - 17:56 #6
okay det var hurtigt! -og det virker!

Hvis i smider et svar hver, kan i få lov at dele points.
Avatar billede thesurfer Nybegynder
20. maj 2006 - 18:00 #7
Jeg må indrømme, at jeg foretrækker positioner (f.eks. "pos ="), fremfor at skrive det hele i mid-linien..

Det er meget nemmere at holde styr på det, når man f.eks. bare kan skrive "pos2-pos1".. synes jeg.. :-)

Hvis du skal bruge flere del af strengen, vil jeg klart anbefale Split.
Avatar billede angelenglen Nybegynder
20. maj 2006 - 18:19 #8
damn, jeg løb forresten ind i et problem...

hvis nu strengen ser sådan her ud:

45234dyyyyaeffxxxxx45ef53fa23yyyy2346625234234534xxxxx5426fe234gyyyy234b

-så kommer der et yyyy FØR der kommer et xxxxx - hvordan får jeg den til at tage den første yyyy EFTER den første xxxxx ?
Avatar billede morhan Novice
20. maj 2006 - 18:27 #9
pos1 = Instr(str, "xxxxx") + 5
pos2 = Instr(pos1, str, "yyyy")
str2 = Mid(str, pos1, pos2-pos1)

når pos2 findes, angiver du pos1 som første parameter til Instr, så starter søgningen efter xxxxx
Avatar billede angelenglen Nybegynder
20. maj 2006 - 18:36 #10
ah smart, jeg havde slet ikke set start parameteret.
Avatar billede thesurfer Nybegynder
20. maj 2006 - 18:43 #11
Med en løkke, laver man bare en IF-sætning, der spørger "er der xxxxx?":

str = split(str, "yyyy")
for i = 0 to ubound(str) - 1
    if instr(str(i), "xxxxx") then
        str2 = mid(str(i), instr(str(i), "xxxxx") + 5)
        msgbox str2
    end if
next
Avatar billede angelenglen Nybegynder
06. juni 2006 - 19:01 #12
takker mange gange for hjælpen
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