Olli1967: Text einlesen, verändern und in eine Datenbank speichern.

Beitrag lesen

Hallo zusammen,

ich habe folgende Aufgabenstellung bekommen:

1.) Stündlich Telegramme vom Server abzuziehen.
2.) Telegramme formatieren.
3.) formatierte Daten in einer Datenbank (MySQL) speichern.

Mein Lösungsansatz war, zuerst die Dateien mit Robocopy stündlich zu syncronisieren. Anschliessend in einer Textdatei zusammen fassen und mit PHP öffnen, bearbeiten......

------------------------------------------------------------------------------

Script 1:

<?php
$datei = file("G:/neu.txt");
$dateiR = "v:/file.csv";
$fp = fopen($dateiR,"w");
$i=0;
foreach($datei AS $ausgabe) {
   $ausgabe = strtr($ausgabe, ":", ",");
   $ausgabe = str_replace("<-", ",<-", $ausgabe);
   $ausgabe = str_replace("S->", ",S->", $ausgabe);
   $ausgabe = str_replace("<S", "S", $ausgabe);
   $ausgabe = str_replace("<M", "M", $ausgabe);
   $ausgabe = str_replace(" SP", ",SP", $ausgabe);
   $ausgabe = str_replace(" TCP", ",TCP", $ausgabe);
   $ausgabe = str_replace("*>", "*", $ausgabe);
   $ergebnis = trim ($ausgabe);
   $zerlegen = explode(",", $ergebnis);
   $zeile=implode(',',$zerlegen)."\n";
   fputs($fp,$zeile);
}

fputs($fp,$data); # daten in datei speichern
   $i++;

fclose($fp);
echo "fertig";
?>

----------------------------------------------------------------------------------

und speichern.

----------------------------------------------------------------------------

Script 2:

<?php
  $db = mysqli_connect("localhost","root","null","","3306") or die("Keine Verbindung zur Datenbank!");

$datum = date("Y-m-d");

//Eine Datenbank, mit dem aktuellen Datum als Bezeichnung, wird erstellt

$sql = "CREATE DATABASE telegramme";

$ergebnis=mysqli_query($db, $sql);

//Zur aktuellen(eben erstellten) Datenbank connecten

$db = mysqli_connect("localhost","root","null","telegramme","3306") or die("Keine Verbindung zur neuen Datenbank!");

//Tabelle wird erstellt

//$tabelle_erstellen="CREATE TABLE  connect".$datum." (                      ;Hier wird die Tabelle mit dem aktuellen Datum angelegt

$tabelle_erstellen="CREATE TABLE  daten (

Datum varchar(16)collate latin1_general_ci NOT NULL,
  Zeit varchar(12) collate latin1_general_ci NOT NULL,
  Melder varchar(10) collate latin1_general_ci NOT NULL,
  Richtung varchar(4) NOT NULL,
  Daten varchar(50) NOT NULL,

PRIMARY KEY  (Datum,Zeit)
) ENGINE=MyISAM DEFAULT CHARSET=latin1";

$ergebnis=mysqli_query($db, $tabelle_erstellen);

//Der von der Batchdatei erstellte Flatfile wird geöffnet und als Variable eingelesen.

$statistik = 'file.csv';
$fp = fopen ( $statistik, 'r' );

//Die Variable wird hier in sein Bestandteile zerlegt, neu zusammengefügt und anschliessend in die Datenbank geschrieben.

while (!feof($fp))
{
$ipteiler = fgets($fp);
list($t1, $t2, $t3, $t4, $t5, $t6, $t7, $t8, $t9) = explode(",", $ipteiler);
$ins = ("replace into telegramme.daten
values('".$t1.", ".$t2."','".$t3.":".$t4.":".$t5.":".$t6."','".$t7."','".$t8."','".$t9."');");

$ergebnis=mysqli_query($db, $ins);
  }
// Hier ist das Script durchgelaufen

echo 'beendet';

fclose($fp);

?>

------------------------------------------------------------------------------

Beim testen hat alles so funktioniert wie ich mir das vorgestellt hatte leider hatten die Testdateien auch nur eine Größe von 489kb und nicht 1GB.
Da ich PHP Neuling bin weiß ich jetzt nicht mehr weiter wie ich so eine Große Datei einlesen kann. Für Hilfe würde ich mich riesig freuen.

Gruß Olaf