Avatar billede rane Nybegynder
17. februar 2004 - 00:22 Der 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?
Avatar billede nmh Nybegynder
17. februar 2004 - 00:29 #1
Hvad er kriteriet for at en hel linie skal fjernes?
Avatar billede rane Nybegynder
17. februar 2004 - 00:46 #2
Hvad mener du med kriteriet?

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.
Avatar billede nmh Nybegynder
17. februar 2004 - 01:05 #3
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.

HAr jeg forstået problemet rigtigt?
Avatar billede rane Nybegynder
17. februar 2004 - 01:17 #4
Jeps - prøver lige at teste det imorgen. Kan ikke sidde her mere i nat desværre :)  Takker - vender lige tilbage imorgen
Avatar billede nmh Nybegynder
17. februar 2004 - 01:35 #5
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)
Avatar billede rane Nybegynder
17. februar 2004 - 12:28 #6
Synes ikke rigtig jeg kan få det til at spille.  Har du ikke et forslag til, hvordan jeg får det indarbejdet i min originale kode?
Avatar billede nmh Nybegynder
17. februar 2004 - 13:14 #7
Der er et par småfejl i mit forslag. Du får et nyt sidst på eftermiddagen.
Avatar billede nmh Nybegynder
17. februar 2004 - 13:42 #8
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

  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>
Avatar billede nmh Nybegynder
17. februar 2004 - 13:44 #9
ups:
prosuduren-->proceduren nav-->navn
tilføj linien

<html>

aller øverst
Avatar billede rane Nybegynder
17. februar 2004 - 14:40 #10
Hmm...jeg får følgende fejl i din kode:

Error: Object required: 'tekst'

Selvom min <textarea> hedder tekst.
Avatar billede rane Nybegynder
17. februar 2004 - 14:53 #11
Ah never mind. Skulle bare lige tilføje formens navn 2 steder i din kode:

txt=formensnavn.tekst.value

Virker helt perfekt nu...fornemt! :)  Takker mange gange. Det er helt klart et 100pts svar værd hvis du lige laver et :)
Avatar billede nmh Nybegynder
17. februar 2004 - 16:41 #12
her er det. :o)
Avatar billede nmh Nybegynder
17. februar 2004 - 22:27 #13
Takker for point.
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