Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2005 Teil von November

SELFHTML Forumsarchiv
Text nach 150 Zeichen schneiden und nicht alles mitzählen

Informationsseite
  1. Seite (PHP) Text nach 150 Zeichen schneiden und nicht alles mitzählen von AllesMeins, 01. 11. 2005, 17:46
nach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: AllesMeins, 01. 11. 2005, 17:46

Hiho,

folgendes Problem. Ich möchte gernen einen Text nach 150 Zeichen abschneiden, dabei sollen allerdings Text der von zwei Unterstrichen eingeschlossen ist nicht mitgezählt werden. Also kleines Beispiel mit Schnitt nach 15 Zeichen:

Text1: "Irgend eine möglichst belangloser Text"
Text2: "Heute ist __ein wunderschöner sonniger__ Tag und ich bin froh"

Text 1 würde ganz normal nach 15 Zeichen geschnitten werden, es bliebe also "Irgend eine mög" übrig. Hingegen soll Text2 auch nach 15 zeichen geschnitte werden, dabei sollen die __ und alles was sie umrahmen aber nicht mitgezählt werden, also "Heute ist __ein wunderschöner sonniger__ Tag " (15 Zeichen ausserhalb der Unterstriche). Hat irgendwer eine Idee wie sich soetwas realisieren lässt?
Am liebsten wäre mir noch wenn der Text jeweils an der ermittelten Stelle in einen Array zerteilt wird, also der Rest vom text nicht einfach verworfen wird sondern ich ihn auch noch zur Verfügung habe.

Grüsse

Marc

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: Dennis, 01. 11. 2005, 20:41

Hi AllesMeins,


»» Hat irgendwer eine Idee wie sich soetwas realisieren lässt?

Eine fertige Funktion dafür kenne ich nicht - es wird aber mit den String-Funktionen lösbar sein. Ich habe mich gerade mal hingesetzt und ein kleines Script geschrieben, was die gewünschte Aufgabe löst:

<?php

// Konfiguration
$string  = "Ein kleiner __und sinnloser__ Text mit Lore Ipsum";
$letters = 17;

// Ein paar Variablen zum Kontrollieren des Programmablaufes
$position    = 0;     # Aktuelle Position im String
$counter     = 0;     # Zähler, wie viele Buchstaben wir schon haben
$in_nocount  = false; # Befinden wir uns innerhalb von __ ?
$new_string  = "";    # Neuer String
$rest_string = "";    # Restlicher String

// Solange wir noch nicht genug Buchstaben haben
while($counter < $letters)
{
    // Nächsten Buchstaben herrausschneiden
    $char = substr($string, $position, 1);
    // Sofern es den Anfang oder das Ende eines __ Bereiches darstellt
    if($char == "_" AND substr($string, $position + 1, 1) == "_")
    {
        $new_string .= "__";
        // Setze Kontrollvariable $in_nocount auf deren Gegenteil
        $in_nocount = $in_nocount ? false : true;
        // Und arbeite zwei Zeichen weiter im String
        $position += 2;
    }
    // andernfalls, wenn wir irgendwo im Text sind
    else
    {
        // Zeichen dem neuen String hinzufügen
        $new_string .= $char;
        // Wenn wir uns nicht in einem __ Bereich befinden, Counter
        // hochzählen
        if(!$in_nocount)
        {
            $counter ++;
        }
        // Position um eins erhönhen für nächsten Durchlauf
        $position ++;
    }
}
// Rest des Strings ins $rest_string schreiben
$rest_string = substr($string, $position);

// Ausgabe der Daten
echo "<pre>";
echo "Vorgabe:      $string\n";
echo "Neuer String: $new_string\n";
echo "Rest String:  $rest_string";
echo "</pre>";

?>


Soweit ich das bis jetzt getestet habe, funktioniert es einwandfrei.


MfG, Dennis.
-
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|

Die FlatBox 0.3 mit Dokumentation ist da!
Man sollte nie aufhören zu fragen (Albert Einstein)
... aber natürlich erst, nachdem man sämliche FAQ's und Archive durchgelesen hat :-P

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: AllesMeins, 02. 11. 2005, 17:02

Hiho,

vielen Dank! Ich werde noch ein wenig dran rumbasteln aber im grossen und ganzen ist das genau das, was ich gebraucht habe.

Viele Grüsse

Marc

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: dedlfix, 01. 11. 2005, 22:30

echo $begrüßung;

»» Ich möchte gernen einen Text nach 150 Zeichen abschneiden, dabei sollen allerdings Text der von zwei Unterstrichen eingeschlossen ist nicht mitgezählt werden.
»» Hat irgendwer eine Idee wie sich soetwas realisieren lässt?

Mit einem (ungierigen) Regulären Ausdruck können die __Textstellen__ entfernt werden. Danach kannst du mit substr() den Text auf Länge kürzen.

»» Am liebsten wäre mir noch wenn der Text jeweils an der ermittelten Stelle in einen Array zerteilt wird, also der Rest vom text nicht einfach verworfen wird sondern ich ihn auch noch zur Verfügung habe.

Auch das geht mit einem weiteren substr().


echo "$verabschiedung $name";

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: AllesMeins, 02. 11. 2005, 16:48

Hiho,

ich will die entsprechenden Stellen aber nicht raus haben sondern mit drinne behalten. Das ist ja das Problem. Sie sollen drinne sein, aber nicht gezählt werden...

Marc

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 02. 11. 2005, 00:13

你好 AllesMeins,

»» folgendes Problem. Ich möchte gernen einen Text nach 150 Zeichen
»» abschneiden, dabei sollen allerdings Text der von zwei Unterstrichen
»» eingeschlossen ist nicht mitgezählt werden.

