Peter: X Zeilen einer großen Textdatei tauschen

Hallo ihr :)

Ich habe eine knapp 4 GB große Textdatei (SQL-Dump), den ich importieren möchte. Die Datenbank existiert schon, nur leider steht nach div. Kommentaren in Zeile 20 des Dumpts ein "CREATE DATABASE XY" und darunter dann ein "USE XY". Dies konnte ich nur herausfinden, indem ich die Datei heruntergeladen habe um den Download nach 2 Sekunden zu beenden, so hatte ich nur einen 200-kb-Schnipsel.
Die Datenbank XY existiert jedenfalls auf dem Server nicht und ich kann sie auch nicht anlegen, da ich auf den Datenbanknamen keinen Einfluss habe.
Ich möchte Sie auf der Konsole importieren und habe sie auch schon so auf dem Server liegen.

Nun stellt sich die Frage, wie ich diese 2 Zeilen ausgetauscht bekomme.
Selbst wenn ich sie auf meinen lokalen Rechner lade, kenne ich keinen Editor, mit dem ich eine solch große Datei öffnen, geschweige denn bearbeiten könnte (plus 2 Wochen Uploadzeit wieder...)
Vi (auf der Konsole) kann damit auch nicht umgehen, ein Versuch und er setzt die Datei auf Null, alleine schon wenn ich sie aufrufe.
Bleibt PHP, dachte ich. Aber alleine ein file() würde logischerweise schon mind 4 GB RAM benötigen, einmal an "CREATE DATABASE" exploden => 8 GB. Plus die Rechenleistung um das zu machen, 4/8 GB sind nur der reine Speicherverbrauch der Daten.

Um es kurz zu fassen: Kennt jemand eine Möglichkeit, in PHP nur bestimmte Zeichen/Zeilen einer Datei auszulesen bzw. zu überschreiben, ohne dass der Rest der Datei ausgelesen wird? Also eben nicht eine funktion, die die Datei komplett einliest und danach die gewünschten Zeilen extrahiert, sonst habe ich ja wieder 4 GB im RAM.

Der Server hat 4 GB RAM, hat ja aber nebenher auch noch was zu arbeiten, deswegen wäre mir eine andere Lösung lieber.

Danke, Peter :)

  1. Hi,

    Um es kurz zu fassen: Kennt jemand eine Möglichkeit, in PHP

    nö.

    Der Server läuft unter irgendeinem Unix?
    Wenn ja: benutze sed

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hallo Andreas,

      Der Server läuft unter irgendeinem Unix?
      Wenn ja: benutze sed

      Danke, sowas habe ich gesucht, und das ist auch noch rasend schnell, ist eigentlich nur durch die Schreibgeschwindigkeit der Festplatte begrenzt :-)

      Peter.

      1. Hello,

        Der Server läuft unter irgendeinem Unix?
        Wenn ja: benutze sed

        Danke, sowas habe ich gesucht, und das ist auch noch rasend schnell, ist eigentlich nur durch die Schreibgeschwindigkeit der Festplatte begrenzt :-)

        Das Problem ist eben: Textdatei.
        Das bedeutet, dass die gesamte Datei einmal durchgerattert werden muss, wenn man etwas "ausschneiden" will. Da sind 4GB schon eine arge Beslastung...

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Hi!

    Kennt jemand eine Möglichkeit, in PHP nur bestimmte Zeichen/Zeilen einer Datei auszulesen bzw. zu überschreiben, ohne dass der Rest der Datei ausgelesen wird?

    Die Dateifunktionen um fopen()/fgets() können stückweise einlesen.

    Lo!

    1. Hallo Lo,

      Die Dateifunktionen um fopen()/fgets() können stückweise einlesen.

      Okay, danke für den Hinweis, wusste ich nicht.
      Aber kann ich dann auch irgendwie stückweise schreiben?
      Peter.

      1. Hi!

        Die Dateifunktionen um fopen()/fgets() können stückweise einlesen.
        Okay, danke für den Hinweis, wusste ich nicht.
        Aber kann ich dann auch irgendwie stückweise schreiben?

        Schau dir die restlichen Dateisystemfunktionen an, besonders was mit write und put im Namen. Stückweises Schreiben gehört ebenso wie das Lesen zum grundlegenden Funktionsumfang von Dateisystemfunktionen.

        Lo!