Avatar billede mini-me Nybegynder
16. juni 2005 - 12:50 Der er 23 kommentarer og
3 løsninger

Fjerne fra streng

Jeg har en database streng som indeholder eks. 1,3,6,10,14,15,17 og hvis jeg så vælger at fjerne 1,6,10 - hvordan løser jeg dette?

Så jeg får en ren streng der hedder: 3,14,15,17...
Avatar billede kalp Novice
16. juni 2005 - 12:57 #1
køre replace 3 gange?

replace(NewFileName,"1","")
replace(NewFileName,"6","")
replace(NewFileName,"10","")
Avatar billede softspot Forsker
16. juni 2005 - 12:58 #2
Det må være noget med:

arrNum = split(strTalDerSkalFjernes, ",")
for idx = 0 to ubound(arrnum)
  replace(strTalFraDatabasen & ",", arrNum(idx) & ",", "")
next

Opdeler alle tal der skal fjernes i et array og gennemløber dem mens den fjerner dem fra strengen fra databasen...

Det sidste komma efter strTalFraDatabasen og arrNum(idx) er for at det sidste tal også vil blive fjernet hvis det matcher.
Avatar billede kalp Novice
16. juni 2005 - 13:08 #3
ligger et svar hvis det kunne bruges.. (eftersom man ikke modtager mails fra eksperten.. just in case)
Avatar billede mini-me Nybegynder
16. juni 2005 - 13:12 #4
Microsoft VBScript compilation error '800a0414'

Cannot use parentheses when calling a Sub

/user_add.asp, line 166

replace(rs("Users") & ",", arrNum(idx) & ",", "")
Avatar billede kalp Novice
16. juni 2005 - 13:15 #5
dem tekst

tekst = 1,3,6,10,14,15,17

tekst = replace(tekst,"1","")
tekst = replace(tekst,"6","")
tekst = replace(tekst,"10","")

kan du ikke gøre noget lignende det?
Avatar billede ksoren Nybegynder
16. juni 2005 - 13:20 #6
Function RemoveNumber(numbers, str)
    Dim re

    numbers = Replace(fjern, ",", "|")
    str = "," & str

    Set re = New RegExp
    re.Global = True
    're.Pattern = "(^|,)(" & numbers & ")(?=,|$)"
    re.Pattern = ",(" & numbers & ")(?=,|$)"
    str = re.Replace(str, "")

    RemoveNumber = Mid(str, 2)
End Function

str = "1,3,6,10,14,15,17"
fjern = "1,6,10"

Response.Write RemoveNumber(fjern, str)

--
kalp, hvad sker der med 1-tallerne i 10,11,12 etc..?
Avatar billede ksoren Nybegynder
16. juni 2005 - 13:22 #7
Tilrettet version :)

Function RemoveNumber(numbers, str)
    Dim re

    numbers = Replace(numbers, ",", "|")
    str = "," & str

    Set re = New RegExp
    re.Global = True
    re.Pattern = ",(" & numbers & ")(?=,|$)"
    str = re.Replace(str, "")

    RemoveNumber = Mid(str, 2)
End Function
Avatar billede mini-me Nybegynder
16. juni 2005 - 13:22 #8
Kalp, nej det er dynamisk output hver gang...

Ksoren kigger lige på det
Avatar billede busschou Praktikant
16. juni 2005 - 13:22 #9
skal bare have kommaet med ;o)
--
tekst = 1,3,6,10,14,15,17

tekst = replace(tekst,"1,","")
tekst = replace(tekst,"6,","")
tekst = replace(tekst,"10,","")
Avatar billede mini-me Nybegynder
16. juni 2005 - 13:25 #10
Det virker altså ikke helt....
Avatar billede ksoren Nybegynder
16. juni 2005 - 13:25 #11
busschou, er du sikker på den? :o
Avatar billede mini-me Nybegynder
16. juni 2005 - 13:27 #12
strSQL = "Select * From [Group] where Id = " & Request.Form("GroupUsersId") & " AND companyId = '" & session.Contents("company.id") & "'"
        set rs = conn.execute(strSQL)
        cleanStr = rs("Users")
       
            Function RemoveNumber(numbers, str)
                Dim re
                numbers = Replace(numbers, ",", "|")
                str = "," & str
           
                Set re = New RegExp
                re.Global = True
                re.Pattern = ",(" & numbers & ")(?=,|$)"
                str = re.Replace(str, "")
           
                RemoveNumber = Mid(str, 2)
               
                'response.Write(RemoveNumber)
            End Function
           
            str = cleanStr
            fjern = Request.Form("RemoveGroupSelectBox")
           
            Response.Write RemoveNumber(fjern, str)


JEg bliver nød til at tilføje at db strengen kan se sådan ud: ,1,4,6,7,8 eller 1,4,6,7,
Avatar billede mini-me Nybegynder
16. juni 2005 - 13:41 #13
Så blev der ro ,-)
Avatar billede mini-me Nybegynder
16. juni 2005 - 14:08 #14
Nu har jeg rettet mit script til så jeg er sikret at ouptut på mine strenge er 1,3,5,6 etc... så der ikke er et komma for meget osv...

