Teil einer txt Datei auslesen

creativeheadz

Erfahrenes Mitglied
Hallo ich habe eine .txt Datei mit folgendem Inhalt.

Code:
<div id="tag">12</div>
<div id="monat">03</div>
<div id="jahr">1988</div>

<div id="tag">22</div>
<div id="monat">06</div>
<div id="jahr">1983</div>

usw.

Nun möchte ich immer den Tag den Monat und Das Jahr in einer variable speichern.


Mit welchem PHP Befehl kann ich beispielsweise <div id="tag">12</div> suchen ? (preg_match?) und dann die 12 herausfiltern und in Variable $tag speichern. Der HTML Code ist uninteressant.

Hat da jemand ne idee?
 
Nicht ganz glaub, weil ich ja nur den String "<div id="tag">" dann kann ich zwar schoneinmal diesen Div Tag filtern jedoch muss ich ja irgendwie alles was in diesen Divs steht herausbekommen. also nur die 12 oder nur die 22 etc...
 
Man kann es auch so lösen:

PHP:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

/** Read in the file **/
$contents = file_get_contents('partread.txt');
/** Explode it into an array **/
$lines = explode("\n", $contents);
/** Append as last element the end-node **/
array_push($lines, '</node>');
/** Append as first element the begin-node **/
$lines = array_merge(array('<node>'), $lines);
/** Walk over each line and check if it is empty **/
foreach($lines as $lineno => $content)
{
  /** If its empty, add set it to end-node and begin-node **/
  if($content == ' ')
    $lines[$lineno] = "</node>\n<node>";
}
/** Implode all lines as one single string **/
$contents = implode("\n", $lines);
/** Embed all nodes into a nodes root element **/
$contents = '<nodes>' . $contents . '</nodes>';

/** Create a XML object for easy parsing **/
$xml = new SimpleXMLElement($contents);

/** Just for debugging **/
//var_dump($xml);

foreach($xml as $node)
{
  /** Just for your information **/
  //var_dump($node);
  
  /** Now we have all single informations **/
  $day   = $node->div[0];
  $month = $node->div[1];
  $year  = $node->div[2];
  
  /** Here we are! **/
  echo "$year-$month-$day<br/>";
}

Produziert diese Ausgabe:

Code:
1988-03-12
1983-06-22
 

Anhänge

Zuletzt bearbeitet:
Super! Das is denke ich echt genau das was ich benötige :) Da ich in meinem Ausgangsbeispiel den Inhalt der Textdatei stark vereinfacht dargestellt habe, muss ich nun doch nocheinmal etwas nachfragen. Der Inhalt der Textdatei ist ein HTML Quelltext. Das bedeutet, dass in der Datei, neben den <div id="tag"></div> Tag's etc. noch weitere <div> Container als auch Tabellen usw. vorhanden sind.

Mein PHP Code:

PHP:
  $myFile = "source.txt";

 $handle = fopen($myFile, 'r'); 
 
 while (!feof($handle)){ 
 
  $subject = fgets($handle, 50);

  $pattern = '/<div class="header">([^<]+)<\/div>/isU';

  $result = preg_match_all($pattern, $subject, $subpattern);

  echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
       (($result) ? $result.' mal ' : 'nicht ').'zu.</p>';
       

  echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
 
 } 
 
 fclose($handle);


Auszug aus der Textdatei:

Code:
<div id="p2935449" class="productlistPopup" onmouseover="this.style.visibility='visible';" onmouseout="this.style.visibility='hidden';">
<div class="header">
Acer Aspire X3990 
</div>
<img class="productPic" id="img_p2935449" src="/pics/common/gifspacer.gif" width="168" height="140" alt="" />
</div>
</td>
<td width="100%" style="padding-left:5px; padding-right:5px;" valign="top" align="left" class="cellborder">
<a class="b fs13" href="/preisvergleich/OffersOfProduct/2935449_-aspire-x3990-pt-sgke2-acer.html">Acer Aspire X3990 (PT.SGKE2)</a>
&nbsp;(PC-System)
<a href="/preisvergleich/OffersOfProduct/2935449_-aspire-x3990-pt-sgke2-acer.html" class="fs10" style="text-decoration:none;">
<span class="nobr">
<img src="/pics/rating/orange.gif" width="10" height="10" alt="Besucher-Produktbewertung für Acer Aspire X3990 (PT.SGKE2): 5,0 Sterne" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/>
</span>
</a>
<br/>

Ausgegeben soll nun nur:

Code:
<div class="header">
Acer Aspire X3990 
</div>

Angeblich wird keine übereinstimmung mit dem pattern gefunden .
 
Ist logisch. Mit fgets() gehst du die Datei schrittweise (50 Zeichen pro schritt) durch und vergleichst die Teilstrings mit dem pattern. Wenn Die Datei aber gerade in diesem Bereich geteilt wird, dann gehts nicht mehr

Code:
<div id="p2935449" class="productlistPopup" onmous

eover="this.style.visibility='visible';" onmouseou

t="this.style.visibility='hidden';">
<div class="h

eader">
Acer Aspire X3990 
</div>
<img class="prod

Du würdest besser file_get_contents() nehmen und die ganze Datei auf einmal einlesen

PHP:
  $myFile = "source.txt";
  $subject = file_get_contents ($myFile);
  $pattern = '/<div class="header">([^<]+)<\/div>/isU';
  $result = preg_match_all($pattern, $subject, $subpattern);
  echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
       (($result) ? $result.' mal ' : 'nicht ').'zu.</p>';
  echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
 
Jetzt wollte ich das ganze mit nem Bild Tag machen, da in diesem Tag alle Infos drin stehen die ich benötige und habe versucht den Regulären Ausdruck abzuändern:

PHP:
$pattern = '/<img class="osimg"([^<]+)\" />/isU';


Code:
<img class="osimg" border="0" src="s1_produktbild.gif" title="Canon EOS 600D " alt="Canon EOS 600D Kit 18-55 mm" />

src="" und title="" sind für mich interressant.

Als Fehlermeldung erhalte ich:


Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '>' in C:\xampp\htdocs\ps\find.php on line 8


Bezieht sich das auf >/isU ? Wenn ja wie kann muss der richtige modifier aussehen ?
 
/ muss escapte werden -> \/

Und die Werte kannst du doch auf einmal auslesen
Code:
/<img class="osimg".*src="([^"]+)".*title="([^"]+)".*\/>/isU
 
Zurück