Hallo alle Zusammen. Ich habe die Überschrift und Artikeleinführung zu Ihrem Titelthema "Babylon zu fünft" gelesen. Es fing sofort an bei mir in den Fingern zu kribbeln. Nach der "Spezifikation der Aufgabe" machte ich mich sofort ans Werk ein eigenes Java-Programm zu schreiben, ohne den Artikel weiter gelesen zu haben. Mein Ziel war es mein Programm mit den von Ihnen dargelegten Lösungen zu vergleichen ohne vorher "beeinflusst" worden zu sein. Bei meiner Grundüberlegung kam ich zum Ergebnis, dass ein komplettes Einlesen des Textes nicht optimal ist. Zwar bietet das System, auf welchem das Programm ausgeführt werden soll, enorme Reserven, jedoch kann ich nicht davon ausgehen, dass mein Programm das einzige ist was zur Ausführungszeit läuft und somit nicht alle Rezourcen belegen. Außerdem sollte dieses Programm auch auf "kleineren" Systemen ebenso gut laufen. Würde der Speicher nämlich nicht ausreichen und es zu einer Auslagerung in die SWAP-Partition kommen, könnte das Programm auch gleich den bereits bearbeiteten und fertigen Datenstrom auf die Festplatte speichern. Nach erfolgreichem Erstellen des Java-Codes habe ich ihn mit den Vorschlägen verglichen und war sehr überrascht, dass überwiegend genau umgekehrt gedacht wurde. Es wurde der komplette Text in den Arbeitsspeicher eingelesen und verarbeitet. Die von Ihnen eingesetzte Datei hatte 55 MByte. Die Speicherbedarf einzelner Programme ging bis zu 420 MBytes. Was wäre jedoch, wenn der Text wie in Ihrer Spezifikation mehrere hundert MBytes gehabt hätte? Es wäre wohl eine zeitfressende Auslagerung (SWAP) nicht umgänglich gewesen. Zusätzlich war ich von dem Ansatz meines Java-Programmierkollegen James Gosling, welchen ich hier an dieser Stelle gern Grüßen möchte, überrascht die überwiegende "arbeit" des Programms in der Methode main unterzubringen. Ich habe die Klasse textnumbers.class so geschrieben, dass sie sich von anderen Java-Programmen als Objekt einbinden und mit der Methode go(String datei) ausführen lässt. Die main-Methode nutze ich nur um die Klasse auch alleine "ausführbar" zu machen. Man kann sie als eine Art Startscript betrachten. Am Ende Ihres Artikels rufen Sie die Linux-Magazin-Leser auf selber aktiv zu werden. Verbesserungsvorschläge seien Erwünscht. Nichts liegt wir ferner als die veröffentlichten Programmzeilen zu verbessern. Jedes Programm an sich ist lauffähig. Nur das ist entscheidend. Außerdem wäre es Anmaßend zu meinen solchen Gurus etwas vormachen zu können. Jeder von denen kann uns alle in die berühmte Tasche stecken. Interessant fand ich auch die Aussage von Zeev Suraski. Der Durchlauf seines PHP Scripts würde eine verbesserte Leistung bekommen, wenn man 1000 Zeilen einliest und dann erst verarbeitet. Also genau der Mittelweg! Weder alles einlesen noch nur eine Zeile. Ist auf jeden Fall wert ausprobiert zu werden. Nun aber zur Erklärung meines Quellcodes: Anfangs sind sämtliche wichtigen Variablen definiert. Nicht zwingend erforderlich, jedoch erkennt der Fachmann gleich die gedankliche Grundstruktur des Codes. Anschließend kommt die main-Methode, welche das schon beschriebene alleinige Starten der Klasse ermöglicht. Danach kommt eine typische Java-Vorgehensweise. Nämlich das Zuweisen einiger Variablen mithilfe einer gleichnamigen Methode wie die Klasse selbst. Nun kommt die Methode go(String datei), welche den übergebenen Dateinamen in ein File-Objekt umwandelt und anschließend Zeile für Zeile ausliest, verarbeitet und wieder abspeichert. Es wird eine zweite Datei angelegt, welche zum Speichern genutzt wird. Somit ist die Originaldatei sicherheitshalber noch vorhanden da ich von hier aus unmöglich sagen kann ob sie noch gebraucht wird oder nicht. Im Verlauf des Methodenblocks fallen einem sofort die drei for-Schleifen ins Auge. Die erste durchsucht den aktuellen String nach dem Muster einer Fußnote. Die zweite nummeriert die gefundenen Eintragungen um. Sie nutzt das Ergebnis der ersten und läuft "vorwärts", damit die unbekannten und neuen Fußnoten von links nach rechts aufsteigend durchnummeriert werden. Die dritte Schleife nutzt ebenfalls das Ergebnis der ersten, läuft jedoch "rückwärts". Ein an mehreren Stellen zu editierender String muss von hinten her bearbeitet werden, damit ein vorderer Zeichenversatz sich nicht nach hinten fortsetzt. Würde ein String zwei oder mehr Fußnoten beinhalten und die erste würde von einer zweistelligen Zahl auf eine einstellige Zahl geändert, dann würde die ermittelte Position der zweiten Fußnote nicht mehr stimmen. Angehängt an diese Methode findet man eine weiter, welche zum Schreiben der bearbeiteten Strings dient. Viele Grüße an Alle! Have a lot of fun. PS: Angaben zu meiner Person. Mein Name ist Kai Triebel, bin 31 Jahre alt und von Beruf Chemiemeister. Ich arbeite in Göttingen in einer Firma welche Feuerfest-Produkte herstellt. Zusätzlich zu meiner Arbeit bin ich Selbständig und biete Dienstleistungen in der Javaprogrammierung an (Anwendungen, Datenbanken, ...). Angaben zum Programm. Der Quellcode wurde getestet mit der Java-Version 1.6.0_03