Mal exemplarisch, wie man an so ein Problem herangehen kann:

Durchlaufe den String zeichenweise und zähle mit. Triffst du auf das
Zeichen _ und ist das darauf folgende Zeichen auch _, (1) dann höre auf zu
zählen bis du beim nächsten _ ankommst. Ist das darauf folgende Zeichen
auch ein _, fange wieder an zu zählen, ansonsten siehe (1). Bist du mit
deinem Zählerstand bei 150 angekommen, gib den String-Index zurück.
Schneide nun den String von 0 bis zum zurückgegebenen Index aus.

Ich denke, ein so einfacher Algorithmus sollte dir keine Probleme bereiten.

再见,
 克里斯蒂安

-
Neue Hardware eingebaut | Der dritte mir bekannte Block-Nutzer
Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.

http://wwwtech.de/

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: Dennis, 02. 11. 2005, 12:35

Hi Christian,


»» Durchlaufe den String zeichenweise und zähle mit. Triffst du auf das
»» Zeichen _ und ist das darauf folgende Zeichen auch _, (1) dann höre auf zu
»» zählen bis du beim nächsten _ ankommst. Ist das darauf folgende Zeichen
»» auch ein _, fange wieder an zu zählen, ansonsten siehe (1). Bist du mit
»» deinem Zählerstand bei 150 angekommen, gib den String-Index zurück.
»» Schneide nun den String von 0 bis zum zurückgegebenen Index aus.

Ungefähr so hab ichs ja auch gemacht - nur dass ich jedes ausgelesene Zeichen
auch direkt rüberkopiert habe. Hat deine Methode mit dem Schneiden am Ende
irgendwelche (Performance) Vorteile?
Oder kommt das nur so von einem C-Programmierer, der erst wissen muss, wie
viel Speicherplatz er für eine Variable reservieren muss, bevor er sie
füllen kann? ;-)


MfG, Dennis.
-
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|

Die FlatBox 0.3 mit Dokumentation ist da!
Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 02. 11. 2005, 13:15

你好 Dennis,

»» Ungefähr so hab ichs ja auch gemacht - nur dass ich jedes ausgelesene Zeichen
»» auch direkt rüberkopiert habe.

Ja, habe ich gelesen ;) Aber ich habe mit voller Absicht nochmal eine
Anleitung geschrieben.

»» Hat deine Methode mit dem Schneiden am Ende irgendwelche (Performance)
»» Vorteile?

Ja: bei meiner Methode muss nur einmal Speicher alloziiert werden ;) Bei
deiner muss jedesmal ein neuer String erstellt werden, also jedesmal
Speicher alloziiert werden. Das ist jedesmal ein (langsamer) System-Call.

»» Oder kommt das nur so von einem C-Programmierer, der erst wissen muss, wie
»» viel Speicherplatz er für eine Variable reservieren muss, bevor er sie
»» füllen kann? ;-)

Hehe, nein ;)

再见,
 克里斯蒂安

-
Neue Hardware eingebaut | Der dritte mir bekannte Block-Nutzer
<Tim> Ich bin nicht hier, um zu helfen. Mir hilft ja auch keiner. Sogar mein Brötchen muss ich mir jetzt selber schmieren.

http://wwwtech.de/

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: Dennis, 02. 11. 2005, 19:27

Hi Christian,


»» »» Hat deine Methode mit dem Schneiden am Ende irgendwelche (Performance)
»» »» Vorteile?
»»
»» Ja: bei meiner Methode muss nur einmal Speicher alloziiert werden ;) Bei
»» deiner muss jedesmal ein neuer String erstellt werden, also jedesmal
»» Speicher alloziiert werden. Das ist jedesmal ein (langsamer) System-Call.

Ah - das ist einem als „PHP-Programmierer” gar nicht so bewusst, zumindest
mir nicht - bei jeder Änderung in der Länge eines Strings muss also ein
neuer Speicher assoziiert werden? Ok, dann ist natürlich klar, warum deine
Methode (mehr oder weniger deutlich) performanter ist.


MfG, Dennis.
-
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|

Die FlatBox 0.3 mit Dokumentation ist da!
Immer wenn man etwas anders macht, wird man wieder Leute gegen sich haben. (Jürgen Kliensmann)

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: AllesMeins, 02. 11. 2005, 16:52

Hiho,

danke für die Hinweise. Ich denk mir halt immer "Mensch, da muss es doch was einfacheres geben als das alles per Hand zu erledigen" und deshalb frage ich. Iss einfach meine angeborene Faulheit ;)

Marc

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 02. 11. 2005, 19:36

你好 AllesMeins,

»» danke für die Hinweise. Ich denk mir halt immer "Mensch, da muss es doch
»» was einfacheres geben als das alles per Hand zu erledigen" und deshalb
»» frage ich. Iss einfach meine angeborene Faulheit ;)

Ich werde es nie verstehen… den Algorithmus tippt man doch in 10 Minuten,
da würde ich mir gar nicht die Mühe machen irgendwas zu suchen, geschweige
denn in einem Forum zu posten.

再见,
 克里斯蒂安

-
(X)Emacs: buffer-cycle.el | Neue Hardware eingebaut
Der Verstand ist der Hausherr, der Koerper sein Gast.

http://wwwtech.de/

nach obennach unten

Text nach 150 Zeichen schneiden und nicht alles mitzählen

Die folgende Nachricht zum Thema stammt von: at, 06. 11. 2005, 03:16

Hallo.

»» Iss einfach meine angeborene Faulheit ;)

Faules sollte man besser nicht essen.
MfG, at

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2005 Teil von November

© 1998-2008 Seite Impressum, Software: Classic Forum