2010-09-27 7 views
8

Ich versuche, Ellipsen in Umbraco zu implementieren, die Anforderung ist 15 Zeichen von Intro Text, aber immer auf ein ganzes Wort endet.Ellipse mit C# (endet mit einem ganzen Wort)

Ich dachte über die Verwendung von XSLT, aber dann erkannte ich, dass ich stattdessen eine einfache Erweiterungs-Methode in C# geschrieben verwenden kann.

Ich kann den Text leicht String und fügen Sie „...“ aber ich bin mit dem Thema stecken es mit einem vollen Wort zu Ende .. Hier ist mein Code so weit (sehr kompliziert: p)

public string Ellipsis(string text, int length) 
{ 
    return text.Substring(0, length) + "..."; 
} 

Beispieltext

Lorem ipsum dolor sit amet, amet consectetur adipiscing elit.

Wenn wir implementiert die Auslassungs oben beschriebene Methode (Länge = 15), die Ausgabe wie

Lorem ipsum dolor sit amet aussehen würde, amet consectetur adipi ...

Ich möchte sicherstellen, dass kein Wort jemals in Scheiben geschnitten wird, so sollte die Ausgabe wie folgt aussehen:

Lorem ipsum dolor sit amet, amet consectetur adipiscing ...

Jede Hilfe sehr geschätzt.

EDIT

Nachdem die Probe für den nachfolgenden Code ausgeführt wird, scheint es, dass, wenn die Auslassungslänge auf dem letzten Wort endet, wird kein Text überhaupt angezeigt.

Hier ist der Ausgang, siehe Zeile 56-60

0 : Lorem... 
1 : Lorem... 
2 : Lorem... 
3 : Lorem... 
4 : Lorem... 
5 : Lorem... 
6 : Lorem ipsum... 
7 : Lorem ipsum... 
8 : Lorem ipsum... 
9 : Lorem ipsum... 
10 : Lorem ipsum... 
11 : Lorem ipsum... 
12 : Lorem ipsum dolor... 
13 : Lorem ipsum dolor... 
14 : Lorem ipsum dolor... 
15 : Lorem ipsum dolor... 
16 : Lorem ipsum dolor... 
17 : Lorem ipsum dolor... 
18 : Lorem ipsum dolor sit... 
19 : Lorem ipsum dolor sit... 
20 : Lorem ipsum dolor sit... 
21 : Lorem ipsum dolor sit... 
22 : Lorem ipsum dolor sit amet,... 
23 : Lorem ipsum dolor sit amet,... 
24 : Lorem ipsum dolor sit amet,... 
25 : Lorem ipsum dolor sit amet,... 
26 : Lorem ipsum dolor sit amet,... 
27 : Lorem ipsum dolor sit amet,... 
28 : Lorem ipsum dolor sit amet, amet... 
29 : Lorem ipsum dolor sit amet, amet... 
30 : Lorem ipsum dolor sit amet, amet... 
31 : Lorem ipsum dolor sit amet, amet... 
32 : Lorem ipsum dolor sit amet, amet... 
33 : Lorem ipsum dolor sit amet, amet consectetur... 
34 : Lorem ipsum dolor sit amet, amet consectetur... 
35 : Lorem ipsum dolor sit amet, amet consectetur... 
36 : Lorem ipsum dolor sit amet, amet consectetur... 
37 : Lorem ipsum dolor sit amet, amet consectetur... 
38 : Lorem ipsum dolor sit amet, amet consectetur... 
39 : Lorem ipsum dolor sit amet, amet consectetur... 
40 : Lorem ipsum dolor sit amet, amet consectetur... 
41 : Lorem ipsum dolor sit amet, amet consectetur... 
42 : Lorem ipsum dolor sit amet, amet consectetur... 
43 : Lorem ipsum dolor sit amet, amet consectetur... 
44 : Lorem ipsum dolor sit amet, amet consectetur... 
45 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
46 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
47 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
48 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
49 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
50 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
51 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
52 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
53 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
54 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
55 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
56 : ... 
57 : ... 
58 : ... 
59 : ... 
60 : ... 
61 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
62 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
63 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
64 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
65 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
66 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
67 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
68 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
69 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
70 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
71 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
72 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
73 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
74 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
75 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
76 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
77 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
78 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
79 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 

Marko

+0

Sie den Ellipsen-Charakter ... statt drei Punkte – Dann

Antwort

19
if (text.Length <= length) return text; 
int pos = text.IndexOf(" ", length) ; 
if (pos >= 0) 
    return text.Substring(0, pos) + "..."; 
return text; 

Edit: Das ist das Programm, das ich es getestet mit:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 { 
    class Program { 
     static void Main(string[] args) { 
      for (int i = 0; i < 40; ++i) { 
       string s = Ellipsis("Lorem ipsum dolor sit amet, amet consectetur adipiscing elit.", i); 
       Console.WriteLine("{0} : {1}", i, s); 
      } 
     } 

     static public string Ellipsis(string text, int length) { 
      if (text.Length <= length) return text; 
      int pos = text.IndexOf(" ", length) ; 
      if (pos >= 0) 
      return text.Substring(0, pos) + "..."; 
      return text; 
     } 
    } 
} 

Hier Ausgabe:

