www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Sonstiges - Informatik" - fremddatei read and write
fremddatei read and write < Sonstige < Schule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Sonstiges - Informatik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

fremddatei read and write: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 12:46 So 27.08.2006
Autor: Bit2_Gosu

Hallo !!!

in meiner abc.txt steht:
1: 1
2: 2
3: 3
4: 4
5: 5


in meiner test1.php:

1: <?php
2:
3: $handle = fopen ("abc.txt", "r+");
4:
5:    while (!feof($handle)) {
6:
7:    $buffer = fgets($handle,1024);
8:
9:    $count++;
10:
11:          if ($buffer==4) {
12:          fwrite($handle, "hallo");
13:          }
14:
15:               if ($count==4) {
16:               echo $buffer;
17:               }
18:
19:    }
20:
21: fclose ($handle);
22:
23: ?>


test1.php müsste doch eigentlich ausgeben:  "4"
und unbemerkt die "4" in abc.txt durch "hallo" ersetzen.

die ausgabe ist auch 4, aber er schreibt das hallo einfach nirgendwohin ...

Vielen Dank wenn ihr mir sagen könnt warum und was ich machen kann !!!






        
Bezug
fremddatei read and write: fgets liefert mehr zurück
Status: (Antwort) fertig Status 
Datum: 14:14 So 27.08.2006
Autor: Karthagoras


> test1.php müsste doch eigentlich ausgeben:  "4"
>  und unbemerkt die "4" in abc.txt durch "hallo" ersetzen.

Hallo Bit2_Gosu,

wenn du die Beschreibung der Funktion „fgets” im Mosterfahndungsbuch []http://de.php.net/manual/en/function.fgets.php#AEN46267 liest, stellst du fest, dass diese Funktion außer dem Inhalt der Zeile (bei dir "4") auch das newline-zeichen zurückliefert, das diese Zeile abschließt.

Manchmal liefert es auch das EndOfFile Zeichen zurück.

Jedenfalls muss deine Abrage if ($buffer==4) im Sand verlaufen.
Probier mal provisorisch if ($buffer=="4\n")

Es wäre interessant zu hören, ob's daran liegt.
Gruß Karthagoras



Bezug
                
Bezug
fremddatei read and write: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:37 So 27.08.2006
Autor: Bit2_Gosu

Hallo Kathagoras!

Leider geht es damit auch net. Aber die Sache ist, auch wenn ich if ($count==4) schreibe statt $buffer==4   schreibt er net hallo in abc.txt ... Das kann doch gar nit wahr sein ... -.-

Was könnte bloß das Problem sein ???

Bezug
                        
Bezug
fremddatei read and write: Antwort
Status: (Antwort) fertig Status 
Datum: 15:57 So 27.08.2006
Autor: piet.t

Hallo,

ich hab ja von php keine Ahnung, aber ich hab mal einen kleinen Blick in selfphp geworfen und da bei fwrite folgendes gefunden:

Bedenken Sie, dass die Datei mit "b" geöffnet werden muss, falls Sie ein System
nutzen, welches zwischen Binär- und Textdateien unterscheidet (z.B. Windows).


Kann es das vielleicht sein??

Gruß

piet

Bezug
                                
Bezug
fremddatei read and write: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:27 So 27.08.2006
Autor: Bit2_Gosu

Gute Idde ;)  Klappt aber immer noch nicht -.-

Trotzdem Danke !

Hat vielleicht jemand noch eine Idee ??

Normal geht schreiben immer bei mir auch mit w+
ich kapier das einfach nicht ;)

Bezug
                                        
Bezug
fremddatei read and write: Antwort
Status: (Antwort) fertig Status 
Datum: 17:38 So 27.08.2006
Autor: ardik

Hi,

also bei mir tut er das (fast) wie Du es erwartest.

Allerdings schreibt er das "hallo" hinter die 4 in die nächste Zeile und überschreibt damit das, was nach der vier kam.
Das ist aber auch das korrekte Verhalten. Der Pointer steht beim Lesen ja schon am Anfang der nächsten Zeile, wenn der Schreib-Befehl kommt, also wird auch dort erst dass "hallo" geschrieben.

Wenn Du nachschaust, ob die abc.txt sich geändert hat, bist Du Dir sicher, nicht noch in die alte unveränderte Datei zu schauen?

Füge doch hinter fclose(); noch die Zeile

readfile('abc.txt');

ein. Der Befehl liest die genannte Datei ein und sendet sie direkt an die Ausgabe.

Außerdem empfehle ich, die abc.txt noch bis ca. zur achten Zeile zu erweitern, damit Du schön siehst, wie das "hallo" nur die entsprechenden Zeichen überschreibt und dahinter der alte Inhalt wieder auftaucht.


