Template.de kostenloses Weblog Dasat.com Kultfabrik Feten.de Leben.de iEvent.de HappyHour.de Haidhausen.org
   Get Firefox! Get Thunderbird! RSS Feed RSS-Portal.com - Newsfeed
Neues PERL-Forum
unter Community.Perl.de
[irgendwie gelöst] Kürzen von Zeichenketten - mit RegEx

 
Neues Thema eröffnen   Neue Antwort erstellen    forum.perl.de Foren-Übersicht -> Allgemeines zu Perl
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
McAldo
Chief Petty Member
Chief Petty Member


Anmeldedatum: 24.10.2003
Beiträge: 42
Wohnort: Terra / Sol-System / Milchstraße

BeitragVerfasst am: 08.02.2010, 17:53    Titel: [irgendwie gelöst] Kürzen von Zeichenketten - mit RegEx Antworten mit Zitat

Hallo, ich habe eine Variable (wird vorher durch eine foreach "gefüllt") mit folgendem Inhalt:

Code:
"text"
oder
Code:
text


text kann dabei 1 - n Zeichen lang sein. n sollte aber maximal nur 250 Zeichen betragen. Ich finde leider nicht die richtige Syntax um das mit RegEx hinzubekommen und weiß auch nicht so richtig, wonach ich suchen soll. :/

Mein bisheriger Versuch:
Code:
$field =~ s/(")?(.{,250})(")?/$1$2$3/;


Ich habe ein an einer Stelle weit mehr als 250 Zeichen eingetragen, die werden auch weiter alle ausgegeben.

Wie ist die richtige Syntax, dass die Ersetzung so erfolgt, dass nur noch 250 Zeichen entweder zwischen den " " steht, oder alleine in der Variablen?

McAldo


Zuletzt bearbeitet von McAldo am 09.02.2010, 10:24, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abgdf
Senior Chief Petty Member
Senior Chief Petty Member


Anmeldedatum: 04.10.2005
Beiträge: 85

BeitragVerfasst am: 09.02.2010, 02:32    Titel: Antworten mit Zitat

Code:
$field = substr($field, 0, 250);

ungetestet ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
McAldo
Chief Petty Member
Chief Petty Member


Anmeldedatum: 24.10.2003
Beiträge: 42
Wohnort: Terra / Sol-System / Milchstraße

BeitragVerfasst am: 09.02.2010, 09:09    Titel: Antworten mit Zitat

Das ist schon gut, aber nicht ganz richtig, da ein eventuell vorhandenes " am Ende mit weggekürzt wird.

McAldo


Zuletzt bearbeitet von McAldo am 09.02.2010, 09:16, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crian
Master Chief Member
Master Chief Member


Anmeldedatum: 10.11.2003
Beiträge: 1140
Wohnort: Bielefeld

BeitragVerfasst am: 09.02.2010, 09:09    Titel: Antworten mit Zitat

Das Problem an deiner Regexp ist, dass er nur ersetzt, wenn der Text die Voraussetzungen erfüllt, ansonsten wird nicht ersetzt. Insofern bleibt der Ausgangstext immer einfach so, wie er ist.

Vielleicht wäre eine Längenprüfung auf > 252 Zeichen ein Anfang? Dann kannst du noch analysieren, ob vorn und hinten Anführungszeichen sind.
_________________
Perl Community - Perlmongers - Perl Monks - meine Perlseite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
McAldo
Chief Petty Member
Chief Petty Member


Anmeldedatum: 24.10.2003
Beiträge: 42
Wohnort: Terra / Sol-System / Milchstraße

BeitragVerfasst am: 09.02.2010, 09:23    Titel: Antworten mit Zitat

Crian hat Folgendes geschrieben:

Vielleicht wäre eine Längenprüfung auf > 252 Zeichen ein Anfang? Dann kannst du noch analysieren, ob vorn und hinten Anführungszeichen sind.


Naja, das lässt sich sicher in einer RegEx machen, dass man auf die Zeichenkette innerhalb " " prüft (falls " " vorhanden) und dann entsprechend kürzt. Ich bekomm das aber nicht mehr zusammen. Zu langer her, seit ich das mal gemacht habe.

