Arbeiten mit Textdateien ... nur die 2. Zeile lesen

  • geschlossen

  • mortician
  • 1421 Aufrufe 21 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Arbeiten mit Textdateien ... nur die 2. Zeile lesen

    Hey!
    Habe folgendes Problem und hoffe Ihr könnt mir helfen!
    Also, ich habe eine Textdatei die folgendermaßen aussieht:

    Quellcode

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5

    Nur will ich in einer Php-Datei die Textdatei, nur die 2. Zeile lesen und um 1 erhöhen und wieder speichern.
    Nun mein Versuch:

    PHP-Quellcode

    1. <?php
    2. $file_array = file("wahl.txt");
    3. $de = $file_array[1];
    4. $de++;
    5. $datei = fopen("wahl.txt","w");
    6. fputs($datei,"$de");
    7. fclose($datei);
    8. echo "$de";
    9. ?>
    Alles anzeigen


    Als fertiges Dokument kommt immer raus:

    Quellcode

    1. 2

    Also das um 1 erhoehen funktioniert nicht!
    Wäre cool, wenn Ihr mir helfen könntet!

    Greetz mortician
    [size=1][FONT="Courier New"]###############_###_####_
    #_ __ #___ _ _| |_(_)__(_)__ _ _ _###############new uploads: [1] [2] [3] [4] [5] [6] [7] [8]
    |#'##\/ _ \ '_|##_| / _| / _` | ' \
    |_|_|_\___/_|##\__|_\__|_\__,_|_||_|###############Bis 28. Sept. weg[/FONT][/size]
  • so gehts:

    PHP-Quellcode

    1. <?php
    2. $file_array = file("wahl.txt");
    3. $de = $file_array[1];
    4. echo $de."<hr>";
    5. $de = $de +1;
    6. $datei = fopen("wahl.txt","w");
    7. fputs($datei,"$de");
    8. fclose($datei);
    9. echo "$de";
    10. ?>
    Alles anzeigen


    ich kann mir gut vorstellen das es einmal geklappt hat und du dann vergessen hast die txt wieder umzuschreiben...

    aber was genau willst du denn machen denn so steht später in der txt nur noch 3... bzw. $de +1

    wenn du genau sagst was du machen willst sag ich dir wie :P

    Falk
  • Hey!
    Also ich bin gerade am Coden eines Voting-Scriptes!
    Versuche es wenigstens!
    Da habe ich mehrere Antworten und will natürlich wenn einer zb Antwort 2 genommen hat, Antwort 2 um 1 erhoehen...
    Ich habe nämlich keine Lust für jede Antwort nen neues Textdokument zu machen!

    Ps: Falls es geklappt hat, werde ich editen!
    DANKE schonmal!

    Greetz mortician

    \\EDIT

    Also es hat nicht funktioniert!
    Kommt immer 1 raus!
    Hilfee...

    mfg mortician
  • auf jedenfall würd ich sagen is das mit DB leichter ;)
    egal ich schreib mal eben was vlt. bekomm ich das in den nächsten 15 min hin und kannst das gleich mit nach hause nehmen ^^

    auf jedenfall solltest du machen statt "w" einfach r+ machen sonst wird die datei geleert ;)
    hab ich im beispiel verchekt ^^

    Falk
  • soooooooo
    das is ne billige variante aber klappt bei mir wunderbar ^^
    ich persönlich hätte es anders gemacht weiß aber nich ob es dann nicht zu unverständlich wäre ;)

    außerde wie gesagt "w" setzt die datei auf 0, also leert sie

    vote.txt

    Quellcode

    1. 1
    2. 1
    3. 1
    4. 1
    5. 1


    vote.php

    PHP-Quellcode

    1. <?php
    2. srand(time());
    3. $wahl = mt_rand(1,5); // eine zufalls wahl erstellen
    4. $datei = fopen("vote.txt","r+");
    5. $c = 0; // counter
    6. while($row = fscanf($datei,"%s\n"))
    7. {
    8. $zeile[$c] = $row[0];
    9. if ($wahl == $c+1)
    10. {
    11. $zeile[$c]++;
    12. }
    13. $c++;
    14. }
    15. fclose($datei);
    16. $datei = fopen("vote.txt","w");
    17. $inhalt = implode("\n",$zeile);
    18. fputs($datei,$inhalt);
    19. fclose($datei);
    20. ?>
    Alles anzeigen


    $wahl musst du dann später je nach user auswahl verändern ;)

    Falk
  • Hey!
    W Modus in R+ zu aendern hat auch nicht funktioniert.
    @ BloodVortex:
    hat leider auch nix gebracht.
    @ Falk:
    Erstmal danke für das Script.
    Ich wollte nun kein fertiges Voting-Script!
    Ich wollte eigentlich nur wissen, wie ich zb eine 2. Zeile aus einer Textdatei zu lesen, die Zahl um 1 zu erhoehen und dies dann in die Datei zu speichern!
    Wäre nett, wenn mir das einer erklären könnte!
    Bin kein Php-OberGenie, aber Basis-Wissen ist verhanden ^^

    Mfg mortician
  • oO" doch bringt das was... schau hier h**p://master-net.de/test_fsb.php

    Also so siehts aus ;)

    PHP-Quellcode

    1. <?php
    2. $file_array = file("wahl.txt");
    3. $de = intval($file_array[1]);
    4. $de++;
    5. echo "$de";
    6. ?>
  • aber so hat er es ja noch immer nicht in der datei eingefügt

    willst du das überhaupt wenn ja sags mir, habe keine lust mir wieder umsonst arbeit zu machen ;)

    übrigens klappt BloodVortex:
    code bei mir

    habe gerade php5 am laufen wegen der oop, hast du noch 4 ?

    Falk
  • sry fürs offtopic:

    ich bin nichmal sicher ob er es speichern will aber fürn vote system würds sinn machen, also schätz ich mal das er $de in der zweiten stelle speichern will ^^

    warten wir halt bis er sagt was er will ^^

    Falk
  • Hey!
    Also was is will!
    Ich will die Antworten, in die textdatei "wahl.txt" speichern!
    Ich habe insgesamt 5 Antworten!
    Da, wenn jemand im Formular Antwort 2 angibt, sollte sich in
    der "wahl.txt" die 2. Zeile um 1 erhoehen, da der User die Antwort gemacht hat!
    Ich habe keine Lust insgesamt 5 Textdateien für jede Antwort zu machen!
    Beispiel:
    Frage: Wer wird Weltmeister bei der WM 2006?
    Antworten: Brasilien; Deutschland; Frankreich; Argentinien; Ein anderes Land
    Die Wahl.txt sieht noch wie folgt aus:
    1
    2
    3
    4
    5
    Und der User würde als Antwort "Deutschland"!
    Dann soll die Wahl.txt nachher so aussehen
    1
    3
    3
    4
    5
    Ich hoffe nun wisst Ihr was ich meine und Ihr koennt mir helfen...
    Mfg mortician
    [size=1][FONT="Courier New"]###############_###_####_
    #_ __ #___ _ _| |_(_)__(_)__ _ _ _###############new uploads: [1] [2] [3] [4] [5] [6] [7] [8]
    |#'##\/ _ \ '_|##_| / _| / _` | ' \
    |_|_|_\___/_|##\__|_\__|_\__,_|_||_|###############Bis 28. Sept. weg[/FONT][/size]
  • Probier das hier mal ;)

    PHP-Quellcode

    1. <?php
    2. $file_array = file("wahl.txt");
    3. $file_array[1] = intval($file_array[1])+1;
    4. $datei = fopen("wahl.txt","w");
    5. $x=0;
    6. while(array_key_exists($x,$file_array)) {
    7. fputs($datei,$file_array[$x]."\n");
    8. $x++;
    9. }
    10. fclose($datei);
    11. ?>
    Alles anzeigen

    Dafür brauchste aber PHP 4 >= 4.1.0 ;)
    Also, ich glaub das müsste funtzen ^^"
  • Hier ist mal meine Version. Ist zwar länger als die anderen, aber dafür sollte es problemlos gehen.

    Also in der Vorschau sieht es so aus, als ob das Board den Code etwas zerpflückt. Und zwar immer an der Stelle, wo der Datensatz zusammengestellt wird.
    Es gibt dort definitiv keine Leerzeichen im String ($ds). Zwischen den Hochkommas "" sind keine Leerzeichen!!

    PHP-Quellcode

    1. <?
    2. //Config
    3. $DATENBANK = "wahl.txt";
    4. //Übernahme von der Abstimmungsseite
    5. $abstimmung0 = $_POST['abstimmung0'];
    6. $abstimmung1 = $_POST['abstimmung1'];
    7. $abstimmung2 = $_POST['abstimmung2'];
    8. $abstimmung3 = $_POST['abstimmung3'];
    9. $abstimmung4 = $_POST['abstimmung4'];
    10. //nur zum testen, ich wollte nicht extra ein Formular erstellen
    11. //$abstimmung2="hallo";
    12. //Abfangen, wenn garnichts gewählt wurde
    13. if ($abstimmung0=="" and $abstimmung1=="" and $abstimmung2=="" and $abstimmung3=="" and $abstimmung4=="")
    14. {
    15. echo "<center><br><h1><font color=red>Sie hatten nichts ausgewählt !!</font></h1></center>";
    16. }
    17. //sonst
    18. else
    19. {
    20. //Einlesen der Textdatei
    21. $file_array = file("$DATENBANK");
    22. //Einzelarray in Strings legen
    23. $zeile_null = $file_array[0];
    24. $zeile_eins = $file_array[1];
    25. $zeile_zwei = $file_array[2];
    26. $zeile_drei = $file_array[3];
    27. $zeile_vier = $file_array[4];
    28. //Datensätze entsprechend der Auswahl zusammenstellen
    29. if ($abstimmung0!="")
    30. {
    31. //String hochzählen
    32. $zeile_null = $zeile_null +1;
    33. //Datensatz ($ds) zusammenstellen
    34. $ds = "$zeile_null\r\n$zeile_eins\r$zeile_zwei\r$zeile_drei\r$zeile_vier";
    35. }
    36. if($abstimmung1!="")
    37. {
    38. //String hochzählen
    39. $zeile_eins = $zeile_eins +1;
    40. //Datensatz ($ds) zusammenstellen
    41. $ds = "$zeile_null\r$zeile_eins\r\n$zeile_zwei\r$zeile_drei\r$zeile_vier";
    42. }
    43. if($abstimmung2!="")
    44. {
    45. //String hochzählen
    46. $zeile_zwei = $zeile_zwei +1;
    47. //Datensatz ($ds) zusammenstellen
    48. $ds = "$zeile_null\r$zeile_eins\r$zeile_zwei\r\n$zeile_drei\r$zeile_vier";
    49. }
    50. if($abstimmung3!="")
    51. {
    52. //String hochzählen
    53. $zeile_drei = $zeile_drei +1;
    54. //Datensatz ($ds) zusammenstellen
    55. $ds = "$zeile_null\r$zeile_eins\r$zeile_zwei\r$zeile_drei\r\n$zeile_vier";
    56. }
    57. if($abstimmung4!="")
    58. {
    59. //String hochzählen
    60. $zeile_vier = $zeile_vier +1;
    61. //Datensatz ($ds) zusammenstellen
    62. $ds = "$zeile_null\r$zeile_eins\r$zeile_zwei\r$zeile_drei\r$zeile_vier";
    63. }
    64. //Datei zum schreiben öffnen
    65. $datei= fopen("$DATENBANK","w");
    66. //Schreiben des Datensatzes in die Datei
    67. fputs($datei,$ds);
    68. //Schließen der Datei
    69. fclose ($datei);
    70. // Bestätigung
    71. echo "<center><br><h2>Ihre Auswahl wurde zur Abstimmung hinzugefügt...</h2></center>";
    72. //Nur zum Spass die Ansicht der Textdatei - so lassen sich die Einträge live verfolgen
    73. $liesmal = fopen("$DATENBANK", "r");
    74. $liesmal_in = fread($liesmal,filesize("$DATENBANK"));
    75. fclose($liesmal);
    76. $array_liesmal = split("\n", $liesmal_in);
    77. echo "Inhalt der Textdatei<br><br>";
    78. foreach ($array_liesmal as $ausgabe)
    79. {
    80. echo "$ausgabe <br>";
    81. }
    82. }
    83. ?>
    Alles anzeigen
  • also ich würds so machen ^^:

    zumal nach 5 mal ausführen is die datei riesig wegen den ganzen absätzten ^^

    so bekommst du jedenfalls die 2. reihe ;)

    PHP-Quellcode

    1. $datei = str_replace("\"","\\\"",implode("\n",file("vote.txt")));
    2. $reihe = 2;
    3. $datei_neu = preg_match("/(".$reihe.":) (.*)/",$datei,$vote);



    in vote[0] steht: 2: wert
    in vote[1] steht: 2:
    in vote[2] steht: wert

    die datei vote.txt muss aber dann so aussehen:

    Quellcode

    1. 1: 1
    2. 2: 1
    3. 3: 1
    4. 4: 1
    5. 5: 1


    ich habs auch vollendet mit einfügen aber das willst du ja nicht oder ?

    damit kannst du nämlich jede reihe auslesen und erhören oder halt jede zeile einzeln auslesen, so:

    PHP-Quellcode

    1. $datei = fopen("vote.txt",r+);
    2. while($zeile = fgets($datei,1024))
    3. echo $zeile."<br>";
    4. fclose($datei);


    so

    HF ;)
    Falk

    Falk
  • Falk schrieb:

    also ich würds so machen ^^:

    zumal nach 5 mal ausführen is die datei riesig wegen den ganzen absätzten ^^

    mist... stimmt, aber eine einfache if Abfrage kann da doch helfen ;)
    Bsp:. ^^

    PHP-Quellcode

    1. if(array_key_exists($x+1,$file_array)) fputs($datei,"\n");

    ;) xD
  • Ich habe auch noch einmal nachgebessert. Allerdings müssen die Einträge in der Datenbank (wahl.txt) so aussehen: 1|2|3|4|5 . Aber das dürfte wohl nicht das Problem sein, oder? Ist ja nur eine einmalige Anpassung. Aber dadurch wird die Textdatei nicht künstlich aufgebläht.

    Auch diesmal gilt:

    in der Vorschau sieht es so aus, als ob das Board den Code etwas zerpflückt. Und zwar immer an der Stelle, wo der Datensatz zusammengestellt wird.
    Es gibt dort definitiv keine Leerzeichen im String ($ds). Zwischen den Hochkommas "" sind keine Leerzeichen!!

    Hier mal meine 'voting.php'

    PHP-Quellcode

    1. <?
    2. // --- Config ---
    3. $DATENBANK = "wahl.txt";
    4. //--- Übernahme von der Abstimmungsseite ---
    5. $vote0 = $_POST['vote0'];
    6. $vote1 = $_POST['vote1'];
    7. $vote2 = $_POST['vote2'];
    8. $vote3 = $_POST['vote3'];
    9. $vote4 = $_POST['vote4'];
    10. //---nur zum testen, ich wollte nicht extra ein Formular erstellen ---
    11. //$vote2="1";
    12. //--- Abfangen, wenn garnichts gewählt wurde ---
    13. if ($vote0=="" and $vote1=="" and $vote2=="" and $vote3=="" and $vote4=="")
    14. {
    15. echo "<center><br><h1><font color=red>Sie hatten nichts ausgewählt !!</font></h1><br><br><a href=index.php><b>Zurück zur Auswahl</b></a></center>";
    16. }
    17. //--- sonst ---
    18. else
    19. {
    20. //--- Datei öffnen, einlesen und schliessen ---
    21. $datei = fopen("$DATENBANK", "r");
    22. $datei_in = fread($datei,filesize("$DATENBANK"));
    23. fclose($datei);
    24. //--- Einlesen in einzelne Arrays ---
    25. $file_array = explode ("|", $datei_in);
    26. //--- Einzelarray in Strings legen ---
    27. $eintrag_null = $file_array[0];
    28. $eintrag_eins = $file_array[1];
    29. $eintrag_zwei = $file_array[2];
    30. $eintrag_drei = $file_array[3];
    31. $eintrag_vier = $file_array[4];
    32. //--- Datensatz zusammenstellen -jeweilige Auswahl um 1 erhöhen ---
    33. if ($vote0!="")
    34. {
    35. $eintrag_null = $eintrag_null +1;
    36. $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
    37. }
    38. if($vote1!="")
    39. {
    40. $eintrag_eins = $eintrag_eins +1;
    41. $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
    42. }
    43. if($vote2!="")
    44. {
    45. $eintrag_zwei = $eintrag_zwei +1;
    46. $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
    47. }
    48. if($vote3!="")
    49. {
    50. $eintrag_drei = $eintrag_drei +1;
    51. $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
    52. }
    53. if($vote4!="")
    54. {
    55. $eintrag_vier = $eintrag_vier +1;
    56. $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
    57. }
    58. //--- Datei zum schreiben öffnen, schreiben und schliessen ---
    59. $datei= fopen("$DATENBANK","w");
    60. fputs($datei,$ds);
    61. fclose ($datei);
    62. echo "<center><br><h2>Ihre Auswahl wurde zur Abstimmung hinzugefügt...</h2><hr>";
    63. //--- Ausgabe auf der Seite ---
    64. $liesmal = fopen("$DATENBANK", "r");
    65. $liesmal_in = fread($liesmal,filesize("$DATENBANK"));
    66. fclose($liesmal);
    67. $array_liesmal = explode ("|", $liesmal_in);
    68. echo "<table border=1>";
    69. echo "<tr><th colspan=2 bgcolor=lightgrey>Momentanes Ergebnis</th></tr>";
    70. echo "<tr><td>Brasilien</td><td>$array_liesmal[0]</td></tr>";
    71. echo "<tr><td>Deutschland</td><td>$array_liesmal[1]</td></tr>";
    72. echo "<tr><td>Frankreich</td><td>$array_liesmal[2]</td></tr>";
    73. echo "<tr><td>Argentinien</td><td>$array_liesmal[3]</td></tr>";
    74. echo "<tr><td>Ein anderes Land</td><td>$array_liesmal[4]</td></tr>";
    75. echo "</table>";
    76. echo "<br><br><a href=index.php><b>Zurück zur Auswahl</b></a></center>";
    77. }
    78. ?>
    Alles anzeigen


    und hier die Abstimmungsseite 'index.php', die ich schnell zum testen gemacht habe

    HTML-Quellcode

    1. <html>
    2. <head>
    3. <title>Wer wird Fußball-Weltmeister?</title>
    4. </head>
    5. <body>
    6. <center>
    7. <h1>Wer wird Fußball-Weltmeister?</h1>
    8. <hr>
    9. <form action="voting.php" method="POST" target="">
    10. <table>
    11. <tr><td>Brasilien</td><td><input type="Radio" name="vote0"></td></tr>
    12. <tr><td>Deutschland</td><td><input type="Radio" name="vote1"></td></tr>
    13. <tr><td>Frankreich</td><td><input type="Radio" name="vote2"></td></tr>
    14. <tr><td>Argentinien</td><td><input type="Radio" name="vote3"></td></tr>
    15. <tr><td>Ein anderes Land</td><td><input type="Radio" name="vote4"></td></tr>
    16. </table><br>
    17. <input type="Submit" name="" value="Abstimmen">
    18. </form>
    19. </center>
    20. </body>
    21. </html>
    Alles anzeigen
  • Hey Danke an alle!
    Ich werde es nachher mal probieren...
    Aber was ist denn an meinem Teil falsch?!
    Wieso funktioniert das denn nicht so!
    Ich meine, damit man eine 2. Zeile leist und um 1 erhoeht, dafuer benoetigt man doch nicht einen so lange code...
    Sorry bin kein Php-Koenig!
    Also einfach Textdatei als array lesen, dann zeile zwei als array lesen und dann um 1 erhoehen und den neuen status des arrays an die 2. zeile schreiben...
    Das wird doch wohl einfacher zu machen sein ... oder sehe ich das falsch?!
    Mfg mortician
    Und Riesen Dank für die Anteilnahme :D
  • Man man man....
    ok.... bei dir ist folgendes falsch:
    -Du kannst keinen String als Zahl(Integer) nehmen und den plus eins rechnen wollen -.-
    -außerdem arbeitest du nicht mit der Datei sondern mit einem Array wo die Datei reinkopiert wurde. -> Woher soll denn bei deinem Script man wissen wohin das denn nun geht -.-

    Am besten solltestes erst nochmal stück für stück das hier durchgehen -.- h**p://tut.php-q.net/

    hier man ich hab dir deinen Code sogar verbessert....

    PHP-Quellcode

    1. <?php
    2. $file_array = file("wahl.txt");
    3. $file_array[1] = intval($file_array[1])+1;
    4. $datei = fopen("wahl.txt","w");
    5. $x=0;
    6. while(array_key_exists($x,$file_array)) {
    7. fputs($datei,$file_array[$x]);
    8. if(array_key_exists($x+1,$file_array)) fputs($datei,"\n");
    9. $x++;
    10. }
    11. fclose($datei);
    12. ?>
    Alles anzeigen
  • kein Problem und ich wollt nochwas los werden. tut mir leid, mein letzter Post war etwas muffelig geschrieben ^^"
    Tut mir echt leid!
    ->hab heut meine freundin für einen monat verloren :(

    Bei weiteren Fragen kannste gern per PN ;)