1
Hallo, ich bin es schon wieder!
Ich bin immernoch dabei, Listen für Wörterbücher in eine Datenbank zu übertragen. Nun haben sich gleich zwei meiner Skripte in eine Dauerschleife gehängt und ich kann den Grund nicht finden.
Gibt es so etwas wie technische Hilfsmittel, um Dauerschleifen aufzuspüren? Vielleicht PHP-Anweisungen, die ich in Schleifen einfügen kann, um sie zu überwachen?
Falls ich das richtig sehe, dann kann eine Dauerschleife nur aus einer ungezählten Schleife entstehen? Also weder aus Zählschleifen, noch aus Konstrukten, die keine Schleifen sind?
Meine Skripte durchlaufen die Dateien mit den Wörterlisten inzwischen mittels WHILE-Schleifen, weil so größere Dateien verarbeitet werden können als mit file(); aber der Zeiger für Dateioperationen wird sich kaum selbst zurücksetzen?
Bleiben also eigentlich nur noch WHILE-Schleifen innerhalb der WHILE-Schleife. Da habe ich eine im Skript für die Chinesisch-Liste. In dieser WHILE-Schleife werden Informationen herausgezogen, die sich innerhalb von runden Klammern befinden. Erst machte das Skript Probleme, weil einige Klammern nicht geschlossen waren. Solche lassen sich leicht mit der Bedingung substr_count($Eintrag,'(')!=substr_count($Eintrag,')') aufspüren. Darunter waren einige mit dem fiesen Fehler, ASCII-Klammern mit Nicht-ASCII-Klammern zu paaren. Die würde man glatt übersehen, wenn man sie nicht mittels eines Skripts sucht. Aber inzwischen habe ich alle solchen Einträge korrigiert. Trotzdem lieferte mein Skript danach nur wenige Einträge an die Datenbank. Dann hängte es sich wieder in die Dauerschleife. Es sollten noch ungefähr dreimal mehr Einträge an die Datenbank geliefert werden...
Die andere Dauerschleife hindert mich an der Normalisierung der Einträge in den Tabellen für Japanisch. Ich habe Kana-Einträge gemacht, Kanji-Einträge gemacht und anschließend beide Tabellen automatisch durchnummerieren lassen. Für die Tabelle mit den Einträgen der Restriktionen muß mein Skript die id-Nummern passender Kana- und Kanji-Einträge aus den entsprechenden Tabellen holen. Sollte eine einfache SELECT-Anfrage mit einem Vergleich sein. Ich bin mal davon ausgegangen, daß mysqli_fetch_result() immer in eine WHILE-Schleife will...
Damit war es aber nicht getan, das Skript muß natürlich nochmal die Quelldatei durchlaufen, um herauszufinden, wo die Restriktionen gegeben sind. Statt von <entry> bis </entry> wird ein Array von <r_ele> bis </r_ele> gefüllt. Aber von bis ist eine übertriebene Behauptung, tatsächlich habe ich alle Elemente eingefüllt, die zwischen <r_ele> und </r_ele> auftauchen können. Außer <re_restr> können sie auch außerhalb auftauchen. Mit diesen Abschnitten durchläuft mein Skript FOREACH-Schleifen, bevor das Array wieder geleert wird. Innerhalb solcher werden dann die zusätzlichen Informationen aus den bereits befüllten zwei Tabellen geholt (also die id-Nummern) und schließlich die Kombination an die dritte Tabelle gesendet... Also theoretisch. Praktisch wird nichts eingetragen, nur das Skript läuft...
Ranma
Ich bin immernoch dabei, Listen für Wörterbücher in eine Datenbank zu übertragen. Nun haben sich gleich zwei meiner Skripte in eine Dauerschleife gehängt und ich kann den Grund nicht finden.
Gibt es so etwas wie technische Hilfsmittel, um Dauerschleifen aufzuspüren? Vielleicht PHP-Anweisungen, die ich in Schleifen einfügen kann, um sie zu überwachen?
Falls ich das richtig sehe, dann kann eine Dauerschleife nur aus einer ungezählten Schleife entstehen? Also weder aus Zählschleifen, noch aus Konstrukten, die keine Schleifen sind?
Meine Skripte durchlaufen die Dateien mit den Wörterlisten inzwischen mittels WHILE-Schleifen, weil so größere Dateien verarbeitet werden können als mit file(); aber der Zeiger für Dateioperationen wird sich kaum selbst zurücksetzen?
Bleiben also eigentlich nur noch WHILE-Schleifen innerhalb der WHILE-Schleife. Da habe ich eine im Skript für die Chinesisch-Liste. In dieser WHILE-Schleife werden Informationen herausgezogen, die sich innerhalb von runden Klammern befinden. Erst machte das Skript Probleme, weil einige Klammern nicht geschlossen waren. Solche lassen sich leicht mit der Bedingung substr_count($Eintrag,'(')!=substr_count($Eintrag,')') aufspüren. Darunter waren einige mit dem fiesen Fehler, ASCII-Klammern mit Nicht-ASCII-Klammern zu paaren. Die würde man glatt übersehen, wenn man sie nicht mittels eines Skripts sucht. Aber inzwischen habe ich alle solchen Einträge korrigiert. Trotzdem lieferte mein Skript danach nur wenige Einträge an die Datenbank. Dann hängte es sich wieder in die Dauerschleife. Es sollten noch ungefähr dreimal mehr Einträge an die Datenbank geliefert werden...
Die andere Dauerschleife hindert mich an der Normalisierung der Einträge in den Tabellen für Japanisch. Ich habe Kana-Einträge gemacht, Kanji-Einträge gemacht und anschließend beide Tabellen automatisch durchnummerieren lassen. Für die Tabelle mit den Einträgen der Restriktionen muß mein Skript die id-Nummern passender Kana- und Kanji-Einträge aus den entsprechenden Tabellen holen. Sollte eine einfache SELECT-Anfrage mit einem Vergleich sein. Ich bin mal davon ausgegangen, daß mysqli_fetch_result() immer in eine WHILE-Schleife will...
Damit war es aber nicht getan, das Skript muß natürlich nochmal die Quelldatei durchlaufen, um herauszufinden, wo die Restriktionen gegeben sind. Statt von <entry> bis </entry> wird ein Array von <r_ele> bis </r_ele> gefüllt. Aber von bis ist eine übertriebene Behauptung, tatsächlich habe ich alle Elemente eingefüllt, die zwischen <r_ele> und </r_ele> auftauchen können. Außer <re_restr> können sie auch außerhalb auftauchen. Mit diesen Abschnitten durchläuft mein Skript FOREACH-Schleifen, bevor das Array wieder geleert wird. Innerhalb solcher werden dann die zusätzlichen Informationen aus den bereits befüllten zwei Tabellen geholt (also die id-Nummern) und schließlich die Kombination an die dritte Tabelle gesendet... Also theoretisch. Praktisch wird nichts eingetragen, nur das Skript läuft...
Ranma