tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von ZodiacXP
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
285
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    refl3x refl3x ist offline Rookie
    Registriert seit
    Oct 2002
    Beiträge
    9
    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
     

  2. #2
    Registriert seit
    Mar 2004
    Beiträge
    1.856
    Blog-Einträge
    2
    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-Code:
    <?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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    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
    Geändert von ZodiacXP (16.09.08 um 13:29 Uhr)
    refl3x bedankt sich. 
    Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
    und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!


    MfG, Zod

    __________________
    rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)

  3. #3
    refl3x refl3x ist offline Rookie
    Registriert seit
    Oct 2002
    Beiträge
    9
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    <?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) 
     
    ?>
    Geändert von refl3x (16.09.08 um 14:07 Uhr)
     

  4. #4
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    PHP-Code:
    count($subpattern[1]) 
    Das dürfte dir weiterhelfen, denke ich
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 13.05.10, 16:00
  2. Byte[] in SQL Datenbank speichern und auslesen
    Von awaiK im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 05.10.08, 14:48
  3. Antworten: 1
    Letzter Beitrag: 03.08.07, 20:28
  4. JTable Zelle in Datenbank speichern und Auslesen?
    Von Dadu2006 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 04.05.07, 09:10
  5. Antworten: 3
    Letzter Beitrag: 10.12.02, 14:45