php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Jobs und Projekte > Projekthilfe
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Projekthilfe Hier könnt Ihr eine Art Projekthilfe anfordern. Unter Projekthilfe verstehen wir Angebote bei denen KEIN Geld gezahlt werden kann.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 27-05-2009, 15:49
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Question Leerzeilen löschen mit reg-ex nach Bedingung



Ich möchte alle mit Text gefüllten Dateien in einem Ordner für die weitere Verwendung formatieren.

Die Dateien sollen als erste Zeile mit dem Liedtitel beginnen, die mit einer Liednummer beginnt.

Also sollen alle Leerzeilen vor dem Titel, der durch die Nummer erkennbar ist, gelöscht werden.

Der Titel soll durch 2 Leerzeilen von der darauf folgenden 1. Strophe getrennt sein.
Mehr Leerzeilen sollen gelöscht, zuwenige dazu gefügt werden.

Die Strophen selbst soll abwechselnd, beginnend mit Text, Textzeile und Leerzeile sein.

Die einzelnen Strophen sind durch Leerzeilen getrennt und daran erkennbar, das der Rhythmus 1 Text 1 Leer unterbrochen wird und danach noch Text kommt. Oder wie im Fall der 2. Strophe wenn nach einem Block von Textzeilen noch Text kommt. Der Abstand der einzelnen Strophen soll also 2 Leerzeilen sein.

Alle Leerzeilen nach der letzten Textzeile sollen gelöscht werden.

Beispieltext:
Zitat:



001. Liedtitel (Text)



Text

Text

Text

Text



Text
Text
Text
Text


Text

Text

Text



#z.B letzte Zeile
Sollzustand

Zitat:
001. Liedtitel (Text)


Text

Text

Text

Text


Text

Text

Text

Text


Text

Text

Text
# letzte Zeile
Weil ich nach dieser Aufgabe noch weitere Einsetzungen habe, dachte ich, das der Einsatz der regulären Ausdrücke die richtige Wahl ist.

Die Frage ist, ob solch eine Anforderung mit einem regulären Ausdruck zu erfassen ist und ob gerade jemand den passenden Ausdruck kennt oder ob nicht vielleicht die Aufgabe besser über das Dateisystem oder über Arrays zu erfüllen währe.

Danke soweit und Gruß

Estrela
__________________
Denk positiv.
Mit Zitat antworten
  #2 (permalink)  
Alt 27-05-2009, 16:09
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

RegEx kann schon viel, aber für deise Aufgabe nicht gerade sinnvoll. Ich würde sagen, dass du entweder mit fopen, fread Zeile für Zeile einliest und weg schreibst oder mit files komplet einlesen, das Array durchsteppen und weg schreiben. Es ist nur ein paar Zeilen Code, es ist schnell erstellt anstatt sich den Kopf über RegEx und seine Tücken zu zerbrechen.
Mit Zitat antworten
  #3 (permalink)  
Alt 27-05-2009, 17:41
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo asp2php.

Dachte ich mir schon, das diese Aufgabe als Aufwärmübung für RegEx nicht unbedingt geeignet ist.

Und das mit dem durchsteppen ist für mich leider nicht so einfach.

Mit diesem Code ist der Zugriff auf die einzelne Zeile möglich:

PHP-Code:
<?php
$d 
"test.txt";
$file file$d);
foreach( 
$file as $key => $line) {
    echo 
$line;
}
?>
Aber wie und wo baue ich denn meine Abfragen ein. In der Schleife selbst ist doch nur die einzelne Zeile bekannt und nicht das Verhältnis zur Nachbarschaft.
Also brauche ich die Schleife dort nicht.
Kannst Du mir nicht mal ein Beispiel nennen, wie ich das mit dem Abstand der Titelzeile zur ersten Strophe überprüfe?

Gruß

Estrela
__________________
Denk positiv.

