Christian Seiler: Textdatei in DB, bessere Lösung als mit RegEx?

Beitrag lesen

Hallo,

Wie gesagt habe ich eine Lösung mit Regulären Ausdrücken aber da eigentlich alle möglichen Zeichen vorkommen können, wird das ganze dadurch sehr erschwert.

Könnte man vielleicht auch die Zeilen mit "file()" in ein Array lesen und dann versuchen mit "explode" nach leerstellen die einzelnen Elemente herauszufiltern?

Naja, Du kannst das auch einfach per fgetcsv() einlesen und dem den Blank als Delimiter übergeben:

$fp = fopen('datei', 'r');  
while (($record = fgetcsv ($fp, 8192, ' ')) !== false) {  
  // Leerzeile oder ungültige Zeile (3 Eintäge mindestens)  
  if (count($record) <= 3) continue;  
  // Ersten Eintrag entfernen  
  $prefix = array_shift ($record);  
  // Ungültige Zeile  
  if ($prefix != '*UIConstraints:') {  
    continue;  
  }  
  // Hole option 1  
  $option1 = array_shift ($record);  
  if ($option1[0] != '*') {  
    continue; // Ungültig  
  }  
  $option1 = substr ($option1, 1); // * entfernen  
  // Hole option 2  
  $option2 = array_shift ($record);  
  if ($option2[0] != '*') {  
    // Ok, ist doch nicht Option 2, sondern Wert 1  
    $wert1 = $option2;  
    // Ungültig  
    if (!count ($record)) {  
      continue;  
    }  
    $option2 = array_shift ($record);  
    if ($option2[0] != '*') {  
      continue; // ungültig  
    }  
    $option2 = substr ($option2, 1); // * entfernen  
  } else {  
    $wert1 = NULL;  
    $option2 = substr ($option2, 1); // * entfernen  
  }  
  // Hole Wert 2  
  if (count ($record)) {  
    $wert2 = array_shift($record);  
  } else {  
    $wert2 = NULL;  
  }  
  // Ungültig  
  if (count ($record)) {  
    continue;  
  }  
  // Nun enthalten $option1, $wert1, $option2 und $wert2 die gewünschten  
  // Daten. $wert1 und $wert2 können NULL sein.  
  // Jetzt halt in die DB kloppen...  
}  
fclose ($fp);

Man könnte hier vmtl. noch ein paar Dinge verbessern, aber in der Form sollte der Algorithmus sehr einfach zu verstehen sein.

Darf ich übrigens mal fragen, was das für ein seltsames Dateiformat ist? ;-)

Viele Grüße,
Christian