Übrigens: Das Problem mit dem Zeilenendezeichen, das wir letztens ja schon hatten (und mit trim() lösten) und das Karthagoras ansprach, ist hier irrelevant. In Deiner Abfrage ($buffer==4) wird die Zeichenkette (der String) $buffer durch den Vergleich mit einer Zahl selbst in eine Zahl umgewandelt. Dabei werden nachfolgende Zeichen, die nicht als Bestandteil der Zahl interpretiert werden können, ignoriert. Also selbst wenn die Zeile "4undStuss" lauten würde, wäre die Bedingung erfüllt und in die nachfolgende Zeile würde das hallo geschrieben.
Wenn Du freilich mit === überprüft hättest, wäre die Abfrage sicherlich falsch, da diese Abfrage ja auch die Übereinstimmung des Types überprüft, die beim Vergleich einer Zeichenkette mit einer Zahl nicht gegeben ist.


Schöne Grüße,
frag gern weiter nach, wenn Du magst.
  ardik.

Bezug
                                                
Bezug
fremddatei read and write: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:03 So 27.08.2006
Autor: Bit2_Gosu

Echt vielen Dank Ardik für deine Mühe !!

Ich hab auch die Zahlenkette in abc.txt erweitert und gucke nachher nicht die alte abc.txt an. mit read(abc.txt) dran gibt er jedes mal aus:

4123456789     (die 4 ja vom echo $buffer)

Nur leider, schreibt bei mir das Programm das "hallo" einfach nirgendwo hin ;)

Das gibts doch echt nit oder? Hast du das Programm genauso raußkopiert und bei dir gehts?

Woran kann das bloß liegen??

Bezug
                                                        
Bezug
fremddatei read and write: Antwort
Status: (Antwort) fertig Status 
Datum: 18:31 So 27.08.2006
Autor: ardik


> Das gibts doch echt nit oder?

Doch das gibt's. Was habe ich schon für Stuuuunden damit verbracht, solche Fehler zu beseitigen.

> Hast du das Programm genauso raußkopiert und bei dir gehts?

Ja. Direkt ohne Änderung.

Ein beiläufiger Tipp noch: Füge irgendwo am Anfang ein
  echo '<pre>';
ein. Dann schreibt der Browser nicht alles hintereinander, sondern gibt die Datei zeilenweise so wieder, wie sie ja aussieht.
  

> Woran kann das bloß liegen??

Hm. Bei mir habe ich unter Win98 getestet. Mit - äh - php 4.3.10. Vielleicht schieb' ich's später am Abend mal auf'n Server.

[aufgemerkt] Hm. Hat php Schreibrechte auf die Datei? Versuch doch mal, mit einem anderen PHP-Skript die Datei zu überschreiben. [aufgemerkt]

Schöne Grüße,
ardik

Bezug
                                                                
Bezug
fremddatei read and write: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:47 So 27.08.2006
Autor: Bit2_Gosu

Die Idee mit den schreibrechten hatte ich leider auch schon -.-

test2.php:

1: <?php
2:  
3: $handle = fopen ("abc.txt", "r+");
4:
5: fwrite($handle, "hallo");
6:
7: readfile("abc.txt");
8:
9: ?>


beim ersten aufruf gibt er aus:

1 2 3 4 5 6 7 8 9 10 11

beim zweiten aufruf gibt er aus:

hallo 3 4 5 6 7 8 9 10 11


bei test1.php kann ich übrigens so oft aufrufen, wie ich will es schreibt immer:

4 1 2 3 4 5 6 7 8 9 10 11

komisch übrigens doch, dass er bei test2.php nicht gleich die zweite variante ausgibt oder?

auf jeden fall bin ich sehr verzweifelt ;) finde es aber trotzdem toll, dass dir soviel mühe machst !!


Bezug
                                                                        
Bezug
fremddatei read and write: Antwort
Status: (Antwort) fertig Status 
Datum: 18:51 So 27.08.2006
Autor: ardik

Hm, zwischen dem fwrite() und dem readfile() fehlt mir ein fclose().

Die Mühe ist nicht ganz uneigennützig.
Fremde Fehler zu finden hilft ungemein bei der eigenen Verständnisvertiefung und beim gewinnen von Routine... ;-)



Bezug
                                                                                
Bezug
fremddatei read and write: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:57 So 27.08.2006
Autor: Bit2_Gosu

tjo stimmt , dann kommt das hallo sofort ;)

hast du noch ne idee wen man bei so vertrackten fragen kontaktrieren kann?

(und ach, das ganze hilft dir beim verständnis, machst du beruflich was mit php?)

Bezug
                                                                                        
Bezug
fremddatei read and write: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:05 So 27.08.2006
Autor: ardik


> hast du noch ne idee wen man bei so vertrackten fragen kontaktrieren kann?

Es gibt diverse php-Foren, die ich gerade nicht auf dem Schirm habe (ich bin schrecklich unorganisiert...)

> (und ach, das ganze hilft dir beim verständnis, machst du beruflich was mit php?)