McAldo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
McAldo
Chief Petty Member
Chief Petty Member


Anmeldedatum: 24.10.2003
Beiträge: 42
Wohnort: Terra / Sol-System / Milchstraße

BeitragVerfasst am: 09.02.2010, 10:22    Titel: Antworten mit Zitat

So, ich habe das jetzt ganz umständlich gelöst. Vielleicht kann ich das irgendwann wieder besser. Smilie So ein Script wird ja immer massiv verändert, wenn man sich das nach einer Weile nochmal anschauen und dann den nutzlosen Code entfernt. Smilie

Code:

my $count_char = "250";
if ( $field =~ /^\".+\"$/ ) {
      $field =~ /^\"(.+)\"$/;
       my $text = $1;
       $text = substr($text, 0, $count_char);
       $field = "\"$text\"";
} else {
        $field = substr($field, 0, $count_char);
}


McAldo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abgdf
Senior Chief Petty Member
Senior Chief Petty Member


Anmeldedatum: 04.10.2005
Beiträge: 85

BeitragVerfasst am: 10.02.2010, 16:55    Titel: Antworten mit Zitat

McAldo hat Folgendes geschrieben:
So, ich habe das jetzt ganz umständlich gelöst.

Das seh' ich anders: Ich find's viel besser als eine lange, kryptische RegEx, die dann 'eh keiner mehr lesen kann.

Man muß auch sehen: Die RegEx-Engine von Perl5 ist nicht 100%ig sicher, da sich kaum noch jemand mit ihr beschäftigt, weil für Perl6 alles neu geschrieben wird.
Tatsächlich gibt es also nur noch ganz wenige Leute, die verstehen, was Perl5 überhaupt macht, wenn es eine RegEx interpretiert. Schon gruselig ...

Gruß

Edit: Wollt' meine Aussagen noch belegen: Einmal hier, "What's Wrong with Perl 5":
Zitat:
Perhaps the biggest imperfection of Perl 5 is its internals. Though much of the design is clever, there are also places of obsolescence and interdependence, as well as optimizations that no one remembers, but no one can delete without affecting too many other parts of the system. Refactoring an eleven-plus-year-old software project that runs on seventy-odd platforms and has to retain backwards compatibility with itself on many levels is daunting, and there are few people qualified to do it. It's also exceedingly difficult to recruit new people for such a task.

und

http://dev.perl.org/perl6/doc/design/apo/A05.html
Larry hat Folgendes geschrieben:
In fact, regular expression culture is a mess, and I share some of the blame for making it that way ...
unfortunately, there's a lot of regex culture that needs breaking ...
Regex culture has gone wrong in a variety of ways ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
pq
Ensign
Ensign


Anmeldedatum: 01.10.2003
Beiträge: 1578
Wohnort: ick bin eine berlinerin

BeitragVerfasst am: 12.02.2010, 15:35    Titel: Antworten mit Zitat

abgdf: soweit ich das verstanden habe, wurden für 5.10 grosse teile der regex-engine neu geschrieben, daher sind deine aussagen zu perl 5 zumindest bzgl. der regex-engine nicht mehr wirklich aktuell.
zur sicherheit: wieviele bugs hast du denn so in den letzten jahren gezählt in der perl5 regex engine? Winken
_________________
kommt rüber zu perl-community.de - das unzensierte, trollfreie perl-forum mit wiki, faq, scripts, links
lesen: perlintro!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    forum.perl.de Foren-Übersicht -> Allgemeines zu Perl Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

phpBB SEO URLs V2

perl.de
Impressum
Diese Seite wird betrieben von
DASAT Ltd. - Zweigniederlassung Deutschland - Truderinger Str. 13 - 81677 München
HRB 155179, Amtsgericht München - Geschäftsführer: Peter Vogel, Ulrich Eckardt -
Tel.: 0800 0852 963 - Fax: 0700 998 998 88
Ansprechpartner Peter Vogel und Ulrich Eckardt
SteuerID 127/19571
DASAT-Website
eMail
Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de