17. februar 2004 - 00:22Der er
12 kommentarer og 1 løsning
Array udfordring til eksperterne
Heya,
jeg har en lille udfordring til de gode ASP-hajer her på Eksperten. Jeg har en form med 1 stk. <textarea> hvor jeg copy/paster noget data indi - for derefter at submitte det til en Access database. Her et eksempel på en stak data, der ryger ind i textareaen:
1 B. Iversholt Go 0 0 9 33% 0 13 0
12 W. Bresann De 0 0 2 50% 3 33% 0 2 28 C. Byrval De 0 0 10 50% 19 37% 0 9 4 C. Overup De 0 0 3 67% 7 43% 0 3
Bemærk: - Der kan opstå 2 mellemrum indimellem - Procenttallene bliver fjernet - Der kan være et par hele linjer, der skal fjernes
De 2 første punkter har jeg fået fikset vha. en Function der fjerner dobbelt-mellemrum og procenttallene. Men Punkt 3 kan jeg ikke lige hitte ud af at fjerne. I får lige koden til Functionen:
-- Function removeBad(orig) Dim clean(), cnt, i, j
' Tæl elementer uden et % tegn for i=0 to UBound(orig) Response.Write orig(i) & "<br>" If InStr(1, orig(i), "%") <= 0 Then cnt = cnt + 1 Next
' Lav et array til elementerne uden % tegnet ' og kopiér elementerne over i det nye array redim clean(cnt) j=0 for i=0 to UBound(orig) If InStr(1, orig(i), "%") <= 0 Then clean(j) = orig(i) j = j + 1 End If Next
' Returnér array'et removeBad = clean
End Function --
Jeg splitter arrayet med følgende kode:
-- rows = split(request.form("information"), vbCrLf) for i=0 to UBound(rows) cols = split(Replace(rows(i), " ", " "), " ") cols = removeBad(cols) 'Fjerner alle tal der indeholder et % tegn --
Men hvordan får jeg lige automatisk fjernet HELE linjer fra det pastede data?
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Altså, jeg paster en stak data ind i <textarea> men i og med at det er forskellige brugere, der skal gøre dette - skal de bare kunne copy/paste ind og så trykke på Submit. Derfor skal tomme linjer automatisk fjernes når man submitter formen - ligesom %-tallene osv.
Kriteriet er altså, at en linie skal fjernes, hvis den er tom. Vil det nemmeste så ikke være at sørge for først at erstatte alle sekvenser af mellemrum med et enkelt mellemrum. En blank linie er så karakteriseret ved at den indeholder et mellemrum eller er helt tom.
hvis variablen txt indholder den oprindelige information, så vil koden while instr(txt," ")>0 txt=replace(txt," "," ") wend erstatte alle sekvenser af to eller flewre mellemrum med et enkelt mellemrum. txt=replace(txt,VBCrLf & VBCrLf,VBCrLf) nu er alle tomme linier fjernet. txt=replace(txt,VBCr & " " & VBCrLf, VbCrLf) nu er alle linier med et enkelt mellemrum fjernet. Tilbage bliver så problemet med første linie og evt. sidste linie. Hvis txt starter med VBCrLf eller " " & VBCrLf skal txt kortes af i starten. Hvis den ender med VBCrLF eller VBCrLf & " " skal den kortes af i slutningen. Så vil du stå med en variabel txt, hvor alle tomme linier er fjernet, og du kan så splitte op i enkelte linier.
Jeg skriver lige koden til eventuelt at få kortet af i start og slutning: Hvis 1.linie er tom eller kun indholder et mellemrum skal den fjernes: if inStr(txt,VbCrLf)=1 then txt=Mid(txt,3) elseif inStr(txt," " & VBCrLf)=1 txt=Mid(txt,4) end if
Hvis sidste linie er tom eller kun indholder et mellemrum skal den fjernes: L=len(txt) if Mid(txt,L-1)=VBCrLf then txt=Left(txt,L-2) elseif Mid(txt,L-2)=VBCrLf & " " then txt=Left(txt,L-3) end if
(Jeg har ikke nået at teste dette, men er rimelig sikker på det virker)
Sådan: Her er en html-side med et tekstområde og en knap. Når du trykker på knappen vil alle sekvenser af mere end et mellemrum blive erstattet af et enkelt mellemrum, og alle tomme linier vil blive fjernet. Det er prosuduren rens, der gør det. Den skulle let kunne indpasse i din ASP-kode. I stedet for txt=tekst.value skal du så skrive txt=nav på den variabel, der indholder dine tekstdata. Hvis du gemmer nedenstående i en tekstfil, du kalder f.eks. test.htm, kan du teste ved at klikke på den.
<script language=VBscript> sub rens txt=tekst.value
while instr(txt," ")>0 txt=replace(txt," "," ") wend
while inStr(txt,VBCrLf &VBCrLf)>0 txt=replace(txt,VBCrLf & VBCrLf ,VbCrLf) wend
if inStr(txt,VbCrLf)=1 then txt=Mid(txt,3) elseif inStr(txt," " & VBCrLf)=1 then txt=Mid(txt,4) end if
L=len(txt) if Mid(txt,L-1)=VBCrLf then txt=Left(txt,L-2) elseif Mid(txt,L-2)=VBCrLf & " " then txt=Left(txt,L-3) end if tekst.value=txt end sub </script> <body> <textarea name=tekst cols=20 rows=20></textarea> <input type=button value="Rens" onClick="rens"> </body> </html>
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.