Tos mě překvapil, já jsem netušil, že se to ještě nějak dělí.
Pro zajímavost skript připojuji níže; cíl skriptu: prostý textový soubor je zpracován tak, aby byl každý záznam (slovo, číslo či interpunkce) na novém řádku, a tím se získá výchozí dokument pro další zpracování (komentáře jsou ale německy, protože se jedná o česko-německý projekt)
Protože všechno donedávna fungovalo, tak mě nenapadlo hledat chybu ve skriptu, spíš Apache vs. aktualizace Ubuntu (?)
<?php
header('content-type: text/html; charset=utf-8');
print <<<EndOfHtml
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>W-liste-GR-de</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
EndOfHtml;
// die zu bearbeitende Quelldatei - darf nicht geändert werden
// die Quelldatei für Wortliste wurde mit XSLT gewonnen als Plaintext File
//$startdatei = "grass_de_plaintext.txt";
$startdatei = "grass_de_ohne.txt";
$zieldatei = "grass_wortliste_ziel.txt";
if ( file_exists ($zieldatei)) {
unlink ($zieldatei);
}
////////////////////////// Start der Bearbeitung //////////////////////////////
if (! file_exists($startdatei)) {
echo "<b>Die Datei</b> \"$startdatei\" <b>existiert <font size=\"+1\" color=\"red\">NICHT</font></b><br /><br /><br />";
exit;
} else {
$fp = fopen ( $startdatei, 'r' ); // Name der Datei wird in die Variable $fp platziert - Pointer
$datei_inhalt = fread ( $fp, filesize ( $startdatei ) ); // die Datei wird eingelesen
fclose ( $fp );
}
$muster="/[ ]/";
$replace=" ";
$datei_inhalt = preg_replace($muster,$replace,$datei_inhalt);
$muster="/[\r\n]?[\r\n]?[\?|\!|\.|,|:|;|«|»|‹|›|„|“|…|\(|\)|\/|´|'|&|\"]/";
$replace="";
$erg = preg_replace($muster,$replace,$datei_inhalt);
///////////////////////////////////////////////////////////
// das folgende Ziel ist: die Wortgrenze wird durch einen Stern gekennzeichnet
$muster="/[\r\n][\r\n]|[\r\n]/"; // löscht die Leerzeilen
$replace=" ";
$erg = preg_replace($muster,$replace,$erg);
$erg = preg_replace("/ | | /"," ",$erg); // mehrere Leerzeichen zu einem
$erg = preg_replace("/\ /"," *",$erg);
// Wortende: 'Blank+Stern' - muss nicht sein, aber Stern wird bei Array Erstellung/Auflösung verwendet und Blank bleibt als Wortgrenze erhalten
//$erg = strtolower($erg); // wegen der Sortierung werden alle Anfangsbuchstaben kleingesetzt
///////////////////////////////////////////////////////////////
// Ziel hier: Array bilden
$array = split ( "\*", $erg );
//$element1 = array_shift ( $array ); // das erste Array-Element wird rausgenommen
sort ( $array ); // das Array wird alphabetisch sortiert
///////////////////////////////////////////////////////////////
// Ziel: sortierter Inhalt
$zaehle = array_count_values ( $array ); // berechnet, wie oft ein jeweiliges Wort vorkommt
while ( list ( $key, $val ) = each ( $zaehle ) )
{
$laenge = strlen ( $val ); // wegen Sortierung: misst die Länge von Inhalt der Variable $val
if ( $laenge == 1 ) { // wegen Sortierung: überprüft die Länge von $val, wenn 1, fügt drei Nullen hinzu
$val = ("000".$val);
}
if ( $laenge == 2 ) { // wegen Sortierung: überprüft die Länge von $val, wenn 2, fügt zwei Nullen hinzu
$val = ("00".$val);
}
if ( $laenge == 3 ) { // wegen Sortierung: überprüft die Länge von $val, wenn 1, fügt eine Null hinzu
$val = ("0".$val);
}
$erg_sortiert .= "$val " . " $key *"; // die zwei Ausgabewerte werden in eine Variable gesteckt
}
///////////////////////////////////////////////////////////////
// Ziel: sortiertes Ergebnis von Nummerieren weiter bearbeiten
$array_d_inhalt = split ( "\*", $erg_sortiert ); // erneut wird ein Array gebildet
//$element2 = array_shift ( $array_d_inhalt ); // das erste Array-Element wird rausgenommen
sort ( $array_d_inhalt ); // Sortierung des Arrays
foreach ( $array_d_inhalt as $array_d_zeilen ) { // das Array wird in Einzelementen gezeigt
$muster="/(?<=[0-9]{4})( )( )?/";
$replace="\t";
$array_d_zeilen = preg_replace($muster,$replace,$array_d_zeilen);
$zusammen .= "$array_d_zeilen" . "\r\n";
$muster="/( )( )?(?=[\r\n])/";
$replace="";
$zusammen = preg_replace($muster,$replace,$zusammen);
}
/////// ----------------------------
$fp = fopen ( $zieldatei, 'a+' );
fwrite ( $fp, $zusammen ); // schreibt den Inhalt von $erg in die neue Datei
fclose ( $fp ); // die Datei $wlnmrt wird geschlossen, erst hier, damit sie nicht nach jedem Eintrag getrennt geöffnet und geschlossen werden muss
?>
</body>
</html>
EDIT: promiňte, popis skriptu je zde špatně, to je předchozí krok, tento skript vychází z textového souboru, kde: co záznam to nový řádek. Cíl: abecední seznam slov (plaintext file), a u těch, která se opakují bude vypsáno, kolikrát se v textu vyskytují.