Textdatei zerlegen

  • Themenstarter Themenstarter i125
  • Beginndatum Beginndatum
I

i125

Hallo zusammen,

vor lauter Bäume sehe ich den Wald nicht mehr. Ich versuche gerade verzweifelt ein kleine
Funktion zu schreiben die eine Textdatei zerlegt und mir diese in einem Array zurückgibt:

Inhalt der Datei:

<1>Ebene1</1>
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
<2>Ebene2</2>
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
<3>Ebene2</3>
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
<1>Ebene1</1>
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
<2>Ebene2</2>
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext
<3>Ebene2</3>
Freitext Freitext Freitext
Freitext Freitext Freitext
Freitext Freitext Freitext


Der Array, den ich versuche zu bauen:

Array [0]
[1] => Ebene 1
[2] => Der Freitext
[1]=>Ebene 2
[2] => Der Freitext
usw.

Ich hoffe ich könnt mir helfen.

Vielen Dank.

IGFAS
 
Zerlege einfach den Inhalt in Zeilen und prüfe den Anfang jeder Zeile auf die entsprechenden Merkmale.
 
Der Vollständigkeitshalber:

Für diesen Erguss habe ich nun 4h gebraucht... es gibt Tage da bring der beste Kaffee auch nix... wenn man total verpeilt ist. Es gibt sicherlich auch einfachere Möglichkeiten!

Grüsse
Alexander

Textdatei:

<point>
<name>X1</name>
<level>1</level>
<create>11.12.1983</create>
<change>25.02.2005</change>
<editabel>true</editabel>
<content>
sadf ksadlf k12132#a
asdfa sdf5asd4f87jsa df
</content>
</point>

<point>
<name>X2</name>
<level>2</level>
<create>11.12.1983</create>
<change>25.02.2005</change>
<editabel>true</editabel>
<content>
sadf ksadlf kjsa d
asdfas df4156fsad fasdf asdf
</content>
</point>

<point>
<name>X3</name>
<level>3</level>
<create>11.12.1983</create>
<change>25.02.2005</change>
<editabel>true</editabel>
<content>
sadf ksadlf kjsa df
sadfasd fas dfasd fasdf
sad fasdf
</content>
</point>

<point>
<name>X2</name>
<level>2</level>
<create>11.12.1983</create>
<change>25.02.2005</change>
<editabel>true</editabel>
<content>
sadf ksadasdf asdfl
asdfasdf f kjsa df
</content>
</point>


der PHP Code:

PHP:
$content_file='./content/content.htm';

function mkpoints($_file){
 function getcontent($conten_file){
  $openfile = fopen($conten_file, "r");
  $rtn_array=array();
  $rtn_string;

  if($openfile){
   $counter = 0;
   while(!feof($openfile)){
    $read=fgets($openfile, 10000);
    array_push($rtn_array,trim($read));
    $rtn_string=$rtn_string.trim($read);
    $counter++;
   }
   fclose($openfile);
  }
  return array($rtn_array,$rtn_string);
 }

 function readxml($data){
  $xml_parser = xml_parser_create();

  xml_parse_into_struct($xml_parser, $data, $vals, $index);
  xml_parser_free($xml_parser);
  
  $params = array();
  $level = array();
  foreach ($vals as $xml_elem) {
    if ($xml_elem['type'] == 'open') {
     if (array_key_exists('attributes',$xml_elem)) {
       list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
     } else {
       $level[$xml_elem['level']] = $xml_elem['tag'];
     }
    }
    if ($xml_elem['type'] == 'complete') {
     $start_level = 1;
     $php_stmt = '$params';
     while($start_level < $xml_elem['level']) {
       $php_stmt .= '[$level['.$start_level.']]';
       $start_level++;
     }
     $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
     eval($php_stmt);
    }
  }
  return $params;
 }
 $output=array();
 $_cto=getcontent($_file);
 $xml_stacks=explode('<point>',$_cto[1]);
 for($r=0;$r<count($xml_stacks);$r++){
  $xml_payload=explode('</point>',$xml_stacks[$r]);
  $xml_stack=readxml('<point>'.$xml_payload[0].'</point>');
  array_push($output,$xml_stack);
 }
 return $output;
}

$rtn=mkpoints($content_file);
print_r($rtn);

Ausgabe:
HTML:
Array
(
    [0] => Array
        (
            [POINT] => 
        )

    [1] => Array
        (
            [POINT] => Array
                (
                    [NAME] => X1
                    [LEVEL] => 1
                    [CREATE] => 11.12.1983
                    [CHANGE] => 25.02.2005
                    [EDITABEL] => true
                    [CONTENT] => sadf ksadlf k12132#aasdfa sdf5asd4f87jsa df
                )

        )

    [2] => Array
        (
            [POINT] => Array
                (
                    [NAME] => X2
                    [LEVEL] => 2
                    [CREATE] => 11.12.1983
                    [CHANGE] => 25.02.2005
                    [EDITABEL] => true
                    [CONTENT] => sadf ksadlf kjsa dasdfas df4156fsad fasdf asdf
                )

        )

    [3] => Array
        (
            [POINT] => Array
                (
                    [NAME] => X3
                    [LEVEL] => 3
                    [CREATE] => 11.12.1983
                    [CHANGE] => 25.02.2005
                    [EDITABEL] => true
                    [CONTENT] => sadf ksadlf kjsa dfsadfasd fas dfasd fasdfsad fasdf
                )

        )

    [4] => Array
        (
            [POINT] => Array
                (
                    [NAME] => X2
                    [LEVEL] => 2
                    [CREATE] => 11.12.1983
                    [CHANGE] => 25.02.2005
                    [EDITABEL] => true
                    [CONTENT] => sadf ksadasdf asdflasdfasdf f kjsa df
                )

        )
}
 
Zurück