Avatar billede hjaelp Nybegynder
31. oktober 2001 - 16:29 Der er 19 kommentarer og
1 løsning

Max 80 tegn , dog ikke <br>

Jeg her her på eksperten fundet denne kode, som deler teksten fra feltet historie op i linier på max 80 tegn.

strFelt = RS(\"Historie\")
iBreak = 80
myArray = Split(strFelt, \" \")
for i=Lbound(myArray) to Ubound(myArray)
if i = 0 Then
strLine = myArray(i)
end if
                           
if i = Ubound(myArray) Then
Response.Write strLine
exit for
end if

nyItem = \" \" + myArray(i+1)
if len(strLine & nyItem) >= iBreak Then
Response.Write strLine & \"<br>\"
strLine = myArray(i+1)
else
strLine = strLine & nyItem
end if
Next


Nu er problemet at jeg skal have flettet en lille feature ind i den kode.
Denne feature går ud på, at jeg i spm http://www.eksperten.dk/spm/127942 ,
fik en kode som kan oversætte \"Enter\" til <br>.
Det virker også fint, men den ovenstående kode tæller også<br> med i de 80 tegn,
så resultatet ser mystisk ud.

Er der en der kan hjælp med dette?


HJAELP!!!
Avatar billede nute Nybegynder
31. oktober 2001 - 16:42 #1
hvorfor teller du ikke opp 80 tegn, og deretter replacer alle linjeskift med <br> ??

Eventuelt, så kan du splitte ved den \"enter\" som ligger nærmest 80 tegn:

<%
str = \" din streng som inneholder en hel massse tegn og linjeskift og er *laaaaaang* og lengre enn 80 tegn\"
arr = new Array(1)

while( LEN( str >= 80 ) )
  splitIndex = InStrRev( str, vbCrLf, 80 )
    ReDim Preserve arr( UBOUND( arr ) + 1 )
    arr( UBOUND( arr ) ) = LEFT( str, splitIndex )
    str = MID( str, splitIndex + 1 )
wend
if( LEN( str > 0 ) ) then
  ReDim Preserve arr( UBOUND( arr ) + 1 )
    arr( UBOUND( arr ) ) = str
end if
%>

Nå skal du så ha en array med max 80 tegn ved hver index, og så kan du løpe dette array igjennom og replace hvert \"enter\" med <br>
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 16:54 #2
Vil du lige skære den up i pap for mig?

<%
RS.Open strSQL, objConn, 3, 1
str = RS(\"Historie\")
arr = new Array(1)

while( LEN( str >= 80 ) )
  splitIndex = InStrRev( str, vbCrLf, 80 )
    ReDim Preserve arr( UBOUND( arr ) + 1 )
    arr( UBOUND( arr ) ) = LEFT( str, splitIndex )
    str = MID( str, splitIndex + 1 )
wend
if( LEN( str > 0 ) ) then
  ReDim Preserve arr( UBOUND( arr ) + 1 )
    arr( UBOUND( arr ) ) = str
end if
%>

Her skal teksten stå...
Avatar billede nute Nybegynder
31. oktober 2001 - 17:07 #3
hov...jeg tror jeg har lest ditt spørmål litt galt :-|

bytt om denne linjen i din første posting:

strFelt = RS(\"Historie\")

om til denne:

strFelt = replace( RS(\"Historie\"), \"<br>\", vbcrlf )

/nute
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 17:21 #4
Ny ignorerer den bare alle <br>\'s
Vi er enige om at dette er den side,
hvor der læses fra database?
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 17:21 #5
Ny = Nu :-)
Avatar billede nute Nybegynder
31. oktober 2001 - 17:34 #6
oki....jeg er helt sikkert superforvirret. Jeg forstår ikke helt probemstillingen, men jeg prøver å oppsummere litt.

Du har en tekst som du henter fra en datbase, og denne inneholder lange tekster med linjeskrift representert som \'<br>\'. Det du ønsker, er å skrive denne tekst ut, men du vil kun skrive ut ca 80 tegn på hver linje ?! Har jeg forstått deg rett ?

*hvis* dette er hva du ønsker, så kan du prøve å skifte ut denne linje (i den koden jeg postet)

splitIndex = InStrRev( str, vbCrLf, 80 )

med denne:

splitIndex = InStrRev( str, \"<br>\", 80 )
´
JEg vet ikke om du har forstått hva min lille stump kode gjør, men det kan jeg så forklare :-)

Den starter på det 80. tegn og kikker \"nedover\" mot starten av strengen for å finne det siste linjeskift/det linjeskift som ligger tettest opp til 80. tegn. Deretter hentes alle tegn fra starten av strengen til linjeskiftet og legges inn i en array.

/nute
Avatar billede Slettet bruger
31. oktober 2001 - 17:35 #7
Hjaelp > Vil du have den til at lave et linje skift, uden at du bruger <br> eller vil du bare have den til at fortsætte på samme linje?
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 17:43 #8
Jeg prøver lige igen.

Jeg skal have værdien af feltet \"Historie\" (incl. <br>)), der ligger i en database udskrevet på min side med max 80 tegn pr. linie.

Hvis der er et <br> i linien, skal den ikke tælles med i de 80 tegn, der skal derimod laves en ny linie med 80 tegn.

Håber det hjalp.

HJAELP!!!
Avatar billede nute Nybegynder
31. oktober 2001 - 17:54 #9
oki...det hjalp *meget* :-)

så kommer det et lite tilleggs spørsmål:

Du skal skrive *hvert* linjeskift (<br>) ut. Hvis det kommer et linjeskift etter 20 tegn, så skal et linjeskift skrives ut. Så langt er vi enige ?! Hvis det så kommer et linjeskift etter 90 tegn, skal det så settes inn et linjeskift ved ca 80 tegn (fx ved nærmeste space) og deretter enda et linjeskift etter ca 10 linjer ?

Sånn som jeg har forstått det, så har du en tabell eller lignende du skal skrive ut til, og du skal ikke overstige ca 80 tegn i bredden...??

/nute
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 17:57 #10
Det er korrekt, ja

Hvis jeg nu bare kunne formulere mig ordentligt til at starte med, så ville det hele være meget lettere.
Avatar billede nute Nybegynder
31. oktober 2001 - 17:59 #11
nja....hvis jeg kunne forstå ditt spørsmål til å starte med, så hadde det også hjulpet .-)

jeg skriver noe til deg...

/nute
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 20:45 #12
Hvordan går det nute?
Avatar billede eagleeye Praktikant
31. oktober 2001 - 21:20 #13
Jeg har dette, måske det er noget du kan bruge:


inputStr = RS(\"Historie\")
maxCharPrLine = 80
charPrLine = 0
i = 1
outStr = \"\"
inputStr = replace (inputStr,\"<br>\",vbCrLf)
do while i <= len(inputStr)
  tempChar = mid(inputStr,i,1)
  charPrLine = charPrLine + 1
  outStr = outStr & tempChar \'læg tegn til
  if (tempChar = vbCr) OR (tempChar = vbLf) OR (tempChar = vbCrLf) OR (charPrLine >= maxCharPrLine) then
    if (charPrLine >= maxCharPrLine) then  \'Kom ind pga max længde pr line
      if tempChar = \" \" then
        outStr = outStr & vbCrLf
      else
        insertIndex = inStrRev(outStr,\" \")
        if insertIndex > 0 then
          outStr = Mid(outStr,1,insertIndex) & vbCrLf & Mid(outStr,insertIndex+1)
        else
          outStr = outStr & \"-\" & vbCrLf
        end if
      end if
    end if
    charPrLine = 0
  end if
  i = i + 1
loop
outStr = replace (outStr, vbCrLf, \"<br>\")
Response.Write outStr
Avatar billede nute Nybegynder
31. oktober 2001 - 21:30 #14
hjaelp >> joda, jeg er her...

jeg har vært nødt til å arbeide, så jeg kunne ikke poste noe, beklager. Når jeg så begynte å kode, så har jeg kjørt meg fullstendig fast med å skrive en rekursiv metode. Denne *vil* bare ikke fungere, og jeg kan bare ikke fatte hvorfor :-((

Heldigvis (for deg :-) ) hadde eagleeye en liten luring på lager...den fungerer jo fremragende ... Mye kan tyde på at min ide om en rekursiv løsning ikke var så smart :-(

anyway...jeg var tett på å gi opp, så jeg ble faktisk glad da eagleeye dukket opp og løste problemet....takk eagleeye :)

/nute
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 21:55 #15
Jep, der var den.
Tak
Avatar billede hjaelp Nybegynder
31. oktober 2001 - 21:57 #16
nute
Tak for indsatsen.

HAJELP!!!
Avatar billede nute Nybegynder
31. oktober 2001 - 21:58 #17
det var så lidt :-)
Avatar billede eagleeye Praktikant
31. oktober 2001 - 21:59 #18
Den første løber hele strengen igennem karakter for karakter.

En anden metode er denne:
Denne benytter instrRev til enten at finde mellemrun (\" \") eller return (vbCrLf) og så kopier fra starten til \" \" eller vbCrLf.


inputStr = RS(\"Historie\")
ConstmaxCharPrLine = 80
charPrLine = 0
outStr = \"\"
inputStr = replace (inputStr,\"<br>\", vbCrLf)
do while len(inputStr) > 0
  if len(inputStr)>maxCharPrLine then
    maxCharPrLine = ConstmaxCharPrLine
  else
    maxCharPrLine = len(inputStr)
  end if
  indexBR = inStrRev(inputStr, Chr(10),maxCharPrLine,0)
  if indexBR = 0 then
    if ConstmaxCharPrLine = maxCharPrLine then
      indexBR = inStrRev(inputStr,\" \",maxCharPrLine)
      outStr = outStr & mid(inputStr,1,indexBR) & vbCrLf
    else
      outStr = outStr & inputStr
      indexBR = maxCharPrLine
    end if
  else
    outStr = outStr & mid(inputStr,1,indexBR)
  end if
  inputStr = mid(inputStr,indexBR+1)
loop
outStr = replace (outStr, vbCrLf, \"<br>\")
Response.Write outStr
Avatar billede eagleeye Praktikant
31. oktober 2001 - 22:02 #19
Nute>> jeg har lige prøvet det du viste 16:42:07.

Jeg har rettet det lidt til det var da ganske smart :)

inputStr = RS(\"Historie\")
reDim  arr(0)
str = replace(inputStr,\"<br>\",vbCrLf)
while (LEN(str)>0)
  splitIndex = InStrRev(str, vbCrLf, 80)
  if splitIndex = 0 then
    splitIndex = InStrRev(str, \" \", 80)
    if splitIndex = 0 then splitIndex = LEN(str)
  end if 
  ReDim Preserve arr(UBOUND(arr) + 1)
  arr(UBOUND(arr)) = LEFT(str, splitIndex)
  str = MID(str, splitIndex + 1)
wend
outStr = \"\"
for i = LBound(arr) to UBound(arr)
  outStr = outStr & arr(i) & vbCrLf
next
outStr = replace (outStr, vbCrLf, \"<br>\")
Response.Write outStr
Avatar billede nute Nybegynder
31. oktober 2001 - 22:11 #20
eagleeye >> jeg hadde faktisk ikke testet det script, men jeg kan nå se at ideen fungerer jo faktisk :-) det ble bare skrevet inn i min browser, men ser at det var noen skumle feil ... :-| Men jeg fikk iallefall vist hva jeg hadde i tankene...

/nute
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