Mini Parser für Textdatei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mini Parser für Textdatei

    Hallo Forum,

    ich habe ein Problem mit dem ich leider nicht weiterkomme. Ich benötige einen Miniparser, der mir eine Textdatei in ein Array legt.

    Vielleicht kann mir jemand weiterhelfen. Bin für jeden Tipp dankbar.

    Es geht um Folgendes:

    -----------------------------------------------------------

    <system>
    user: hans
    pw: geheim
    status: in Bearbeitung
    notice: eine Notiz
    </system>

    <reply>
    server: 2
    ip: 88.88.88.88
    </reply>

    -----------------------------------------------------------

    So, ich bräuchte eine Funktion, ich ich dann wie folgt nutzen könnte.

    $array[system][user] = hans
    $array[reply][server] = 2

    usw.


    Hat jemad eine Idee, wie man so etwas realisieren könnte?

    Wenn Ihr mehr Infos braucht, bitte kurz Bescheid sagen. Poste gerne weitere Infos.

    1000 Dank an Alle.


    Grüße...

  • #2
    assoziatives mehrdimensionales array ?

    $array = array('system'=>array('user'=>2));

    oder soll diese text-datei <system> ... </system>
    eingelesen werde?

    mit file oder readfile in einen buffer einlesen
    und dann string nach 'user' durchsuchen.

    wenn du die möglichkeit hast, bau
    die textdatei anders:

    <user>hans</user>


    und am allerbesten natürlich xml-konform

    Kommentar


    • #3
      Original geschrieben von tok
      assoziatives mehrdimensionales array ?

      $array = array('system'=>array('user'=>2));

      oder soll diese text-datei <system> ... </system>
      eingelesen werde?

      mit file oder readfile in einen buffer einlesen
      und dann string nach 'user' durchsuchen.

      wenn du die möglichkeit hast, bau
      die textdatei anders:

      <user>hans</user>


      und am allerbesten natürlich xml-konform

      Hallo,

      danke Für Deine Antwort. Nun, ich fürchte, ich habe mich schlecht ausgedrückt. Also, alles was ich gepostet hab (zwischen den beiden Trennstrichen) steht in einer Datei und soll geparst werden.

      Ich habe leider keine Möglichkeit die Datei zu ändern, sonst hätt ichs schon XML konform gemacht.

      Die Datei ist so wie sie da steht. Deshalb würd ich sie halt gern in ein Array "zerlegen", um damit arbeiten zu können.

      Jetzt deutlicher? Wenn nicht, nochmal nachfragen.

      Danke...

      Kommentar


      • #4
        zeilenweises einlesen einer datei:

        $file = "./text.txt";
        $array_zeilen = file($file);

        dann musst du jede komponente des arrays
        mit str_pos(...) nach 'user' dursuchen (gibt 1. position von 'user' im string zurück) und dann mit str_sub(...) dir von dieser pos,
        den rest zurückgeben lassen.

        evtl. whitespaces dann noch entfernen

        Kommentar


        • #5
          oder mit

          strstr ( string $array[zeilen-nr], 'user' )

          gibt dir ab der position des,wo 'user' gefunden wurde, den
          rest der zeile zrück. und das wäre ja dann dein 'hans'.

          so machst du das dann auch mit allen anderen zeilen.

          Kommentar


          • #6
            ob das geht?:

            -Datei einlesen

            -immer einen Datensatz (z.B. system) auslesen

            -den Inhalt mit split(); in array-elemente teilen
            $array = split(":",$string);

            Dann hast ein Array mit Elementen, wobei jedes zweite Element der Inhalt ist.

            Array[0] = User
            Array[1] = Ruprecht

            Kommentar


            • #7
              kleiner Gedanken anstoß:
              PHP-Code:
              $str "<system>
              user: hans
              pw: geheim
              status: in Bearbeitung
              notice: eine Notiz
              </system>

              <reply>
              server: 2
              ip: 88.88.88.88
              </reply>"
              ;

              preg_match_all("|<[^>]+>(.*)</[^>]+>|Us"$str$rst);
              echo 
              "=========================\n";
              print_r($rst);

              for ( 
              $i 0$i sizeof($rst[1]); $i++ )
              {
                  
              $curr = &$rst[1][$i];
                  
              $curr rtrim(trim($curr));
                  if ( 
              strlen($curr) > )
                  {
                      
              $tmp_arg preg_split("/[\n]+/"$curr);
                      
              print_r($tmp_arg);
                  }

              Vielleicht hilft es dir ja weiter. Ansonsten einfach nochmal fragen.

              Kommentar


              • #8
                PHP-Code:
                preg_match_all("|<[^>]+>(.*)</[^>]+>|Us",...) 
                sucht dieser ausdruck außerhalb von tag-zeichen(<...>) ?

                ich könnt den evtl gut gebrauchen, um html-tags zu irgnorieren
                beim suchen und ersetzen nach schlüsselwörtern.

                Kommentar


                • #9
                  Original geschrieben von reallife
                  kleiner Gedanken anstoß:
                  PHP-Code:
                  $str "<system>
                  user: hans
                  pw: geheim
                  status: in Bearbeitung
                  notice: eine Notiz
                  </system>

                  <reply>
                  server: 2
                  ip: 88.88.88.88
                  </reply>"
                  ;

                  preg_match_all("|<[^>]+>(.*)</[^>]+>|Us"$str$rst);
                  echo 
                  "=========================\n";
                  print_r($rst);

                  for ( 
                  $i 0$i sizeof($rst[1]); $i++ )
                  {
                      
                  $curr = &$rst[1][$i];
                      
                  $curr rtrim(trim($curr));
                      if ( 
                  strlen($curr) > )
                      {
                          
                  $tmp_arg preg_split("/[\n]+/"$curr);
                          
                  print_r($tmp_arg);
                      }

                  Vielleicht hilft es dir ja weiter. Ansonsten einfach nochmal fragen.
                  PERFETK! Erstmal 1000 Dank. Das sieht schon mal sehr gut aus.

                  Als Ausgabe ergibt das ja folgendes:

                  ---------------------------------------------------
                  Array
                  (
                  [0] => user: hans
                  [1] => pw: geheim
                  [2] => status: in Bearbeitung
                  [3] => notice: eine Notiz
                  )
                  Array
                  (
                  [0] => server: 2
                  [1] => ip: 88.88.88.88
                  )
                  ---------------------------------------------------

                  jetzt müsste nur noch user in einem eigenen array stehen und als wert hans haben. das heißt: die angaben vor dem doppelpunkt müssten also das array sein und das was hinter dem doppelpunkt steht der entsprechende wert.

                  bin leider damit etwas überfordert und würde mich super freuen, wenn du mir noch mal unter die arme greifen könntest.

                  1000 dank!


                  grüße...

                  Kommentar


                  • #10
                    bin leider damit etwas überfordert und würde mich super freuen, wenn du mir noch mal unter die arme greifen könntest.
                    Das dachte ich mir schon fast..
                    PHP-Code:
                    preg_match_all("|<([^/].*)>|"$str$rst_tags);
                    preg_match_all("|<[^>]+>(.*)</[^>]+>|Us"$str$rst);

                    $arr = array();
                    for ( 
                    $i 0$i sizeof($rst[1]); $i++ )
                    {
                        
                    $curr = &$rst[1][$i];
                        
                    $curr rtrim(trim($curr));
                        if ( 
                    strlen($rst[1][$i]) > )
                        {
                            
                    $tmp_arg preg_split("/[\n]+/"$curr);
                            
                            for ( 
                    $o 0$o sizeof($tmp_arg); $o++ )
                            {
                                list(
                    $tag$value) = split(":"$tmp_arg[$o]);
                                
                    $tag rtrim(trim($tag));
                                
                    $value rtrim(trim($value));
                                
                                
                    $arr[$rst_tags[1][$i]][$tag] = $value;
                            }
                        }

                    Ausgabe sieht dann bei mir so aus:
                    PHP-Code:
                    Array
                    (
                        [
                    system] => Array
                            (
                                [
                    user] => hans
                                
                    [pw] => geheim
                                
                    [status] => in Bearbeitung
                                
                    [notice] => eine Notiz
                            
                    )

                        [
                    reply] => Array
                            (
                                [
                    server] => 2
                                
                    [ip] => 88.88.88.88
                            
                    )


                    Den kompletten Inhalt einer Datei bekommst du auch auf folgende Weise:
                    PHP-Code:
                    $str file_get_contents("datei.txt"); 

                    Kommentar


                    • #11
                      Original geschrieben von reallife
                      Das dachte ich mir schon fast..
                      PHP-Code:
                      preg_match_all("|<([^/].*)>|"$str$rst_tags);
                      preg_match_all("|<[^>]+>(.*)</[^>]+>|Us"$str$rst);

                      $arr = array();
                      for ( 
                      $i 0$i sizeof($rst[1]); $i++ )
                      {
                          
                      $curr = &$rst[1][$i];
                          
                      $curr rtrim(trim($curr));
                          if ( 
                      strlen($rst[1][$i]) > )
                          {
                              
                      $tmp_arg preg_split("/[\n]+/"$curr);
                              
                              for ( 
                      $o 0$o sizeof($tmp_arg); $o++ )
                              {
                                  list(
                      $tag$value) = split(":"$tmp_arg[$o]);
                                  
                      $tag rtrim(trim($tag));
                                  
                      $value rtrim(trim($value));
                                  
                                  
                      $arr[$rst_tags[1][$i]][$tag] = $value;
                              }
                          }

                      Ausgabe sieht dann bei mir so aus:
                      PHP-Code:
                      Array
                      (
                          [
                      system] => Array
                              (
                                  [
                      user] => hans
                                  
                      [pw] => geheim
                                  
                      [status] => in Bearbeitung
                                  
                      [notice] => eine Notiz
                              
                      )

                          [
                      reply] => Array
                              (
                                  [
                      server] => 2
                                  
                      [ip] => 88.88.88.88
                              
                      )


                      Den kompletten Inhalt einer Datei bekommst du auch auf folgende Weise:
                      PHP-Code:
                      $str file_get_contents("datei.txt"); 

                      Hallo!

                      Nochmals 1000 Dank. Leider muss ich noch mal nachfragen, da der neue Code bei mir nur eine leere Seite ausgibt. Kann ja auch nicht anders sein, weil keine Ausgabe (print etc.) erfolgt. Kannst Du mir noch sagen, wie ich auf das Array wie in der ersten Funktion zugreife um die Werte auszugeben?

                      Danke - danke - danke!

                      Kommentar


                      • #12
                        also das resultat steht in $arr
                        PHP-Code:
                        print_r($arr); 
                        vergiss den string aber vorher nicht. oder lies es gleich aus der datei aus.

                        Kommentar

                        Lädt...
                        X