Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]384[/thread]

String zwischen 2 Zeichen (#) auslesen

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2004-12-17 15:34
#3803 #3803
Hallo zusammen,

hoffe mir kann jemand helfen. Ich hab ein Array @details was ich mit Daten aus einer Tabelle fülle. Hierbei gehts mir um den Text den ein User eingeben kann. Den Text spreche ich dann mit $details[4] an.

Der Text soll zur Ausgabe nun in HTML formatiert werden. Bei der Texteingabe soll der User jetzt aber die Möglichkeit haben mit einem beliebigen Zeichen (# verwende ich jetz mal) eine Aufzählung einzuleiten und diese durch selbiges Zeichen wieder zu beenden.

Eben einfach alles was zwischen #text text text# steht soll die Listenformatierung bekommen.

EINGABE:

Normaler Text! #Aufzählung1# #Aufzählung2# Normaler Text usw. #Aufzählung3#

---

AUSGABE: (_ = soll einrücken symbolisieren)

Normaler Text!
_Aufzählung1
_Aufzählung2
Normaler Text usw.
_Aufzählung3

Quellcode Auszug:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while (@details = $sth->fetchrow_array ())
{
# Zeilenumbruch einfuegen
$details[4]=~ s/\n/<br>/g;

# Text nach Aufzaehlungszeichen Splitten
$details[4] =~ s/$zeichen([^$zeichen]+)/<ul><li>$1<\/li><\/ul>/g;

print<<ENDE;
<tr>
<td>$details[2]&nbsp;$details[3]</td>
</tr>
<tr>
<td>$details[4]</td>
</tr>
ENDE
}


In $zeichen steht "#"

Das ganze klappt insofern dass ich die Aufzählung einleiten kann, aber sobald die nächste Raute # kommt hab ich wieder ne Aufzählung. Ich kann die Aufzählung nicht abschließen und normal weiter schreiben.

Bin um jede Hilfe dankbar!

Gruß, CrYo
renee
 2004-12-17 15:40
#3804 #3804
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
#! /usr/bin/perl

use strict;
use warnings;

my $string = qq~Normaler Text! #Aufzählung1# #Aufzählung2# Normaler Text usw. #Aufzählung3#~;

$string =~ s/#([^#]+)#\s?/<ul><li>$1<\/li><\/ul>/g;
print $string;

Quote
Normaler Text! <ul><li>Aufzählung1</li></ul><ul><li>Aufzählung2</li></ul>Normaler Text usw. <ul><li>Aufzählung3</li></ul>
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Cryog3n
 2004-12-17 16:02
#3805 #3805
User since
2004-12-17
18 Artikel
BenutzerIn
[default_avatar]
Super, jetzt klappt es perfekt!!! Dankeschön! :) :) :)
Cryog3n
 2005-01-12 15:28
#3806 #3806
User since
2004-12-17
18 Artikel
BenutzerIn
[default_avatar]
Hallo nochmal!

Die Ausgabe soll etwas modifiziert werden und ich kriegs wiedermal nicht gebacken *G*

<ul>
<li>Aufzählung 1</li>
</ul>
<ul>
<li>Aufzählung 2</li>
</ul>
Normaler Text dazwischen...
<ul>
<li>Aufzählung 3</li>
</ul>

Das Problem ist, dass ich jedesmal nach dem <ul>...</ul> tag automatisch einen Absatz bekomme bzw. einen "unschönen" Abstand, sodass sich die Listenelemente nicht schön untereinander platzieren lassen wie es der Fall wäre, wenn alle <li> tags in EINEM <ul>...</ul> eingeschlossen wären.

Wie kann ich das jetzt beim splitten so hinbiegen dass ich das Problem umgehen kann? Bin für jeden Rat dankbar... kann ich den Abstand evtl. per css verhindern?

crYo\n\n

<!--EDIT|Cryog3n|1105536748-->
Taulmarill
 2005-01-12 16:03
#3807 #3807
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wie währe es mit folgender modifikation?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
$details[4] =~ s/$zeichen([^$zeichen]+)/<li>$1<\/li>/g;

print<<ENDE;
<tr>
<td>$details[2]&nbsp;$details[3]</td>
</tr>
<tr>
<td><ul>$details[4]</ul></td>
</tr>
ENDE
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Cryog3n
 2005-01-12 16:55
#3808 #3808
User since
2004-12-17
18 Artikel
BenutzerIn
[default_avatar]
Hi Taulmarill,

