TXT auslesen und in Datenbank speichern.

refl3x

Grünschnabel
Guten Tag liebe PHP Profis,

ich hab eine Text Datei (db.txt) in dem ein langer Text steht im Format:
Lorem Ipsum amet. [1:1] Lorem Ipsum Dolor sit amet [1:2] Lorem Ipsum Dolor sit amet [1:3] Lorem Ipsum Dolor sit amet [2:1] Lorem Ipsum Dolor sit amet [2:3]
usw...

In der Datenbank gibt es folgende Spalten:
ID, Text, Nr1, Nr2

Das PHP Script sollte beim durchlauf natürlich oben anfangen und folgendermaßen die Daten in die Datenbank schreiben:

Erster DB Eintrag:
Text: Lorem Ipsum amet
Nr1: 1
Nr2: 1

Zweiter DB Eintrag:
Text: Lorem Ipsum Dolor sit amet
Nr1: 1
Nr2: 2

usw....

Was ich herausgefunden habe ist, dass man mit PHP nach bestimmten Zeichen trennen kann mit z.B.: explode(';', text);
Zusätzlich müsste man vielleicht mit einer Schleife arbeiten.

Wie sage ich dem PHP Skript jetzt, dass er den text bis zur in Spalte "Text schreiben soll und nach "[" die erste Zahl in Spalte "Nr1" und nach dem ":" die zahl in spalte "Nr2"

Wäre euch dankbar, wenn ihr mit bei meinem Problem aushelfen könntet.

Liebe Grüße
refl3x :)
 
Hallo und Willkommen.

Ich würde hier lieber mit preg_split() arbeiten, da mitten im Text auch [ und ] vorkommen können. Das Suchmuster (Pattern) dieser Funktion erlaubt dir nach folgendem zu trennen:

PHP:
<?PHP
  //
  // Text, der durchsucht werden soll
  //
  $subject = 'Lorem Ipsum amet. [1:1] Lorem Ipsum Dolor sit amet [1:2] Lorem Ipsum Dolor sit amet [1:3] Lorem Ipsum Dolor sit amet [2:1] Lorem Ipsum Dolor sit amet [2:3]';
  //
  // Der Reguläre Ausdruck
  //
  $pattern = '!([^\[\d:\d\]]*)\[(\d+):(\d+)\]!is';
  //
  // RegExp auswerten
  //
  $result = preg_match_all($pattern, $subject, $subpattern);
?>

Das Array $subpattern baut sich dann wie folgt auf:
Code:
Array
(
    [0] => Array
        (
            [0] => Lorem Ipsum amet. [1:1]
            [1] =>  Lorem Ipsum Dolor sit amet [1:2]
            [2] =>  Lorem Ipsum Dolor sit amet [1:3]
            [3] =>  Lorem Ipsum Dolor sit amet [2:1]
            [4] =>  Lorem Ipsum Dolor sit amet [2:3]
        )
    [1] => Array
        (
            [0] => Lorem Ipsum amet. 
            [1] =>  Lorem Ipsum Dolor sit amet 
            [2] =>  Lorem Ipsum Dolor sit amet 
            [3] =>  Lorem Ipsum Dolor sit amet 
            [4] =>  Lorem Ipsum Dolor sit amet 
        )
    [2] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
            [3] => 2
            [4] => 2
        )
    [3] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 1
            [4] => 3
        )
)

Hier erkennst du deutlich, dass $subpattern[1][$x] der Text ist, $subpattern[2][$x] die erste Zahl und $subpattern[3][$x] die zweite Zahl. Das dürfte für deine Schleife reichen ;)
 
Zuletzt bearbeitet:
Wie finde ich heraus, wie viele verschiedene daten es in dem Array gibt?
$subpattern[1][x] // Wie viele verschiedene werte an der Stelle X gibt es?
Ich will ja die schleife nicht statisch durchlaufen lassen sondern dynamisch, je nachdem wie viele Werte es sind.

Code:
<?PHP
  //
  // Text, der durchsucht werden soll
  //
  $subject = 'text eins [1:2] text zwei [3:4] text drei [5:6] Lorem Ipsum Dolor sit amet [2:1] Lorem Ipsum Dolor sit amet [2:3]';
  //
  // Der Reguläre Ausdruck
  //
  $pattern = '!([^\[\d:\d\]]*)\[(\d+):(\d+)\]!is';
  //
  // RegExp auswerten
  //
  $result = preg_match_all($pattern, $subject, $subpattern);

$zaehler = 0;

do {

$text = $subpattern[1][$zaehler];
$zahl1 = $subpattern[2][$zaehler];
$zahl2 = $subpattern[3][$zaehler];

    $sql = "INSERT INTO DB (text, zahl1, zahl2) VALUES ('$text', $zahl1, $zahl2)";

    $zaehler++;

} while($zaehler<x) 

?>
 
Zuletzt bearbeitet:
Zurück