cleanStr = rs("USers")
        fjern = trim(Request.Form("UserGroup"))
        fjern = replace(fjern," ","")
       
            arrNum = split(fjern, ",")
                for idx = 0 to ubound(arrnum)
                  cleanStr = replace(cleanStr,arrNum(idx) & ",","")
                next
            response.Write(cleanStr)

Det virker engentlig fint nok... den fjerne bare ikke lige den sidste...
Avatar billede mini-me Nybegynder
16. juni 2005 - 14:16 #15
SoftSpot, nu har jeg fået dit til at virke... problemet er bare at lad os antage jeg fjerne 5 ud af 10, så får jeg efter den sidste 5 kommaer!! hvordan undgår jeg dette??

                cleanStr = rs("USers")
        cleanStr = trim(cleanStr)
        cleanStr = replace(cleanStr," ","")
        fjern = trim(Request.Form("UserGroup"))
        fjern = replace(fjern," ","")
        response.Write("fjern:" & fjern & " : streng " & cleanStr)
       
       
            arrNum = split(fjern, ",")
                for idx = 0 to ubound(arrnum)
               
                  cleanStr = replace(cleanStr & ",", arrNum(idx) & ",", "")
                 
                next
           
            if len(cleanStr) = 1 then
                response.Write("streng er helt tom")
            else
                response.Write("Disse er tilbage," & cleanStr)
            end if
Avatar billede busschou Praktikant
16. juni 2005 - 14:30 #16
ksoren >> min kommentar var til din kommentar om at kalps ville fjerne 1 tal i 11 og 12 mm
Hvis man har en streng "1,2,12,11" og beder den replace "1" med "" så får man ",2,2,"
Hvis man i stedet beder replace "1," med "" så får man "2,12,11"
Så angående din kommentar 16/06-2005 13:25:44 så er jeg sikker ja ;o)
Avatar billede busschou Praktikant
16. juni 2005 - 14:41 #17
Hvis jeg skulle gøre det ville jeg gøre det slavisk og kedeligt, men overskuelig
---
<%
tekst = "10,4,2,6,2,1,6"
fjern = "4,5,2,3,6,3"
tekstArr = split(tekst,",")
fjernArr = split(fjern,",")
for i=0 to ubound(tekstArr)
  for j=0 to ubound(fjernArr)
    if tekstArr(i) = fjernArr(j) then
      exit for
    elseif j=ubound(fjernArr) then
      if i=0 then
        nyTekst = tekstArr(i)
      else
        nyTekst = nyTekst & "," & tekstArr(i)
      end if
    end if
  next
next
response.write nyTekst
%>
---
og det virker...hver gang :o)
Avatar billede busschou Praktikant
16. juni 2005 - 14:43 #18
ok hver og hver gang... kræver man tester på det rigtige...lol...sådan her..så er der de kommaer der skal være
---
<%
tekst = "1,3,6,10,14,15,17"
fjern = "1,6,10"
tekstArr = split(tekst,",")
fjernArr = split(fjern,",")
for i=0 to ubound(tekstArr)
  for j=0 to ubound(fjernArr)
    if tekstArr(i) = fjernArr(j) then
      exit for
    elseif j=ubound(fjernArr) then
      if nyTekst = "" then
        nyTekst = tekstArr(i)
      else
        nyTekst = nyTekst & "," & tekstArr(i)
      end if
    end if
  next
next
response.write nyTekst
%>
Avatar billede busschou Praktikant
16. juni 2005 - 14:45 #19
den tager jo så samtidig højde for om der er flere dubletter i såvel det ene array som det andet, samt at rækkefølgen er underordnet
Ulempen er køretiden som jo ses at være pæn høj dersom der kommer flere og flere elementer i ens streng, da den sammenligner på alt
Avatar billede mini-me Nybegynder
16. juni 2005 - 14:46 #20
busskov jeg tester lige.. ;)
Avatar billede mini-me Nybegynder
16. juni 2005 - 14:48 #21
det virker ikke da... den skriver bare hele strengen ud ;-)
Avatar billede mini-me Nybegynder
16. juni 2005 - 14:49 #22
´Min fejl det virker perfekt ;)
Avatar billede busschou Praktikant
16. juni 2005 - 14:57 #23
:o)
Avatar billede busschou Praktikant
16. juni 2005 - 14:58 #24
så ved jeg ikke hvem der fortjener points ;o)
Avatar billede mini-me Nybegynder
16. juni 2005 - 15:29 #25
hehe jeg fordeler lidt i mellem jer...
Avatar billede softspot Forsker
16. juni 2005 - 18:25 #26
Jeg er klar over at du er nået i mål, men jeg har lige lavet en udgave (som jeg også selv har testet :)), der burde efterlade en pæn streng. Den ser således ud:

function RemoveNumbers(strNumbers, strToBeRemoved)
  dim strRemoved
  strRemoved = strNumbers & ","

  arrNum = split(strToBeRemoved, ",")
       
  for idx = 0 to ubound(arrNum)
    strRemoved = Replace(strRemoved, arrNum(idx) & ",", "")
  next
       
  RemoveNumbers = left(strRemoved, len(strRemoved) - 1)
end function

Response.Write RemoveNumbers("1,2,3,4,5,6,7,8,9,10", "3,4,7,9")
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