Geändert von Estrela (27-05-2009 um 17:59 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 27-05-2009, 18:04
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Beim Durchsteppen schmeißt du einfach alle Leerzeilen raus, d.h. überspringen, und schreibst in die neue Datei nur das, was du willst. Wo ist denn dein Problem?
Mit Zitat antworten
  #5 (permalink)  
Alt 27-05-2009, 18:10
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Estrela Beitrag anzeigen
Aber wie und wo baue ich denn meine Abfragen ein. In der Schleife selbst ist doch nur die einzelne Zeile bekannt und nicht das Verhältnis zur Nachbarschaft.
Die vorherigen Zeilen sind alle schon "bekannt" - schliesslich hast du sie schon durchlaufen. Ist halt nur die Frage, wie viele davon du dir "merken" musst, um die Daten zu haben, die du für deinen Vergleich brauchst.


(Und wenn man mit einem nummerisch indizierten Array und einer for-Schleife arbeitet, dann sind auch die folgenden Zeilen schon "bekannt", bzw. abfragbar. Aber sowas braucht man im Normalfall nicht, da reicht es, wenn man "nach hinten" schauen kann, auch noch nach vorne ist selten notwendig.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #6 (permalink)  
Alt 27-05-2009, 18:13
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@asp2php
Ja genau, das ist ein guter Gedanke.

Einfach beim Einlesen alle Leerzeilen raus und danach das Dokument so aufbauen, wie es sein soll.

Wenns Probleme gibt, melde ich mich nochmal.

Danke also

und Gruß

Estrela
__________________
Denk positiv.
Mit Zitat antworten
  #7 (permalink)  
Alt 27-05-2009, 18:22
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@wahsaga

Wenn das Programm also in einem nummerisch indizierten Array und einer for-Schleife ist( was ja hier der Fall ist), dann kann ich abfragen, wenn das und das in der nächsten und/oder übernachsten usw Zeile ist, dann tue das und das?

Wie formuliere ich das denn in php?

Zeig mit doch bitte mal, wie eine solche exemplarische Abfrage aussieht.

Gruß

Estrela
__________________
Denk positiv.

Geändert von Estrela (27-05-2009 um 18:30 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 27-05-2009, 18:29
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@asp2php

Beim Durchdenken entstand schon ein Problem.

Die Strophen gehen verlohren.

Also, da die Anzahl der Zeilen in einer Strophe variieren kann, muß zuerst die Struktur der Strophen ermittelt werden, hier also, wieviele Zeilen eine Strophe hat.

Wie mache ich das am besten?

Gruß

Estrela
__________________
Denk positiv.
Mit Zitat antworten
  #9 (permalink)  
Alt 27-05-2009, 19:42
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Estrela Beitrag anzeigen
@wahsaga

Wenn das Programm also in einem nummerisch indizierten Array und einer for-Schleife ist( was ja hier der Fall ist), dann kann ich abfragen, wenn das und das in der nächsten und/oder übernachsten usw Zeile ist, dann tue das und das?

Wie formuliere ich das denn in php?

Zeig mit doch bitte mal, wie eine solche exemplarische Abfrage aussieht.

Gruß

Estrela
Seufz, due liest doch via file() ein, wer hindert dich daran mit:

PHP-Code:
$content file(...);
$cnt count($content)
for (
$i=0$i<$cnt$i++)
... 
durchzulaufen.

Zitat:
Zitat von Estrela Beitrag anzeigen
@asp2php

Beim Durchdenken entstand schon ein Problem.

Die Strophen gehen verlohren.

Also, da die Anzahl der Zeilen in einer Strophe variieren kann, muß zuerst die Struktur der Strophen ermittelt werden, hier also, wieviele Zeilen eine Strophe hat.

Wie mache ich das am besten?

Gruß

Estrela
Worin unterscheiden sich die Strophen und Refrain? Untersuche das und finde das Muster heraus, dann kannst du einbauen.

Mensch, solche Basic musst du eigentlich so aus dem Ärmel schütteln können.
Mit Zitat antworten
  #10 (permalink)  
Alt 27-05-2009, 21:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Estrela Beitrag anzeigen
Wie formuliere ich das denn in php?

Zeig mit doch bitte mal, wie eine solche exemplarische Abfrage aussieht.
Überlegen wir mal ...

Wenn die Zählervariable einer for-Schleife, nennen wir sie mal $i, für den Zugriff auf die aktuelle Zeile dient - wie könnte man dann wohl auf die vorherige oder nachfolgende Zeile zugreifen?
Vielleicht, in dem wir uns (vage) erinnern, dass es sowas wie Plus und Minus gibt, und ausserdem noch eine komische Zahl, die "Eins" heisst ...?

(Natürlich muss man dabei darauf achten, dass man nicht auf nicht existente Zeilen zugreift - also bspw. die vor der ersten oder die nach der letzten, die gibt's nämlich nicht.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #11 (permalink)  
Alt 27-05-2009, 22:29
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@asp2php
Zitat:
Mensch, solche Basic musst du eigentlich so aus dem Ärmel schütteln können.
Ja danke, bin auf dem Wege, die Diskrepanz zwischen Denken und können abzubauen.

Istzustand:
PHP-Code:
<?php
$d 
"test.txt";
$content file$d);
$cnt count$content);
for( 
$i=0$i<$cnt$i++) {
    if( 
ereg("^[0-9]"$content$i])) {
        echo 
"<br>Titel : $content[ $i]";
        
$a_titel[] = $i;
        
$i++;
    } 
    if( 
ereg"^[a-zA-Z]"$content$i])) {
        echo 
"<br>Strophenzeile : $content[ $i]";
        
$a_strop[] = $i;
    }else {
        echo 
"<br>Leerzeile : $content[ $i]";
        
$a_leer[] = $i;
    }
}
print_r $a_titel);
print_r $a_strop);
print_r $a_leer);
?>
So, jetzt habe ich also die Zeilennummern im Array, das ich jetzt auf die Muster untersuchen kann.