0 : Lorem... 
1 : Lorem... 
2 : Lorem... 
3 : Lorem... 
4 : Lorem... 
5 : Lorem... 
6 : Lorem ipsum... 
7 : Lorem ipsum... 
8 : Lorem ipsum... 
9 : Lorem ipsum... 
10 : Lorem ipsum... 
11 : Lorem ipsum... 
12 : Lorem ipsum dolor... 
13 : Lorem ipsum dolor... 
14 : Lorem ipsum dolor... 
15 : Lorem ipsum dolor... 
16 : Lorem ipsum dolor... 
17 : Lorem ipsum dolor... 
18 : Lorem ipsum dolor sit... 
19 : Lorem ipsum dolor sit... 
20 : Lorem ipsum dolor sit... 
21 : Lorem ipsum dolor sit... 
22 : Lorem ipsum dolor sit amet,... 
23 : Lorem ipsum dolor sit amet,... 
24 : Lorem ipsum dolor sit amet,... 
25 : Lorem ipsum dolor sit amet,... 
26 : Lorem ipsum dolor sit amet,... 
27 : Lorem ipsum dolor sit amet,... 
28 : Lorem ipsum dolor sit amet, amet... 
29 : Lorem ipsum dolor sit amet, amet... 
30 : Lorem ipsum dolor sit amet, amet... 
31 : Lorem ipsum dolor sit amet, amet... 
32 : Lorem ipsum dolor sit amet, amet... 
33 : Lorem ipsum dolor sit amet, amet consectetur... 
34 : Lorem ipsum dolor sit amet, amet consectetur... 
35 : Lorem ipsum dolor sit amet, amet consectetur... 
36 : Lorem ipsum dolor sit amet, amet consectetur... 
37 : Lorem ipsum dolor sit amet, amet consectetur... 
38 : Lorem ipsum dolor sit amet, amet consectetur... 
39 : Lorem ipsum dolor sit amet, amet consectetur... 
+0

Hallo @Preet, das es ** nur gibt nicht wirklich nutzen sollten nicht funktionieren '...' ** Wenn ich debuggen, Die ** pos ** Variable ist -2. – Marko

+0

Sorry ich habe es ohne Compiler handlich gemacht, habe es jetzt korrigiert –

+0

Viel besser! Danke Mitkiwi :) – Marko

3

Ich möchte eine alternative Implementierung geben, da der von Preet angegebene Code keine maximale Textlänge garantiert. Ich musste eine Wort-Ellipsen-Funktion implementieren, die ein hartes Längen-begrenztes Textwort-Ellipsen-Trimmen zurückgibt. Zusätzlich werden Satzzeichen auch kurz vor der Ellipse abgeschnitten.

public class WordProcessing 
{ 
    static public string WordEllipsis(string text, int maxLength, string ellipsis = "...") 
    { 
     string result; 

     if (text.Length <= maxLength) 
     { 
      result = text; 
     } 
     else if (maxLength <= ellipsis.Length) 
     { 
      result = ellipsis.Substring(0, maxLength); 
     } 
     else 
     { 
      result = text.Substring(0, maxLength - ellipsis.Length); 
      var lastWordPosition = result.LastIndexOf(' '); 

      if (lastWordPosition < 0) 
      { 
       lastWordPosition = 0; 
      } 
      result = result.Substring(0, lastWordPosition).Trim(new[] { '.', ',', '!', '?' }) + ellipsis; 
     } 

     return result; 
    } 
} 

Einheit getestet - wirkt wie ein Charme.

Ausgang:

0 : 
1 : . 
2 : .. 
3 : ... 
4 : ... 
5 : ... 
6 : ... 
7 : ... 
8 : ... 
9 : Lorem... 
10 : Lorem... 
11 : Lorem... 
12 : Lorem... 
13 : Lorem... 
14 : Lorem... 
15 : Lorem ipsum... 
16 : Lorem ipsum... 
17 : Lorem ipsum... 
18 : Lorem ipsum... 
19 : Lorem ipsum... 
20 : Lorem ipsum... 
21 : Lorem ipsum dolor... 
22 : Lorem ipsum dolor... 
23 : Lorem ipsum dolor... 
24 : Lorem ipsum dolor... 
25 : Lorem ipsum dolor sit... 
26 : Lorem ipsum dolor sit... 
27 : Lorem ipsum dolor sit... 
28 : Lorem ipsum dolor sit... 
29 : Lorem ipsum dolor sit... 
30 : Lorem ipsum dolor sit... 
31 : Lorem ipsum dolor sit amet... 
32 : Lorem ipsum dolor sit amet... 
33 : Lorem ipsum dolor sit amet... 
34 : Lorem ipsum dolor sit amet... 
35 : Lorem ipsum dolor sit amet... 
36 : Lorem ipsum dolor sit amet, amet... 
37 : Lorem ipsum dolor sit amet, amet... 
38 : Lorem ipsum dolor sit amet, amet... 
39 : Lorem ipsum dolor sit amet, amet... 
40 : Lorem ipsum dolor sit amet, amet... 
41 : Lorem ipsum dolor sit amet, amet... 
42 : Lorem ipsum dolor sit amet, amet... 
43 : Lorem ipsum dolor sit amet, amet... 
44 : Lorem ipsum dolor sit amet, amet... 
45 : Lorem ipsum dolor sit amet, amet... 
46 : Lorem ipsum dolor sit amet, amet... 
47 : Lorem ipsum dolor sit amet, amet... 
48 : Lorem ipsum dolor sit amet, amet consectetur... 
49 : Lorem ipsum dolor sit amet, amet consectetur... 
50 : Lorem ipsum dolor sit amet, amet consectetur... 
51 : Lorem ipsum dolor sit amet, amet consectetur... 
52 : Lorem ipsum dolor sit amet, amet consectetur... 
53 : Lorem ipsum dolor sit amet, amet consectetur... 
54 : Lorem ipsum dolor sit amet, amet consectetur... 
55 : Lorem ipsum dolor sit amet, amet consectetur... 
56 : Lorem ipsum dolor sit amet, amet consectetur... 
57 : Lorem ipsum dolor sit amet, amet consectetur... 
58 : Lorem ipsum dolor sit amet, amet consectetur... 
59 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
60 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 
61 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 
Verwandte Themen