leider geht das nicht, da in $details[4] alles mögliche an Text steht, der ganz normal behandelt werden soll... nur eben Textteile aus $details[4] heraus, die in den beiden Sonderzeichen eingeschlossen sind (Normaler Text #Aufzählung# Normaler Text) sollen eingerückt werden.

Gedanke:

Wenn ich für jedes <ul> ... </ul> und für jeden normalen Text eine extra Zeile (<tr><td> ... </td></tr>)machen würde, dann gehts... aber dann könnte ich die komplett Zeile vergessen und müsste $details[4] Zeichen für Zeichen durchgehn, schauen ob es sich um normalen Text oder um eine Aufzählung handelt und dementsprechend die Tabelle aufbauen. Wüsste garnicht wie ich $details[4] nach dieser Methode durchsuchen müsste...

crYo
Crian
 2005-01-12 18:29
#3809 #3809
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
nur so als Ideenskizze:

Code: (dl )
1
2
3
4
5
6
7
8
my $txt = $details[4];

my @t = split /#/, $txt;

for (my $i=0; $i<@t; $i+=2) {
   print "normaler Text: $t[$i]\n";
   print "Aufzählung: ", $t[$i+1], "\n" unless $i == $#t;
}


(ungetestet)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2005-01-13 08:40
#3810 #3810
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#! /usr/bin/perl

use strict;
use warnings;

my $sign = '#';
my $string = qq~Normaler Text! #Aufzählung1# #Aufzählung2# Normaler Text usw. #Aufzählung3#~;

$string =~ s/$sign([^$sign]+)$sign\s?/<li>$1<\/li>/g;
$string =~ s/(<li>.*?<\/li>(?!\s*?<li>))/<ul>$1<\/ul>/g;

print $string;

Ausgabe:
Code: (dl )
1
2
~/entwicklung 5> perl string.pl
Normaler Text! <ul><li>Aufzählung1</li><li>Aufzählung2</li></ul>Normaler Text usw. <ul><li>Aufzählung3</li></ul>
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Cryog3n
 2005-05-11 23:28
#3811 #3811
User since
2004-12-17
18 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bräuchte nochmals Eure Hilfe Bitte. Ich kann ja nun schon einen String zwischen 2 Zeichen (Beispiel: #aufzählung 1 eingerückt# #aufzählung 2 eingerückt# normaler text nicht eingerückt #aufzählung 3 eingerückt#) optimal aufsplitten und das ganze gleich noch sehr schön in einer Zeile Quellcode per per html formatieren. Danke hierfür nochmals.

Was einwandfrei funzt: (in $sign steht das Suchkriterium (z.b. # und in $details[4] krieg ich nen Text aus der DB)

Code: (dl )
1
2
3
$details[4]=~ s/\n/<br>/g;
$details[4]=~ s/$sign([^$sign]+)$sign\s?/<li>$1<\/li>/g;
        $details[4]=~ s/(<li>.*?<\/li>(?!\s*?<li>))/<ul>$1<\/ul>/g;


Jetzt soll es ebenfalls möglich sein, in diesem Text Links zu setzen. Die Links werden folgendermaßen notiert:

Das ist nur ein Platzhalter. Dieser Text hat nichts zu bedeuten. Für mehr Infos bitte auf ~Foobar§http//www.xyz.de~ gehen.

So gibts der User ein bzw. wird es so aus der DB gelesen. Jetzt müsste ich praktisch den String zwischen den beiden ~ holen (das ist ja wie oben auch schon machbar) und dann sollte der String Foobar§http//www.xyz.de nochmals in zwei Hälften gesplittet werden, in "Foobar" und in "<a href="http//www.xyz.de." target="_blank">http://www.xyz.de/".</a> Dann sollte die Formatierung irgendwie so aussehen:

Code: (dl )
$details[4]=~ s/$urlsign([^$urlsign]+)$urlsign\s?/<a href="$1" target="_blank"'>$2<\/a>/g;


In $1 müsste dann irgendwie "http//www.xyz.de" stehen und in $2 dann der Link "Foobar"

Ginge das irgendwie noch zu erweitern?

Gruß, Cryog3n

P.S Doppelpunkt bei der Url hab ich weggelassen, da er sonst verlinkt.\n\n

<!--EDIT|Cryog3n|1115839768-->
renee
 2005-05-12 00:38
#3812 #3812
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
my $string = '~Foobar§http://test.de~';
my $linksign = '~';
my $delimiter = '§';

$string =~ s!$linksign([^$delimiter]+)$delimiter([^$delimiter]+)$linksign!<a href="$2" target="_blank">$1</a>!g;
print $string,"\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-12-17 15:34.