|
| Fjernelse af blank linjer Fra : MacMan |
Dato : 19-08-01 23:01 |
|
Hej,
Jeg har en række textareas hvor folk har tendens til at efterlade en masse
tomme linjer både før og efter det de skriver.
For at fjerne mellemrum bruges Trim(), men findes der også en smart måde at
fjerne tomme linjer på, og hvis ikke, hvordan gribes det så smartest an?
Altså:
---
Hej mor!
Hvordan går det?
---
Vil jeg gerne have trimmet til:
---
Hej mor!
Hvordan går det?
---
- Morten
| |
Jonas Astrup - html.~ (19-08-2001)
| Kommentar Fra : Jonas Astrup - html.~ |
Dato : 19-08-01 23:47 |
|
MacMan wrote in dk.edb.internet.webdesign.serverside.asp:
> hvordan gribes det så smartest an?
Der findes sikkert en smartere måde - men dette virker, og var det eneste min
hjerne kan præstere på nuværende tidspunkt:
arrTekst = Split(Request.Form("Tekst"),VbCrlf)
For i = 0 to Ubound(arrTekst)
If Len(Trim(arrTekst(i))) > 0 Then
strTekst = strTekst & arrTekst(i) & VbCrlf
End If
Next
Response.Write strTekst
Mvh
Jonas
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Niels Henriksen (20-08-2001)
| Kommentar Fra : Niels Henriksen |
Dato : 20-08-01 01:48 |
|
"MacMan" <nospam@nospam.com> wrote in message
news:B7A603C7.85EE%nospam@nospam.com...
> Hej,
>
> Jeg har en række textareas hvor folk har tendens til at efterlade en masse
> tomme linjer både før og efter det de skriver.
> For at fjerne mellemrum bruges Trim(), men findes der også en smart måde
at
> fjerne tomme linjer på, og hvis ikke, hvordan gribes det så smartest an?
>
Nu har jeg ikke lige testet det, men hvad med:
tekst = replace(tekst,vbCRLF & vbCRLF,"")
Altså erstatte alle steder hvor der er dobbelt vbCRLF med en tom streng..
--
Niels Henriksen
-------------------------------
Prøv chatten på www.biggs.dk
| |
Jonas Astrup - html.~ (20-08-2001)
| Kommentar Fra : Jonas Astrup - html.~ |
Dato : 20-08-01 09:42 |
|
Niels Henriksen wrote in dk.edb.internet.webdesign.serverside.asp:
> Altså erstatte alle steder hvor der er
> dobbelt vbCRLF med en tom streng..
Problemet er så bare at 2,4,6,8, etc. VbCrlf'ere bliver erstattet med 0 - og så
forsvinder linieskiftet helt.
Mvh
Jonas
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
MacMan (20-08-2001)
| Kommentar Fra : MacMan |
Dato : 20-08-01 11:28 |
|
I brevet "9lqifs$i6a$1@sunsite.dk" skrev Jonas Astrup - html.dk
(jonas.usenet@html.dk) den 20/08/01 10:41:
> Niels Henriksen wrote in dk.edb.internet.webdesign.serverside.asp:
>> Altså erstatte alle steder hvor der er
>> dobbelt vbCRLF med en tom streng..
>
> Problemet er så bare at 2,4,6,8, etc. VbCrlf'ere bliver erstattet med 0 - og
> så
> forsvinder linieskiftet helt.
Der er desværre ikke rigtig nogen af løsningerne der duer, for de fjerner
begge dobbelt (eller flere) mellemrum og det ønsker jeg ikke. I teksten man
tilføjer giver det fuldt ud mening af lave lidt god luft hist og pist, bare
ikke før og efter.
Så altså:
--
<- 2 linjers luft FØR tekst, IKKE ok.
<-
Hej mor
<- 2 linjers luft OK
<-
Hej sønnike
<- 2 linjers luft EFTER tekst, IKKE ok.
<-
--
Resultat:
--
Hej mor
<- 2 linjers luft OK
<-
Hej sønnike
--
- Morten
| |
MacMan (20-08-2001)
| Kommentar Fra : MacMan |
Dato : 20-08-01 12:09 |
|
Hejsa,
Okay, her er en løsning der virker, men den er riimelig voldsom synes jeg
nok:
<%
Function TrimVbCrLf(ByVal strTekst)
Dim arrTekst, arrTekstRev, i, intBefore, intAfter
arrTekst = Split(strTekst, vbCrlf)
arrTekstRev = Split(Replace(StrReverse(strTekst), Chr(10) & Chr(13),
Chr(13) & Chr(10)), vbCrlf)
For i = 0 to Ubound(arrTekst)
If Len(Trim(arrTekst(i))) = 0 Then
intBefore = intBefore + 1
Else
Exit For
End If
Next
For i = 0 to Ubound(arrTekstRev)
If Len(Trim(arrTekstRev(i))) = 0 Then
intAfter = intAfter + 1
Else
Exit For
End If
Next
strTekst = Right(strTekst, Len(strTekst) - (intBefore*2))
strTekst = Left(strTekst, Len(strTekst) - (intAfter*2))
TrimVbCrLf = Trim(strTekst)
End Function
%>
<%
Dim test
test = vbCrLf & vbCrLf & vbCrLf & vbCrLf & "Hej mor!" & vbCrLf & vbCrLf &
vbCrLf & "Hej sønnike!" & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
Response.Write "<PRE>---" & vbCrLf
Response.Write TrimVbCrLf(test)
Response.Write vbCrLf & "---</PRE>"
%>
| |
MacMan (20-08-2001)
| Kommentar Fra : MacMan |
Dato : 20-08-01 12:17 |
|
Og her er så lige en kommenteret udgave:
<%
Function TrimVbCrLf(ByVal strTekst)
'--- Det må ikke give fejl ved brug af Null.
If IsNull(strTekst) Then
TrimVbCrLf = ""
Exit Function
End If
'--- Erklær vars.
Dim arrTekst, arrTekstRev, i, intBefore, intAfter
'--- Del tekst op i array, del ved linjeskift.
arrTekst = Split(strTekst, vbCrlf)
arrTekstRev = Split(Replace(StrReverse(strTekst), Chr(10) & Chr(13),
Chr(13) & Chr(10)), vbCrlf)
'--- Tæl hvor mange linjeskift der er FØR vi støder på noget tekst.
For i = 0 to Ubound(arrTekst)
If Len(Trim(arrTekst(i))) = 0 Then
intBefore = intBefore + 1
Else
Exit For
End If
Next
'--- Tæl hvor mange linjeskift der er EFTER den sidste tekst.
For i = 0 to Ubound(arrTekstRev)
If Len(Trim(arrTekstRev(i))) = 0 Then
intAfter = intAfter + 1
Else
Exit For
End If
Next
'--- Fjern linjeskift FØR første stump tekst, dernæst dem EFTER sidste
stump tekst.
strTekst = Right(strTekst, Len(strTekst) - (intBefore*2))
strTekst = Left(strTekst, Len(strTekst) - (intAfter*2))
'--- Fjern eventuelle mellemrum rundt om teksten og returner.
TrimVbCrLf = Trim(strTekst)
End Function
%>
| |
Anders Holbøll (20-08-2001)
| Kommentar Fra : Anders Holbøll |
Dato : 20-08-01 14:29 |
|
MacMan wrote:
>
> Og her er så lige en kommenteret udgave:
Og her er så lige en lidt mindre resourcekrævende udgave:
Function TrimWs(ByVal Value)
Dim StartPos, EndPos, Length, Ch
Length = Len(Value)
StartPos = 1
EndPos = Length
If (Length > 0) Then
Ch = Mid(Value, StartPos, 1)
Do While (StartPos <= Length) And _
((Ch = " ") Or (Ch = vbTab) Or (Ch = vbCr) Or (Ch = vbLf))
StartPos = StartPos + 1
If (StartPos <= Length) Then Ch = Mid(Value, StartPos, 1)
Loop
Ch = Mid(Value, EndPos, 1)
Do While (EndPos >= StartPos) And _
((Ch = " ") Or (Ch = vbTab) Or (Ch = vbCr) Or (Ch = vbLf))
EndPos = EndPos - 1
If (EndPos >= StartPos) Then Ch = Mid(Value, EndPos, 1)
Loop
End If
If (StartPos > EndPos) Then
TrimWs = ""
ElseIf (StartPos > 1) Or (EndPos < Length) Then
TrimWs = Mid(Value, StartPos, EndPos - StartPos + 1)
Else
TrimWs = Value
End If
End Function
--
Anders
| |
|
|