1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Textdatei auslesen per PHP

Dieses Thema im Forum "PHP" wurde erstellt von flippar, 16. April 2012.

  1. flippar

    flippar Grünschnabel

    Hallo ich brauche Hilfe bei folgendem Problem:

    Ich möchte mehrere Textdateien mit einem Script auslesen .

    Die Textdateien Sind Immer folgendermaßen aufgebaut:

    LINKSA:
    LinksA1
    LinksA2
    LinksA3

    LINKSB
    LinksB1
    LinksB2
    LinksB3

    LINKSC
    LinksC1
    LinksC2
    LinksC3

    LINKSD
    LinksD1
    LinksD2
    LinksD3

    Ich möchte diese nun so auslesen dass ich quasi jedesmal den 1./2./3. Link in einem Array habe
    und diese dann per Echo ausgeben kann.

    Also echo : Blabla $LinksA[0] blubb blubb $LinksB[0] bli bla blu $LinksC[0] und $LinksD[0]

    Ich habe leider große Probleme mit dem explode und komme da auf keinen Grünen Zweig.

    Besonderheit ist noch, dass die Anzahl der Links je nach Txt Datei variiert. Also es je nach Textdatei auch mal bis LinksA20 gehen kann.


    Wäre über Hilfe dankbar. Bin verzweifelt :(
  2. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Aber das Muster ist wie folgt:
    • Überschrift
    • drei Links
    • Leerzeile
    • (fang wieder bei Punkt 1 an)
  3. flippar

    flippar Grünschnabel

    Ja genau. Nur es sind nicht immer 3 Links. Das sollte über eine kleine Veränderung im Skript halt anpassbar sein.
    LinksA , LinksB etc. haben aber immer die gleiche Anzahl an Unterpunkten ( hier halt 3)
  4. chmee

    chmee mod | media Moderator

    Nachdem Du die Datei eingelesen hast.. Wonach suchst Du denn, um die Einträge zu unterscheiden? ich würde dem Trenner/der Überschrift etwas Eindeutiges geben, zB zwei Rauten am Anfang, damit wir für den Code einen sinnvollen Unterscheider geben können für

    (A) das ist ne Überschrift
    (B) hier beginnt ein neues Array

    Beispiel-Textdatei
    Code (Text):
    1.  
    2. ##LINKSA
    3. www.phreekz.de
    4. www.dslr-kleinanzeigen.de
    5. www.xbmc.org
    6. ##LINKSB
    7. www.google.de
    8. www.tutorials.de
    9. ##LINKSC
    10. www.fotografie.de
    11. www.cinema.de
    12. www.coding.de
    13.  
    Interessant ist, mit welchem Texteditor die Textdatei geschrieben wurde, ist das Zeilenende (besser Zeilenumbruch) mit \n oder mit \r\n gesetzt? Sollte man diese noch löschen?
    Code (PHP):
    1.  
    2. <?php
    3. $array = file("/textdatei.txt");
    4.  
    5. $linkarray=array();
    6. $index=-1;
    7.  
    8. foreach($array as $row)
    9. {
    10.   if(strpos($row,"##")!=0)
    11.   {
    12.     $index++;
    13.     $linkarray[$index]=array();
    14.     $linkarray[$index][0]=$row;
    15.     $linkarray[$index][1]=array();
    16.   }
    17.   else
    18.   {
    19.     $linkarray[$index][1][]=$row;
    20.   }  
    21. }
    22.  
    23. var_dump($linkarray);
    24.  
    Leerzeichen betrachte ich nicht und das Wegnehmen der Rauten für eine "schönen" Trennertitel genauso wenig (auch nicht das Wegkürzen der Zeilenumbrüche), das kannst Du selbst einbauen ;) UND der Code ist jetzt ohne Test hingekritzelt - es könnten Fehler drin sein..

    mfg chmee
    Zuletzt bearbeitet: 16. April 2012
  5. flippar

    flippar Grünschnabel

    Das gibt nur leere Arrays aus. :(
  6. timestamp

    timestamp Mitglied Käsekuchen

    Das sollte so funktionieren:
    Code (PHP):
    1.  
    2. if(strpos($row,"##") ==0)
    3.  
    Wenn nicht, beantworte noch folgende Fragen:
    Wie sieht denn deine Textdatei aus? Ist sie im richtigen Verzeichnis?
  7. chmee

    chmee mod | media Moderator

    In diesem Fall muss es sogar typensicher sein, denn kein Fund würde auch als 0 oder false interpretiert werden, somit also
    Code (PHP):
    1. strpos($row,"##")===0
    (und der Dateiname muß entweder ohne slash oder mit ./ angegeben sein. sorry.)
    mfg chmee
  8. flippar

    flippar Grünschnabel

    PHP:
    1.  
    2. array(11) { [0]=> array(2) { [0]=> string(9) "##LINKSA " [1]=> array(0) { } } [1]=> array(2) { [0]=> string(15) "www.phreekz.de " [1]=> array(0) { } } [2]=> array(2) { [0]=> string(26) "www.dslr-kleinanzeigen.de " [1]=> array(0) { } } [3]=> array(2) { [0]=> string(13) "www.xbmc.org " [1]=> array(0) { } } [4]=> array(2) { [0]=> string(9) "##LINKSB " [1]=> array(0) { } } [5]=> array(2) { [0]=> string(14) "www.google.de " [1]=> array(0) { } } [6]=> array(2) { [0]=> string(17) "www.tutorials.de " [1]=> array(0) { } } [7]=> array(2) { [0]=> string(9) "##LINKSC " [1]=> array(0) { } } [8]=> array(2) { [0]=> string(18) "www.fotografie.de " [1]=> array(0) { } } [9]=> array(2) { [0]=> string(14) "www.cinema.de " [1]=> array(0) { } } [10]=> array(2) { [0]=> string(13) "www.coding.de" [1]=> array(0) { } } }
    Das ist jetzt das Ergebnis und leider immer noch nicht was ich möchte.
    Die Textdatei sieht so aus wie oben im vorigen Code-Post beschrieben.
  9. timestamp

    timestamp Mitglied Käsekuchen

    PHP Nimmt es mit den Arraydeklarationen nicht so genau @chmee.
    Daher geht auch folgendes (erspart einem die leeren Arrayeinträge):

    Code (PHP):
    1.  
    2. <?php
    3. $array = file("/textdatei.txt");
    4.  
    5. $linkarray = array(); //auch nicht nötig, aber gehört zu schönem programmierstil dazu, finde ich
    6. $index=-1;
    7.  
    8. foreach($array as $row)
    9. {
    10.   if(strpos($row,"##") === 0)
    11.   {
    12.     $index++;
    13.     $linkarray[$index][0]=$row;
    14.   }
    15.   else
    16.   {
    17.     $linkarray[$index][1][]=$row;
    18.   }  
    19. }
    20.  
    Wo ist denn jetzt dein Problem?
    Du hast doch alles in dem Array was du brauchst. Du kannst es sogar direkt in der Schleife ausgeben lassen.
    Zuletzt bearbeitet: 16. April 2012
  10. chmee

    chmee mod | media Moderator

    Wie Du es möchtest, kannst Du Dir selbst zusammencoden. Wir haben Dir ein simples und funktionierendes Beispiel gebracht. Wir sind aber nicht dazu da, Wünsche zu befolgen ;) Hilfe zur Selbsthilfe!

    mfg chmee
  11. flippar

    flippar Grünschnabel

    Irgendwa stimmt da aber nicht. wenn ich jetzt einfach mal print $row mache gibt er mir "www.coding.de" aus. das ist aber die letzte zeile.

    Ihr sollt keine Wünsche befolgen sondern mir einfach bei meiner Frage helfen. Meine Selbsthilfe dauert nun schon Stunden darum bin ich hier!
  12. chmee

    chmee mod | media Moderator

    Das fertige Array heisst ja auch $linkarray - Aufbau sieht man in der Ausgabe mittels var_dump()

    mfg chmee
  13. flippar

    flippar Grünschnabel

    Achso danke. Jetzt gibt er mir bei var_dump($linkarray); zwar alles aus aber bei var_dump($linkarray[1]); gibts wieder nur NULL

    Hier mal die Struktur:

    PHP:
    1.  
    2. array(1)
    3. { [-1]=> array(1)
    4. { [1]=> array(11)
    5. {
    6. [0]=> string(9) "##LINKSA "
    7. [1]=> string(15) "www.phreekz.de "
    8. [2]=> string(26) "www.dslr-kleinanzeigen.de "
    9. [3]=> string(13) "www.xbmc.org "
    10. [4]=> string(9) "##LINKSB "
    11. [5]=> string(14) "www.google.de "
    12. [6]=> string(17) "www.tutorials.de "
    13. [7]=> string(9) "##LINKSC "
    14. [8]=> string(18) "www.fotografie.de "
    15. [9]=> string(14) "www.cinema.de "
    16. [10]=> string(13) "www.coding.de" } } }


    EDIT: Ahh okay. die Struktur ist mir nun klar.
    Jetzt aber noch folgendes Problem: Wie mache ich es dass die Links unter ##LINKSC ein eigenes Array bekommen ?
    Zuletzt bearbeitet: 16. April 2012
  14. chmee

    chmee mod | media Moderator

    Du benutzt das Script von timestamp. Änder, wie von mir beschrieben in der Abfrage != nach ===

    Dann ist es so wie von mir angedacht, dann sieht die Struktur nämlich so aus:
    Code (Text):
    1.  
    2. $linkarray => array(3)
    3.  
    4. [0]=> array(2)
    5. [0][0]=> "##LINKSA"
    6. [0][1]=> array(3)
    7.       [0]=> "www.phreekz.de"
    8.       [1]=> "www.dslr-kleinanzeigen.de"
    9.       [2]=> "www.xbmc.org"
    10.  
    11. [1]=> array(2)
    12. [1][0]=> "##LINKSB"
    13. [1][1]=> array(2)
    14.       [0]=> "www.google.de"
    15.       [1]=> "www.tutorials.de"
    16.  
    17. [2]=> array(2)
    18. [2][0]=> "##LINKSC"
    19. [2][1]=> array(3)
    20.       [0]=> "www.fotografie.de"
    21.       [1]=> "www.cinema.de"
    22.       [2]=> "www.coding.de"
    23.  
    Dann hast Du mit
    Code (PHP):
    1.  
    2. echo count($linkarray);
    3.  
    Die Anzahl der Listen. Mit
    Code (PHP):
    1.  
    2. echo $linkarray[0][0];
    3.  
    Hast Du den Namen der Liste 0 und in
    Code (PHP):
    1. var_dump($linkarray[0][1]);
    steckt das Array der Links zu 0.

    Aufgeräumter gehts wohl kaum. Mit zwei foreach-Schleifen ist das Ding wieder in jegliche html-Auflistung ausgeworfen.

    mfg chmee
    Zuletzt bearbeitet: 17. April 2012
  15. flippar

    flippar Grünschnabel

    Okay hab jetzt soweit alles. Eine letzte Frage noch:
    PHP:
    1.  
    2. $anzahl = count($ULlinksArray);
    3. $i = 0 ;
    4. while ($i <= $anzahl):
    5.     echo $ULlinksArray['$i];
    6.     echo "<br>"
    7.    $i++;
    8. endwhile;
    9.  
    Zur Erklärung : In $ULlinksArray sind die Links als Arrays gespeichert. Sie werden gezählt.
    Nun möchte ich dass alle einzeln in einer While Schleife ausgegeben werden.
    Also es quasi so aussieht:

    PHP:
    1.  
    2.  echo $ULlinksArray[0];
    3.     echo "<br>"
    4.  echo $ULlinksArray[1];
    5.     echo "<br>"
    6.  echo $ULlinksArray[2];
    7.     echo "<br>"
    8.  echo $ULlinksArray[3];
    9.     echo "<br>"
    10.  
    Bis quasi alle Links ausgegeben sind
  16. chmee

    chmee mod | media Moderator

    Zuletzt bearbeitet: 17. April 2012

Diese Seite empfehlen