So weit so gut.

Oder kann ich schon direkt nach einer Regel in der Schleife die überzähligen Leerzeilen löschen?

Estrela
__________________
Denk positiv.

Geändert von Estrela (27-05-2009 um 22:56 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 28-05-2009, 10:28
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Estrela Beitrag anzeigen
...
Und das mit dem durchsteppen ist für mich leider nicht so einfach.
Wieso nicht? Du kuckst dir einfach ("step-by-step") jede Zeile an, überprüfst ob sie "leer" ist und überspringst Leerzeilen, die zu viel sind und fügst notwendige Leerzeilen hinzu.
Wie du schon selbst richtig erkannt hast:

Zitat:
Oder kann ich schon direkt nach einer Regel in der Schleife die überzähligen Leerzeilen löschen?
Siehe auch etwas weiter unten im Text ...

Zitat:
... Istzustand:
PHP-Code:
<?php
$d 
"test.txt";
$content file$d);
$cnt count$content);
for( 
$i=0$i<$cnt$i++) {
    if( 
ereg("^[0-9]"$content$i])) {
        echo 
"<br>Titel : $content[ $i]";
        
$a_titel[] = $i;
        
$i++;
    } 
    if( 
ereg"^[a-zA-Z]"$content$i])) {
        echo 
"<br>Strophenzeile : $content[ $i]";
        
$a_strop[] = $i;
    }else {
        echo 
"<br>Leerzeile : $content[ $i]";
        
$a_leer[] = $i;
    }
}
print_r $a_titel);
print_r $a_strop);
print_r $a_leer);
?>
So, jetzt habe ich also die Zeilennummern im Array, das ich jetzt auf die Muster untersuchen kann.

So weit so gut.
Eher: So weit, so gut gemeint ...
Was nützt dir die Gesamtzahl der jeweiligen Zeilen-Arten? Richtig: Nix, überhaupt nix.
Und mit deinen regulären Ausdrücken dürfte es Probleme geben, wenn beispielsweise eine Textzeile mit Ä, Ö oder Ü anfangen sollte. Ich hoffe mal, du hast nur englische Liedtexte -- da könnte deine Mustersuche klappen. ;-)

Zitat:
Dachte ich mir schon, das diese Aufgabe als Aufwärmübung für RegEx nicht unbedingt geeignet ist.
Warum sollte sie das nicht sein? Die hohe RegEx-Kunst ist es bestimmt nicht, also ist Aufwärmübung gar keine so schlechte Bezeichnung für dein Problem. ;-)

