Avatar billede Slettet bruger
19. juli 2007 - 18:10 Der er 15 kommentarer og
1 løsning

Fjern dubletter i streng

Jeg henter en masse bruger id's ud af min db og gemmer dem i en streng, en streng kunne se sådan ud:

1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8

Hvordan kan jeg fjerne alle dubletter, så hvert tal kun findes en gang i listen?
Det er ikke nødvendigt med sortering.
Avatar billede kalp Novice
19. juli 2007 - 18:18 #1
prøv denne funktion

<%
function removeDuplicateWords(keyWords)%><%
removeDuplicateWords=""
tmp=split(keyWords,",")%><%keyWd=""
for c=lbound(tmp) to ubound(tmp)
  if inStr(lCase(keyWd),lCase(tmp(c)))=false then
  if keyWd<>"" then keyWd=keyWd&" "%><%keyWd=keyWd&tmp(c)
  end if
next%><%if keyWd<>"" then removeDuplicateWords=trim(keyWd)
end function

%>
Avatar billede Slettet bruger
19. juli 2007 - 18:54 #2
Kan ikke få den til at virke, den udskriver ingenting og den kommer ikke med nogen fejl.
Avatar billede cpufan Juniormester
19. juli 2007 - 19:09 #3
du kan rette din sql, som du bruger til at hente id ud af db

Select DISTINCT eteller andet

distinct betyder kun en af hver
Avatar billede kalp Novice
19. juli 2007 - 19:52 #4
kan desværre ikke teste selv.. ellers kunne jeg se om den virkede..

det er mere hvis der er lidt syntax bugs.. f.eks kun bruge en = og ikke == ved sammenligning..

men ideen er her..

DIM parts, line, newLine, found
DIM usedParts()
Dim curRecords, counter

line = 1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8;
newLine = ""
parts = Split(line,",")

found = "false";

counter = 0;
For Each x in parts
if !IsEmpty(x) then
For Each y in usedParts
  if y == x then
  found = "true"
  end if
Next
 
if found == "false" then
  newLine = newLine + x  " & ","
  counter++
  CurRecords=uBound(usedParts)
REDIM PRESERVE usedParts(CurRecords+1)
usedParts(counter) = x
end if

end if
found = "false"
Next

line = newLine
Avatar billede kalp Novice
19. juli 2007 - 20:16 #5
fik mulighed for at teste:)

det her er meget tættere!!

skal bare lige have den til at fjerne det sidste ,


<%

DIM parts, line, newLine, found
DIM usedParts()
Dim CurRecords, counter

line = "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8"
newLine = ""
parts = Split(line,",")

found = "false"
REDIM usedParts(1)
counter = 0
For Each x in parts

found = "false"

For Each y in usedParts
  if y = x then
    found = "true"
  end if
Next
 
if found = "false" then
  newLine = newLine + x  & ","
  CurRecords = uBound(usedParts)
REDIM PRESERVE usedParts(CurRecords+1)
usedParts(counter) = x
counter = counter + 1
end if

Next

line = newLine
response.write(line)

%>
Avatar billede kalp Novice
19. juli 2007 - 20:20 #6
Here you go



<%

DIM parts, line, newLine, found
DIM usedParts()
Dim CurRecords, counter

line = "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8"
newLine = ""
parts = Split(line,",")

found = "false"
REDIM usedParts(1)
counter = 0
For Each x in parts

found = "false"

For Each y in usedParts
  if y = x then
    found = "true"
  end if
Next
 
if found = "false" then
  newLine = newLine + x  & ","
  CurRecords = uBound(usedParts)
REDIM PRESERVE usedParts(CurRecords+1)
usedParts(counter) = x
counter = counter + 1
end if

Next

line = Left(newLine,LEN(newLine)-1)
response.write(line)

%>
Avatar billede bauerdata Nybegynder
19. juli 2007 - 20:55 #7
# i Python
y={}
line = "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8"
for x in line.split( "," ):
  y[ x ] = 1
print ",".join( y.keys() )
# Python er nemt , python er sjovt
Avatar billede erikjacobsen Ekspert
19. juli 2007 - 21:32 #8
line = "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8"
a = Split(line,",")
Set d = Server.CreateObject("Scripting.Dictionary")
For Each x In a
  If Not d.exists(x) then
    d.Add x,1
  End If
Next
Response.write Join(d.Keys,",")
Avatar billede kalp Novice
19. juli 2007 - 21:49 #9
python ? hvad er det for en ged? ;P

.NET ... dog utested, men den burde være temmelig tæt

static string crazyKalp(string line)
{
            if (line.ToCharArray().Length == 0) return string.Empty;
            char spotOne = line.ToCharArray()[0];
            return spotOne.ToString() + "," + crazyKalp(line.Replace(spotOne.ToString(),"").Replace(",",""));
}
Avatar billede Slettet bruger
19. juli 2007 - 22:48 #10
Jeg endte med at bruge erikjacobsen's kode, da den er noget kortere end kalp's (den virker dog også helt som den skal), så jeg vil dele point mellem jer.

Men mange tak for hjælpen alle sammen. Og erikjacobsen læg et svar så jeg kan give jer point :)
Avatar billede erikjacobsen Ekspert
19. juli 2007 - 22:50 #11
Jeg samler slet ikke på point, tak.
Avatar billede bauerdata Nybegynder
20. juli 2007 - 00:07 #12
>>>erikjacobsen
#python
import sets
line = "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8"
print ",".join( sets.Set( line.split( "," ) ) )
Avatar billede fennec Nybegynder
20. juli 2007 - 09:07 #13
bauerdata >>
Hvor mange gange skal du lige have at vide at python ikke kan bruges til noget som helst i ASP?? Vil du bare ikke fatte det??

Om ikke andet har jeg nu anmeldt dig for at overtræde §2.1.8 "Det er ikke tilladt at spamme, flame eller skrive indlæg uden relevans for det aktuelle spørgsmål"
http://www.eksperten.dk/regler.phtml

Tror du virkelig at folk vil lære et nyt sprog og omskrive HELE deres eksisterende kode, bare for at løse et lille problem, som sagtens kan klares i det sprog de allerede kender??
Avatar billede Slettet bruger
20. juli 2007 - 15:49 #14
erikjacobsen >>> Okay, så får kalp'en bare alle points. Men et tak samler du vel på ;)
Avatar billede kalp Novice
20. juli 2007 - 16:04 #15
gizmo2000 >> du kan også tage de 100point selv:)
Avatar billede spradebassen Nybegynder
28. juli 2007 - 09:14 #16
bauerdata >> http://support.microsoft.com/kb/276494
for at dine python script skal virke på asp
skal du enten installere python eller activestate python
se linket.
Når det er gjort vil dine scripts køre hvis du gør såden her.

<@LANGUAGE Python%>
<html>
<head></head>
<body>
<h1> http:www.eksperten.dk/spm/788190<h1>
<%
import sets
line = "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8"
Response.write( ",".join( sets.Set( line.split( "," ) ) ) )
%>
</body>
</html>
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

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