wuscheck: Bestimmte Zahl aus Textfile auslesen

Hallo,

gibt es eine Möglichkeit eine Zahl aus einem Textfile auszulesen?

Beispiel:

Ausschnitt aus dem Textfile:
.
.
.
[Teams]
1=TVL
2=SGD
3=HSG
4=TVK
5=HSGO
6=SGDB
7=TGS
8=TGN
.
.
.

Ich brauche nur die Zahl, die vor TVK steht..., geht das? Und wenn ja wie?

Gruss

Patrick

  1. Moin wuscheck,

    gibt es eine Möglichkeit eine Zahl aus einem Textfile auszulesen?

    Beispiel:
    4=TVK
    Ich brauche nur die Zahl, die vor TVK steht..., geht das? Und wenn ja wie?

    Die Funktion explode() sollte Dir weiter helfen:
    http://www.php.net/manual/de/function.explode.php

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. gibt es eine Möglichkeit eine Zahl aus einem Textfile auszulesen?

      Beispiel:
      4=TVK
      Ich brauche nur die Zahl, die vor TVK steht..., geht das? Und wenn ja wie?

      Die Funktion explode() sollte Dir weiter helfen:
      http://www.php.net/manual/de/function.explode.php

      Und wie kann ich erkennen wo in diesem Textfile diese Zeile steht? Und die zweite Frage: wie bekomme ich diese Zeile in eine Variable,d amit ich dann mit explode weiterarbeiten kann?

      Gruss

      wuscheck

      1. Hast du die Datei geöffnet?

        http://de3.php.net/manual/de/function.fopen.php

        1. Hast du die Datei geöffnet?

          Öffnen speichern und so weiter ist nicht das Problem...

          In der Datei stehen ausser den Teams auch noch andere Informationen, die ich nicht brauche...
          Die Infos die ich benötige stehen unter dem Begriff [Teams] und dann wiederum in einer der Zeilen...
          Das Proggi ist ein Fremdprogramm... um allerdings die Daten für andere Programme "brauchbar" zu machen brauche ich die Zahl (id) vor dem Namen meines Heimatvereins....
          Heisst für mich also:
          Suchen nach dem Heimatverein im Textfile und dann erkennen der ID...

          Leider hab ich mehr mit DB am Hut als mir Textfiles... eine kleine Hilfe wäre super.

          Gruss

          wuscheck

          1. Moin nochmal,

            Suchen nach dem Heimatverein im Textfile und dann erkennen der ID...

            Leider hab ich mehr mit DB am Hut als mir Textfiles... eine kleine Hilfe wäre super.

            Es geht sicher eleganter, aber dass sollte Dir weiter helfen.
            Am Beispiel für TVK:

            $pointer=fopen($Pfad_Dateiname,"r");

            if ( $pointer )
               {
                 while(!feof($pointer))
                      {
                        $line=fgets($pointer, 512);
                        $ID=explode("=",$line);

            if ( $ID[1] == 'TVK' )
                           {
                             $Gesuchte_ID=$ID[0];
                             break;
                           }
                      }

            flcose($pointer);
               }

            *KOPFEINZIEH*

            regds
            Mike©

            --
            Freunde kommen und gehen. Feinde sammeln sich an.
            1. $pointer=fopen($Pfad_Dateiname,"r");

              if ( $pointer )
                 {
                   while(!feof($pointer))
                        {
                          $line=fgets($pointer, 512);
                          $ID=explode("=",$line);

              if ( $ID[1] == 'TVK' )
                             {
                               $Gesuchte_ID=$ID[0];
                               break;
                             }
                        }

              flcose($pointer);
                 }

              Danke für die Hilfe!!!

            2. Hello,

              Es geht sicher eleganter, aber dass sollte Dir weiter helfen.

              gewiss:

              $_ini = parse_ini_file('dateiname');
              $key = array_search($wert, $_ini['Teams']);

              Und dann aber drauf achten, ob $key === false ist. Dann wurde nämlich kein Rang gefunden.

              $key  $wert
                 1=Blah

              Harzliche Grüße vom Berg
              esst mehr http://www.harte-harzer.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hello,

                Hello,

                Es geht sicher eleganter, aber dass sollte Dir weiter helfen.

                gewiss:

                $_ini = parse_ini_file('dateiname');

                < http://de2.php.net/manual/en/function.parse-ini-file.php>

                besser:

                $_ini = parse_ini_file('dateiname',true);

                $key = array_search($wert, $_ini['Teams']);

                Und dann aber drauf achten, ob $key === false ist. Dann wurde nämlich kein Rang gefunden.

                $key  $wert
                   1=Blah

                Harzliche Grüße vom Berg
                esst mehr http://www.harte-harzer.de

                Tom

                Harzliche Grüße vom Berg
                esst mehr http://www.harte-harzer.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
      2. Moin nochmal,

        Und wie kann ich erkennen wo in diesem Textfile diese Zeile steht? Und die zweite Frage: wie bekomme ich diese Zeile in eine Variable,d amit ich dann mit explode weiterarbeiten kann?

        Ich ging davon aus, dass Du die Datei zeilenweise lesen kannst.
        Ist dem nicht so? Dann würde Dein Problem aus mehreren Fragen bestehen.

        regds
        Mike©

        --
        Freunde kommen und gehen. Feinde sammeln sich an.
  2. Hallo,

    [Teams]
    TVL=1
    SGD=2
    HSG=3

    wenn Du es so aufbaust, und Dann die Funktion parse_ini_file()
    http://de.php.net/manual/en/function.parse-ini-file.php
    benutzt, geht alles wie von selbst...

    LG

    Chris

  3. Moin!

    Ist der Text eindeutig?
    Ist die Datei sehr groß?

    Ok. Die Datei ist "sehr" groß.

    <?
    $str="TGS";
    $strFile="datei.dat";

    Einlesen der einen Zeile mit dem "system()" Befehl und Unix-Zeilenfilter grep

    $strZeile=system("grep $str $strFile");

    Trennen am Gleichheitszeichen-> Array

    $arZeile=explode("=", $strZeile);

    Ausgabe des Inhaltes:

    echo $arZeile[0];
    ?>

    Variante A1 (mit AWK):

    $str="TGS";
    $strFile="datei.dat";

    Einlesen der einen Zeile mit dem "system()" Befehl und Unix-Zeilenfilter grep und AWK

    $strZahl=system("grep $str $strFile | awk -F= '{ print $1 }'");
    echo $strZahl;

    Du solltest $str und $strFile mit escapeshellcmd() behandeln, falls diese Daten _irgendwie_ von außen beinflusst werden können.

    Variante 2 für "kurze" Dateien (Alles in PHP:)

    <?
    $str="TGS";
    $strFile="datei.dat";
    $arZeilen=file($strFile);

    $arZeilen enthält jetzt als Array die Zeilen der Textdatei.

    foreach ($arZeilen as strZeile) {

    Für jedes array-Element als Zeile

    $arZeile=explode("=", $strZeile);
      if  ($arZeile[1]==$str) {
         echo $arZeile[0];
         break;
      }
    }
    ?>

    Der Unterschied ist folgender: Wenn datei.dat wirklich sehr groß ist ist das nicht nur schneller (der UNIX-Befehl grep ist schnell...), sondern spart auch das Einlesen in PHP: Folge: Du umgehst eine möglicherweise zur Disfunktion führende Speicherbeschränkung :)

    Allerdings solltest Du bei solchen Dateigrößen schon eine Datenbank benutzen.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. Moin!

      Da hatte sich ein Fehler eingeschlichen. Beim Vergleich muss "getrimmt" werden. Grund: das letzte Element, des mit explode() hergestellten Arrays enthält den Zeilenumbruch mit.

      Außerdem hatte ich ein $-Zeichen vergessen.

      Hier also die PHP-Version:

      <?
      $str="TGS";
      $strFile="datei.dat";
      $arZeilen=file($strFile);

      $arZeilen enthält jetzt als Array die Zeilen der Textdatei.

      foreach ($arZeilen as $strZeile) {

      Für jedes array-Element als Zeile

      $arZeile=explode('=', $strZeile);
        # Zerlege die Zeile in ein Array am '='
        if  (trim($arZeile[1])=="$str") {
           # wenn Übereinstimmung besteht:
           echo $arZeile[0];
           # Ausgabe
           break;
           # Schleife beenden, muss ja nicht sinnlos weiter "rennen".
        }
      }

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    2. Moin!

      <?

      Variante A1 (mit AWK):

      $str="TGS";
      $strFile="datei.dat";

      Einlesen der einen Zeile mit dem "system()" Befehl und Unix-Zeilenfilter grep und AWK

      $strZahl=system("grep $str $strFile | awk -F= '{ print $1 }'");
      echo $strZahl;

      ?>

      Mal eine Frage in die Runde: grep und (g)awk gelten als sehr performant. Aber wie ist es mit dem System-Aufruf?

      Hat da irgendwer einen Tip, wo ich dazu was anlesen kann? Nicht wie es geht, sondern zu Performance-Fragen. Obiger Filter spart ja immerhin ein paar Schleifchen.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development