"Reguläre Ausdrücke" anzuwenden, bedeutet "Erkennen von Mustern".
Du hast aber nicht gründlich genug nach Mustern (oder Regeln) gesucht -- obwohl deine Problembeschreibung welche enthält. Wie so oft, ist eine gute Problembeschreibung die halbe Lösung.

Regeln:
1) 0 Leerzeilen (also ein Zeilenumbruch) soll zu einer Leerzeile werden
2) eine Leerzeile soll zu einer Leerzeile werden
3) zwei und mehr Leerzeilen sollen zu zwei Leerzeilen werden

Ausnahmen:
4) Leerzeilen vor der ersten und nach der letzten Text-Zeile sollen komplett entfernt werden.

Wenn wir die Ausnahmen erstmal ignorieren, können wir uns an Hand der Regeln
einen RegEx basteln. Dabei gilt:
* Null Leerzeilen entsprechen einem Zeilenumbruch.
* Eine Leerzeile entspricht zwei Zeilenumbrüchen.
* Zwei Leerzeilen entspricht drei Zeilenumbrüchen.
* usw.

Dass bauen wir als Perl-kompatiblen RegEx:

Zeilenumbruch (idiotensicher):
/(\r\n|[\n\r])/ passt auf alles, was wie gängige Zeilenumbrüche aussieht.

eine Leerzeile:

/(\r\n|[\n\r])\s*?\\1/
* Zeilenumbruch,
* keins oder beliebig viele Whitespace-Zeichen,
* gefolgt vom gleichen Zeilenumbruch wie der erste

Auf mehrere Leerzeilen passt der Ausdruck, wenn man den letzten Teil des Musters wiederholt.

Das Fragezeichen sorgt dafür, dass keine Zeilenumbruchzeichen mit \s* überlesen werden, denn auch Zeilenumbrüche werden zu den Whitespace-Zeichen gezählt.

Whitespace-Zeichen sind Leerzeichen, Tabulatoren, Zeilenumbrüche und diverser anderer (meist) unsichtbarer Kram. Da man sowas schonmal aus Versehen eintippen und beim bloßen Anschauen im Texteditor nicht immer erkennen kann, hab ich das mit eingebaut.

Jetzt kommt das Problem des Ersetzens. Großes Rumfummeln mit preg_match() und den diversen Zeichenketten-Manipulationsfunktionen liegt mir nicht, also nehmen wir preg_replace_callback(). Dss gewöhnliche preg_replace() reicht hier nicht, weil wir abhängig von der Zeilenzahl unterschiedliche Ersetzungs-Muster brauchen.

Damit die Callback-Funktion weiß, welchen Fall (0, 1, 2 oder mehr Zeilen) sie vor sich hat, müssen wir ihr das mitteilen. Und, schwupps, wird der RegEx etwas komplizierter:

'/\s*?(\r\n|[\n\r])(\s*?\\1(\s*?\\1)*)?/'

* Das erste \s*? sammelt nur vor dem ersten Zeilenumbruch rumliegende
Whitespaces ein, tut also nichts zur Sache

* Dann suchen wir nach dem ersten Zeilenumbruch und merken uns den
als nummeriertes "Teilmuster" (== "sub-pattern") 1.

* Der nächste Ausdruck (\s*?\\1(\s*?\\1)*)? kann einmal oder keinmal vorkommen.
Im letzteren Fall hätten wir eine Null-Leerzeile gefunden.
Im ersteren Fall haben wir Teilmuster 2.

* Kommt der Ausdruck einmal vor, muss weiter aufgedröselt werden. Wir sehen zwei
Teilmuster:
\s*?\\1 und (\s*?\\1)*
Das erste passt auf eine Leerzeile, das zweite auf alle weiteren Leerzeilen
und wird als Teilmuster 3 nummeriert.

