Avatar billede loss Nybegynder
18. august 2003 - 15:25 Der er 14 kommentarer og
1 løsning

Splitte en streng op i x antal dele?

Hej.

Jeg har en streng som indeholder et output fra en database. Strengen kan indeholde Html tags, og kan have variende længde.

Jeg ønsker at kunne splitte denne streng op i x antal dele afhænging af længden af strengen, således at jeg kan lave en slags paging.

Men, der må ikke splittes midt i et html tag!!

Er der nogen derude der kan hjælpe med det ?

På forhånd Tak

//Loss
Avatar billede kirkholt Nybegynder
19. august 2003 - 09:47 #1
Brug inStrRev til at søge baglæns efter "<" og ">" i forhold til det ideelle sted at dele.

Hvis positionen af "<" er større end positionen af ">" står du midt i en HTML-tag. I så fald kan du dele strengen ved positionen af ">" + 1
Avatar billede loss Nybegynder
19. august 2003 - 15:00 #2
Du kunne vel ikke være så flink at fyre et kode eksempel af ? :)

Hvis man forestillede sig at hvergang der havde været 500 tegn, så skulle strengen brydes der (uden for html selvfølgelig).
Avatar billede socle Nybegynder
19. august 2003 - 22:57 #3
vil du beholde html formateringen selv om der splittes midt i en <b> tag f.eks?

altså at <b>flere ord her skrevet</b>
splittes i <b>flere ord</b> ; <b>her skrevet</b>

eller må der godt splittes i <b>flere ord ; her skrevet</b> ?
Avatar billede loss Nybegynder
21. august 2003 - 16:36 #4
Har lige været væk siden igår.. sorry.

Ja jeg kom selv til at tænke på samme problem.. Der skulle helst ikke kunne splittes mellem <> og </> som <b> og <a> fx.. Det vil ikke betyde så meget ved et <b> men et link kunne go godt begynde at drille så..

Kan det lade sig gøre.
Avatar billede kirkholt Nybegynder
22. august 2003 - 08:07 #5
Nu begynder det at blive sværere, specielt fordi det ikke er alle tags der skal adsluttes f.eks. <P>

Hvor er det egentlig du har behov for at dele strengen ?
Avatar billede loss Nybegynder
22. august 2003 - 09:43 #6
Hej.

Det er fordi jeg har et cms system hvor, kunden kan skrive artikler ind. Hvor han kan indsætte billeder,links osv. Disse artikler skal så alt efter deres længde opdeles i flere afsnit, så der kan oprettes en slags paging.

Så brugeren ikke skal læse en lang smøre.
Avatar billede kirkholt Nybegynder
22. august 2003 - 10:46 #7
Som sagt vanskeliggøres opgaven af at det ikke er alle tags der skal afsluttes.
Da man samtidig kan have flere sæt tags inde i hinanden bliver det meget svært at dele det rigtige sted.

Kan man ikke forestille sig at brugeren selv indsætter et selvopfundet tag for sideskift?
Man kunne evt kontrollere at dette tag findes for min. hver 500 tegn.
Avatar billede loss Nybegynder
22. august 2003 - 10:49 #8
Jo jeg havde osse selv tænkt på noget lign. Og det ser ikke ud il at det kan løses helt nemt per automatik.

Så det kan være det bliver løsningen... Men er der nogle der har en løsning, må de endelig sige til.

//loss
Avatar billede loss Nybegynder
29. august 2003 - 10:03 #9
hej igen.

Hvis vi nu siger at brugeren har mulighed for, ved at klikke på et ikon, at indsætte et break i teksten "<dobreak>". Brugeren har mulighed for at indsætte x antal breaks.

Hvordan får jeg så opdelt udtrækket i x antal dele, og generet links til x antal sider (side 1, side 2 osv).
Avatar billede loss Nybegynder
29. august 2003 - 10:05 #10
lytter lige selv med :)

(glemte afkrydse email)
Avatar billede kirkholt Nybegynder
29. august 2003 - 10:42 #11
her er lidt pseodu-code:

Const BREAK = "<dobreak>"

Function BreakCount (strTekst)
  dim n
  dim start
  dom pos
 
  n = 0

  if strTekst > "" then
    start = 1
    pos  = instr(start,strTekst,BREAK,1)
    while pos > 0
      n = n + 1
      start = pos + 1 + len(BREAK) ' søg igen efter BEAK
      pos  = instr(start,strTekst,BREAK,1)
    wend
  end if
  BreakCount = n
end function

Function GetPage (pageNum, strTekst )
  dim n
  dim startPos
  dim slutPos
  dim strReturn

  for n = 1 to PageNum
    slutpos  = instr(startPos,strTekst,BREAK,1)
    if slutpos = 0 then
      slutpos = len(strTekst)
    end if
    strReturn = mid(strTekst,startpos, slutpos - startpos)
    startPos = slutPos + 1 + len(BREAK)
  next 'n
  GetPage = strReturn
end function
   

    while pos > 0
      n = n + 1
      start = pos + 1 + len(BREAK) ' søg igen efter BEAK
      pos  = instr(start,strTekst,BREAK,1)
    wend
  end if
  BreakCount = n



end Function
Avatar billede kirkholt Nybegynder
29. august 2003 - 10:43 #12
Ups' de sidste 8 linier skulle ikke med
NB. koden er IKKE testet
Avatar billede loss Nybegynder
29. august 2003 - 10:46 #13
kigger lige på det lidt senere, og så må vi se om jeg vender tilbage :)
Avatar billede loss Nybegynder
29. august 2003 - 12:33 #14
Helt kanon.. Så kører det som det skal... Valgte dog lige at bruge et <hr name="dobreak"> istedet for, så kan brugeren selv tydeligt se skiftet inde i editoren.

Her er koden som den endte med at være :)

Const BREAK = "<hr name=""dobreak"">"
   
    Function BreakCount (strTekst)
      dim n
      dim start
      dim pos
     
      n = 0
   
      if strTekst <> "" then
        start = 1
        pos  = instr(start,strTekst,BREAK,1)
        while pos > 0
          n = n + 1
              start = pos + len(BREAK) ' søg igen efter BEAK
          pos  = instr(start,strTekst,BREAK,1)
        wend
      end if
      BreakCount = n
    end function

    Function GetPage (pageNum, strTekst)
      dim n
      dim startPos
      startPos = pageNum
      dim slutPos
      dim strReturn

      for n = 1 to PageNum
        slutpos  = instr(startPos,strTekst,BREAK,1)
        if slutpos = 0 then
          slutpos = len(strTekst)
        end if
        strReturn = mid(strTekst,startpos, slutpos - startpos)
        startPos = slutPos + len(BREAK)
      next 'n
      GetPage = strReturn
    end function
       
        If isNull(strTekst) then
        Response.Write(" ")
        Else
        RESPONSE.WRITE GetPage(page, strTekst)
        End If
        RESPONSE.WRITE "</td></tr>"
        RESPONSE.WRITE "<tr><td style='padding-top:10px'><p>"
        for n = 1 to int(Breakcount(strTekst)+1)
        RESPONSE.WRITE "<a href='artikler.asp?mode=detail&p_id="&ID&"&a_id="&a_id&"&page="&n&"'>[side "&n&"]&nbsp;</a>"
      next 'n
        RESPONSE.WRITE "</p>"
        RESPONSE.WRITE "</td></tr>"
Avatar billede loss Nybegynder
29. august 2003 - 12:33 #15
Og mange tak for hjælpen!!!!!! her er dine fortjente points...
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