Zur Navigation

Dauerschleifen finden [2]

11 Ranma (Gast)

Die Klammern um die SELECT-Subquery haben das Problem beseitigt. Aber das führt dann dazu, daß das Skript statt den erwarteten Werten überall eine 0 in die Tabellen eintrug. Das passiert wohl hauptsächlich, wenn versucht wird, NULL in eine Tabellenspalte einzutragen, die auf NOT NULL gesetzt ist und einen Integer erwartet. Bei der Erwartung eines Strings wäre es ein leerer String gewesen.

Also habe ich das Skript einige Male modifiziert und schließlich sogar dreimal neu geschrieben, aber die ersten Versuche brachten keine Besserung. Ich konnte Arrays anzeigen lassen, also lag es schonmal nicht am lesenden Teil. Ich konnte nicht mehr benötigte Zeilen entfernen und das Ergebnis in eine weitere Datei schreiben lassen. Darin sahen die Einträge normal aus. Dafür gab es allerdings auch keine Subquery. Immerhin konnte ich danach mit kürzeren Dateien arbeiten und darum die Daten mit file() einlesen und schließlich nur noch FOREACH-Schleifen verwenden. Es wäre mir nämlich immernoch ein Rätsel wie das ginge, sollte ich mal über FOREACH eine Dauerschleife bauen. Ich glaube, daß man dafür ein unendlich großes Array bräuchte. Nullen eintragen ging aber noch. Also versuchte ich es ohne die Subquery und legte noch extra Tabellen an, um dort alles als Strings einzutragen.

Die jetzige Form des Skripts liest die kürzeren Dateien mittels file() ein, wendet ein implode() darauf an und dann ein explode() mit bestimmten XML-tags als Delimiter. Dadurch hätte die Auswertung dann im Prinzip genau gleich wie bei einer csv-Datei ablaufen können sollen. Das heißt, Element für Element wird in weitere Arrays aufgetrennt und innerhalb nur zwei weiterer verschachtelter FOREACH-Schleifen wird alles an die Datenbank geschickt. Dieses Skript trägt tatsächlich nichtleere Strings in die zusätzlichen Tabellen ein. Aber viel zu viele. Anscheinend versucht es, sämtliche Zeilen aus der Datei mit sämtlichen Zeilen zu kombinieren. Die gekürzte Datei enthält immer noch über hundertfünfzigtausend Zeilen, sie alle miteinander zu kombinieren ist also keine gute Idee. Die wesentliche Information geht dabei natürlich auch verloren. Also muß ich das noch unterbinden, aber theoretisch hätte das bereits durch das erste explode() verhindert werden sollen....
Ranma

20.11.2015 05:08

12 Ranma (Gast)

Da scheinen nichtdruckbare und nichtsichtbare Zeichen enthalten gewesen zu sein. Darum konnte explode() nicht richtig trennen. Das Array nach file() und vor dem implode() Zeile für Zeile per trim() zu reinigen (das erforderte ein zweites Array) hat Abhilfe geschaffen. Als Strings sind die Zuordnungen nun in den Datenbanktabellen. Jetzt müssen nur noch passende Queries für die Normalisierung gefunden werden....
Ranma

21.11.2015 05:34

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]