Die Klammern erzeugen im Treffer-Array ($hits) jeweils einen neuen Eintrag mit der
jeweiligen Teilmuster-Nummer, wenn das Suchmuster passt. Diese Einträge lassen
sich mit isset() einfach abfragen, ohne großartige Berechnungen oder
Zeichenzählereien anzustellen.

Die Tricksereien, um die Leerzeilen am Anfang und Ende der Datei zu entfernen,
überlasse ich dem geneigten Leser zur Übung. ;-)
Die Erkennung des Anfangs geht dabei ganz ohne reguläre Ausdrücke über
die Bühne.

PHP-Code:
/// formatiert zeilen in $src neu
/// gibt einen String zurück
function reformat(
  
$src
) {
  
// (\s*?\\1(\s*?\\1)*(\z)?)? fügt bei nur einem Zeilenumbruch am Ende eine Leerzeile ein
  // (\s*?\\1(\s*?\\1)*(\z)?|(\z))? behebt das Problem (und auch nur in dem Fall)

  // der RegEx
  
static $pcre '/\s*?(\r\n|[\n\r])(\s*?\\1(\s*?\\1)*(\z)?|(\z))?/S';
  return 
preg_replace_callback($pcre'reformat_callback'$src);
}

/// Callback-Funktion, bekommt Treffer-Array
/// gibt Ersetzen-String zurück
function reformat_callback($hits) {
  static 
$is_start TRUE// ist nur beim ersten Durchlauf TRUE
  
  // Zeilen am Anfang entfernen (== durch Leerstring ersetzen)
  
if ($is_start) {
    
$is_start FALSE;
    return 
'';
  }
  
  
// Zeilen am Ende entfernen
  
if (isset($hits[4])) {
    
$is_start TRUE// fürs nächste Mal wieder auf Start setzen
    
return '';
  }

  
// als Zeilenumbruch wird "\r\n" angenommen

  // >= 2 Leerzeilen zu 2 Leerzeilen
  
if (isset($hits[3])) {
    return 
"\r\n\r\n\r\n"// 3 Umbrüche == 2 Leerzeilen
  
}
  
  
// 1 Leerzeile zu 1 Leerzeil
  // 0-Leerzeile zu 1 Leerzeile
  
return "\r\n\r\n"// 2 Umbrüche == 1 Leerzeile

Das Ganze auf dein Beispiel angewandt:
PHP-Code:
$src '



001. Liedtitel (Text)


Text

Text
Text

Text



Text
Text
Text
Text


Text

Text

Text



#z.B letzte Zeile
'
;

/// Hilfsfunktion: zeigt eine Zeichenkette formatiert als HTML an
function display(
  
$txt
) {
  echo 
'<hr /><pre>'htmlspecialchars($txt), '</pre><hr />';
}

// vorher anzeigen
display($src);
// umformatieren
$dst reformat($src);
// nachher anzeigen
display($dst); 
Um $src, wie hier benötigt, als String und nicht als Array von Zeilen zu erhalten, kannst du statt file() die Funktion file_get_contents() verwenden.


Selbstverständlich geht das Ganze auch ohne Reguläre Ausdrücke.
Als Beispiel die Variante mit fopen(), fgets() und fclose():

PHP-Code:
// file zeilenweise einlesen
$fh fopen('dateiname''r');
$lines = array (); // enthält die neu formatierten Zeilen
$empty_lines 0;  // zählt die eingelesenen Leerzeilen vor jeder Text-Zeile
$is_start TRUE// der gleiche Trick wie weiter oben
// fgets() liest eine Datei Zeile für Zeile ein und gibt
// FALSE zurück, wenn das Dateiende erreicht ist
while (FALSE !== $line fgets($fh)) {
  
$line rtrim($line); // Whitespaces und Zeilenumbrüche entfernen
  
if (!isset($line[0])) {  // wir haben eine Leerzeile
    
++$empty_lines// Leerzeile zählen
    // aber KEINE Leerzeile hinzufügen
  
}
  else {
    if (
$is_start) {
      
$is_start FALSE;
      
// KEINE Leerzeilen hinzufügen
    
}
    
// Regel 1 und 2
    
elseif ($empty_lines == || $empty_lines == 1) {
      
$lines[] = ''// eine Leerzeile hinzufügen
    
}
    
// sonst Regel 3
    
else {
      
$lines[] = ''// zwei Leerzeilen
      
$lines[] = ''// hinzufügen
    
}
    
$lines[] = $line// eine Textzeile hinzufügen
    
$empty_lines 0// den Leerzeilen-Zähler wieder zurücksetzen
  
}
}
fclose($fh); // datei(handle) schließen 
Leerzeilen am Ende werden einfach ignoriert, brauchen also nicht gesondert
behandelt zu werden.

Hier liegt der umformatierte Text nach dem Einlesen als Array von Zeilen in $lines vor.

Geändert von fireweasel (28-05-2009 um 10:35 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 28-05-2009, 10:38
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Mit Zitat antworten
  #14 (permalink)  
Alt 28-05-2009, 17:58
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das werde ich durcharbeiten.

Dank und Gruß

Estrela
__________________
Denk positiv.
Mit Zitat antworten
  #15 (permalink)  
Alt 01-06-2009, 16:04
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo fireweasel.

Auf den ersten Blick hatte ich stille Bedenken, ob ich das zum laufen bekomme. Aber nein, auch und gerade für Beginner sehr zu empfehlen als kleiner Einstieg oder Aufwärmübung ;-) in den Bereich der regulären Ausdrücke.

Super arbeit. Du hast Dich ja richtig dem Thema angenommen und eine 1a Lösung präsentiert und diese auch noch dankenswerterweise gut dokumentiert.

Nicht so leicht zu verstehen ist das mit der Rückreferenzierung und der Zählung der Treffer.
Ich halte zu dem Thema erst mal fest, das jede Klammer durchnummeriert ansprechbar ist.

Weitere Informationen bzg.der Zeichen innerhalb des Ausdrucks habe ich im Manual hier auf Englisch und für die Modifikatoren außerhalb des Suchmusters hier gefunden.

Bemerkenswert finde ich deine Antizipationsfähigkeit bezüglich der Funktionsfähigkeit des Scripts, um unter möglichst vielen Umständen ( /\s*?)die Aufgabe zu erfüllen. Super Eigenschaft!

Zu meinen Arrays, die ich oben eingerichtet habe, möchte ich noch sagen, das damit die Position der einzelnen Zeilenarten( Titel, Leerzeile, Strophenzeile) bekannt und damit dann die Startposition und Länge der Strophen berechenbar geworden sind. In so fern währen sie schon nützlich gewesen, währe nicht ein besserer Weg in Richtung Ziel erkennbar geworden.

Danke für deine allgemeinen und speziellen Ausführungen, die das Thema auf dieser Stufe schön ausgeleuchtet haben.

Und ich würde mich freuen, auch in meinem nächsten Beitrag, in dem es um die abschließende Formatierung der Dateien geht
( hättest Du wahrscheinlich in einem Schritt gemacht, ich möchte aber wegen eventueller nachträglicher Änderungen keinen hochkomplexen Code),
wieder von dir zu hören.
Wenn es deine Zeit zuläßt, vielleicht nicht als fertige Lösung, sondern als geduldiger Ratgeber auf dem Weg zum Ziel.


@asp2php

Danke auch dir nochmal für deine geduldige Erläuterung, die zur Verbesserung meines grundlegenden Verständnisses beigetragen hat.



Gruß

Estrela
__________________
Denk positiv.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
reg ex, regex, reguläre ausdrücke


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JavaScript-PopUp in PHPCode nach Bedingung öffnen Groundhog PHP Developer Forum 4 25-08-2007 09:51
bereiche eines templates nach bedingung erst einblenden lx-club PHP Developer Forum 13 26-01-2004 09:25
Leerzeilen aus *.html datei mit regex löschen. timepoint5 PHP Developer Forum 8 30-06-2003 12:16
nach einer bedingung eine email versenden gramy PHP Developer Forum 0 24-05-2002 10:44
::> url aufruf nach erfüülen von bedingung <:: ohario PHP Developer Forum 4 10-07-2001 15:47

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:59 Uhr.