Naja, ich verdiene mein Geld u.a. auch damit, Webseiten zu erstellen und zu pflegen. Da bleiben php und mySQL und Co. nicht aus. Allerdings bin ich bisher nicht so intensiv und ständig mit php beschäftigt, dass ich das alles "im Schlaf" zaubere. ;-)

Bezug
                                                                                                
Bezug
fremddatei read and write: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:13 So 27.08.2006
Autor: Bit2_Gosu

ok cool ;)  ich hab diese frage schonmal in son forum gepostet:

[]http://www.phpbb.de/viewtopic.php?t=129577

wenn dabei was rauskommt schreib ich nochne Mitteilung !

Bezug
                                                                                                        
Bezug
fremddatei read and write: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:28 So 27.08.2006
Autor: ardik

Ach so, ich dachte zwischendurch, mit dem fclose() hätte sich auch das Originalproblem geklärt.
(hat's das vielleicht? hattest Du da evtl. den selben Fehler??)

Dann setzte ich die Frage oben mal wieder nicht auf "beantwortet".

Bezug
                                                                                                                
Bezug
fremddatei read and write: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:58 So 27.08.2006
Autor: Bit2_Gosu

nein nein, in test1.php stand und steht von anfang an auch fclose($handle);

die frage ist leider noch nicht beantwortet ;)

ich hab den ganzen kram übrigens mal auf webspace hochgeladen (von dem aus ich auch oft php scripts erfolgreich ausführe) und ausgeführt und oh mein gott:

er läd mayb 9 sek und dann kommt: gar nix... noch nicht mal die

4 1 2 3 4 5 6 7 8 9 10 11 und auch keine errormeldung

wenn ich da test2.php also das andere teil ausführe kommen einige errormeldungen, u.a. permission denied. ok der zugriff wird verweigert, aber warum kommen diese errormeldungen net auch bei test1.php??

wahrscheinlich ist read erlaubt und nur write nicht. und es kommt keine error meldung weil er gar nicht versucht zu schreiben.
d.h. dort habe ich wahrscheinlich im prinizp das selbe problem wie offline..

was zum teufel ist da los ?????

Bezug
                                                
Bezug
fremddatei read and write: Hast ja recht, aber ...
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 09:06 Do 31.08.2006
Autor: Karthagoras

Hallo ardik, hallo Bit2_Gosu,

> Übrigens: Das Problem mit dem Zeilenendezeichen, das wir
> letztens ja schon hatten (und mit trim() lösten) und das
> Karthagoras ansprach, ist hier irrelevant. In Deiner
> Abfrage ([mm]buffer==4) wird die Zeichenkette (der String) [/mm]buffer
> durch den Vergleich mit einer Zahl selbst in eine Zahl
> umgewandelt. Dabei werden nachfolgende Zeichen, die nicht
> als Bestandteil der Zahl interpretiert werden können,
> ignoriert. Also selbst wenn die Zeile "4undStuss" lauten
> würde, wäre die Bedingung erfüllt und in die nachfolgende
> Zeile würde das hallo geschrieben.

es stimmt schon, dass das Zeilenendezeichen in eurem Beispiel einfach „rausfliegt”. Da habt Ihr mich erwischt [hut] und ich habe 2-3 Tage Zeit gehabt darüber nachzudenken.

Allerdings hat sich in meinem Trotzkopf in diesen 2-3 Tagen die Erkenntnis (Überzeugung, Meinung) festgesetzt, dass es hirnrissig ist, ein Problem der Zeichenkettenverarbeitung so zu programmieren, dass die „Nutzlast” (die "4") dieser Zeichenkette eher zufällig von unerwünschtem Ballast (Zeilenendezeichen) befreit wird.

Ich halte es deshalb für hirnrissig, weil ich mir Euch an einem Punkt in der Zukunft vorstelle, nachdem Ihr das Problem gelöst und den Algorithmus zu laufen gebracht habt. (Alles läuft und es herrscht prima Sonnenschein.)

Ärger breitet sich allerdings dann aus, wenn man dann nur versucht, die Datei auf
1: I
2: II
3: III
4: IV
5: V

…oder…
1: eins
2: zwei
3: drei
4: vier
5: fuenf

…oder…
1: rot
2: gelb
3: blau
4: gruen
5: schwarz

umzustellen.

Gruß Karthagoras

Bezug
                                                        
Bezug
fremddatei read and write: Full Ack
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:07 Do 31.08.2006
Autor: ardik

Hallo Karthagoras,

damit hast Du natürlich völlig recht.

Aus diesen Gründen z.B. trim() zu verwenden, hatte ich schon in einer vorhergehenden Diskussion empfohlen.

Hier ging es (mir) vor allem darum, nebenbei zu erläutern, warum hier funktionierte, was scheinbar nicht hätte funktionieren sollen.

Für sauberes und flexibles Programmieren ist dieses iVorgehen freilich unzweckmäßig.

Schöne Grüße,
ardik

Bezug
        
Bezug
fremddatei read and write: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:20 Mo 11.09.2006
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Sonstiges - Informatik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]