WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Numrera rader med regexp (https://www.wn.se/forum/showthread.php?t=25967)

Ungdebatt 2008-01-02 20:34

Hej.

Säg att jag har en text i databasen som ser ut på detta vis:

--------------------------------------------------------------
Jag heter Jeppe och jag kan äta en apelsin på
fem sekunder. Jag kan även dricka fem liter mjölk
på mindre än en halv sekund. Vad kan du göra?
--------------------------------------------------------------

Det jag vill göra är att när jag skriver ut texten på min sida så ska den med hjälp av regexp numrera raderna, ungefär såhär:

--------------------------------------------------------------
1. Jag heter Jeppe och jag kan äta en apelsin på
2. fem sekunder. Jag kan även dricka fem liter mjölk
3. på mindre än en halv sekund. Vad kan du göra?
--------------------------------------------------------------

Jag har testat mig fram på några vägar, men det gick inte så bra. Skulle ni kunna hjälpa med det problemet?

Tack på förhand.

Björklund 2008-01-02 21:25

En loop kanske?
Loopa igenom databasen och ändra ^ till värde X.

martine 2008-01-02 21:27

Vad har du för kriterier för radindelningen?

Ska varje rad var tio ord lång, ett visst antal bokstäver eller en viss optisk längd med ett bestämt typsnitt?

Du får nog precisera lite mer.

Lundmark 2008-01-02 21:53

....eller har varje rad en radbrytning (/n)?

Ungdebatt 2008-01-02 22:17

Jag har testat med följande kod, men mina RegExp kunskaper är tydligen inte tillräckliga. Jag har testat med att bryta ut \r \n och \s

Kod:

strText = "texten här som ska bearbetas"

With New RegExp
IgnoreCase = TRUE
.Global = TRUE
.Pattern = "(\n|\r|)"
Set objMatches = .Execute(strText)

strResult = ""
lngPos = 1

For Each objMatch In objMatches
 If objMatch.FirstIndex > lngPos Then
  strResult = strResult & Mid(strText, lngPos, objMatch.FirstIndex - lngPos + 1)
  inti = inti + 1
 End If

 strFound = inti & objMatch & "<br />"
 strResult = strResult & strFound
 lngPos = objMatch.FirstIndex + objMatch.Length + 1
Next
         
strNewText = strResult & Mid(strResult, lngPos)

End With

EDIT:
@martine
#1. Den ska reagera på radbrytning, vbcrlf, då skapar den en ny rad
#2. Den ska reagera på ifall en rad är längre än t.ex. 800 tecken, då gör den en ny rad.

eliasson 2008-01-03 23:50

Ptja, jag kan då inte ASP men med PHP så kan du alltid använda explode() på "\n" och sedan foreach'a det.

Ungdebatt 2008-01-05 23:22

eliasson, kan du vara snäll och visa ett kodexempel?

gsoc 2008-01-05 23:28

Kod:

$text = explode("\n", $filinnehall);
for($i = 0; $i < count($text); $i++){
echo "$i. Här gör vi nått med $text[$i]\n";
}


Ungdebatt 2008-01-06 00:25

Tack, jag kan ingen PHP, men jag får nog googla lite efter hjälp för att kunna "översätta" koden, det om ingen här kan hjälpa mig med det förståss.

Tack för hjälpen.

tartareandesire 2008-01-06 07:10

Den funktion i ASP som motsvarar PHP:s Explode heter Split.


Alla tider är GMT +2. Klockan är nu 19:21.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson