Tom: Zeile in Textdatei löschen - aber wie

Beitrag lesen

Hello,

Hm, so langsam erkenne ich auch die Vorteile bei deiner Methode. Man kann halt ganz einfach auf alle Elemente zugreifen. Man muss im String nicht nach besonderen Zeichen suchen und diese umwandeln, man hat immer eine schöne Struktur.

Ja. Man muss vielleicht gelegentlich die älteren Beiträge ins Archiv schicken, damit die Datei nicht größer als ca. 2MB wird.

Richtig, du würdest also empfehlen, ein Superarray aufzubauen?

Ja, aber siehe vorige Bemerkung.

Was ist denn eine "formatfreie Binärdatei"? Etwas, wo du irgendeine Dateiendung dranhängst? Meinst du das? Also nicht .txt, sonder zum Beispiel .dennis, ja?

Die Endung ist frei wählbar. Man sollte je nach Betriebssytem aber bestimmte Konventionen einhalten. Eine solche formatfreie Binärdatei hat daher häufig die Endung ".dat". ".txt", ".asc" und ".csv" sind eben eher vorbehalten für die von Harry beschriebene Lösung. Du könntst sie ja mit ".aol" kennzeichen *gg* für "Array Organized List".

Öffnen mit fopen(...,'a+') -> Zerstörungsfrei
Sperren mit flock()
Satzzeiger auf Anfang mit fseek()
Vollständig einlesen mit fread()
unserialize()
Ich persöhnlich würde erst kurz vor dem Schreiben flock() machen.
Dann ist es kürzer gesperrt, beim Lesen können die sich doch nicht in die Quere kommen, oder?

Geanau das ist falsch. Stell Dir vor, Du liest, während schon jemand schreibt. Nach Deiner Methode wäre die Datei in diesem Moment ja noch nicht gesperrt. Aber die Thematik der Zeit-Zustandsdiagramm und des "richtigen" Lockings wir ein großes Kapitel in dem Artikel einnehmen. Selbst die Überlegung, mit welchem Mode (r,w,a) die Datei geöffnet wird, lässt keinerlei Raum, wenn man die Datei selber als Sperrobjekt nutzen will.

Änderungen vornehmen im Array() <<== darum geht es dabei nur!
                                     Das ist nämlich bequem.
                                       _Sehr_ bequem!

serialize()
Satzzeiger auf Anfang mit fseek()
schreiben mit fwrite()
Trimmen mit ftruncate()
Schließen mit fclose(), das flock(...,LOCK_UN) kann man sich schenken.

Hm, kleine Frage: Was, wenn das neue Array nun kürzer ist als das alte. Bei deiner Methode mit fseek() und fwrite(), würde dann da am Ende nicht der Rest des alten, längeren Arrays stehen bleiben?

Darum trimmt man sie ja vor der Freigabe mit ftruncate().

Warum nicht den File vorher schließen, eneut öffnen und zwar mit der Fuktion, das die dateilänge auf 0 Bytes gesetzt wird (das war glaube ich "w")?

Weil man sie dann nicht selber als Sperrobjekt nutzen kann, sondern eine Hilfsdatei benötigt (so wie in speichern.php beschrieben)

Der oben beschriebene Vorgang dauert selbst bei 2MB großen Dateien mit ca. 1000 Datensätzen nicht länger als 1sec, es sei denn, Du hast den Apachen auf nem 386er mit 8MB installiert *gg*.
Ich glaube die Dinger existierten noch vor meiner Zeit ;-)

Prima. Was macht denn ein Co-Autor so genau? Bzw. was stellst du dir unter dem Tun eines Co-Autors vor?
Wenn du willst könnte ich ja so ein bisschen Texte schreiben, bezüglich Vor- und Nachteile der verschiedenen Methoden.

  • jede Idee registrieren (auch jetzt schon)
  • Fragen sammeln
  • Gegenversuche auf anders eingerichten Systemen machen
  • Die vorhandene Literatur gegenlesen
  • die Sache mit eigenen Worten nochmal formulieren
  • Fehler finden, für die der Autor schon zu betriebsblind ist
  • ...

Aber vielleicht sollten wir da mal per E-Mail drüber reden; Hier meine E-Mail:
webmaster | at | riehle-web.com

Die allgemeinen Dinge sollten wir ruhig hier diskutieren. Es wird ja nichts Geheimes werden.

[...]

du musst dir im Prinzip überlegen, wenn du damit ansprechen willst: Die Leute, die schon Halb-Profis sind, und denen du nur noch etwas über SafeMode beibringen willst, oder die, die nicht wissen was SafeMode ist, die es außer mal im Forum noch nie gehört haben, aber wissbegierig sind es zu erfahren.

... oder ihn durch eine Fehlermeldung kennenlernen (sofern sie die denn eingeschaltet haben) und nun daran verzweifeln.

Wenn ich mir halt vorstelle, ich käme da an und ich wüsste gar nichts von SafeMode (ich weiß ja auch so nicht viel davon ;-) ), würde ich glaube ich danach nicht viel mehr verstehen.

Meisnt Du damit jetzt meinen ersten Entwurf http://selfhtml.bitworks.de oder nur allgemein?

Das ist das, wo ich meinte, da fehlt eventuell noch eine kleine Einleitung. Ach so, also doch die wachsende Doku. Ich arbeite ja noch daran.

Ich hatt ja so eine Struktur schon angedeutet. Übrigens könnte nun die Frage kommen, ob man die Arrays assoziativ oder indiziert aufbauen sollte.
Wo lag da jetzt noch mal der Unterschied im Detail?

indiziert:
[0] => 'Hans';
[1] => 'Frieda';
[2] => 'Müller';

assoziiert:
['vorname'] => 'Hans';
['vorname_der_mutter'] => 'Frieda';
['nachname'] => 'Müller';

Indizierte Arrays enthalten Positionsparameter, assoziierte Arrays enthalten Optionsparameter. Den technischem Unterschied im Hintergrund bekommen wir bei PHP nicht mit. Außerdem sind "Arrays" in PHP sowie keine Arrays (angereihte Strukturen gleicher Definition) sondern verkettete Listen (Bäume). Sonst gäbe es noch den Unterschied: Zugriff auf indizierte Arrays per Random Access, Zugriff aus assoziierte Arrays per Sequential Search oder Binary Search.

Angesichts der Vorteile beim Zugriff über Namen und der monströsen Hauptspeicher und Festplatten plädiedre ich für assoziative Arrays. Wenn nämlich in einem Datensatz ein Teilobjekt nicht vorkommt, kostet es auch keinen Platz. Man muss nun nur seine Bearbeitungsfunktionen so erziehen, dass die eben immer vorher gucken... muss ich nun ein Bild anzeigen oder keins oder fünf Foreach() machts möglich.
Du meinst, man sollte möglichst wenig in die Dateien speichern? Also zum Beispiel kein html Code, für Links, weil man ihn nacher noch dazufügen kann. Ebenso für Bilder. (?)

Ja, das auch, aber ich meinte die Varianz der Datensätze, die durch Namen sehr viel leichter möglich ist, als bei Indexen. Deine Idee führt zur Klassifizierung von Elementen. Das geht dann schon in die Richtung von totaler Trennung von Inhalt und Format (versucht man bei HTML<->CSS ja auch). Das ist grundsätzlich nicht falsch, wenn man sich nicht einen dabei abkrampft. Keep ist Simple.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
[ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
  Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
  Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
0 163

Zeile in Textdatei löschen - aber wie

Dennis
  • php
  1. 0
    Harry
    1. 0
      Dennis
      1. 0
        Fabian Transchel
        1. 0
          Dennis
          1. 0
            Dennis
    2. 0
      Auge
  2. 0
    Tom
    1. 0
      Harry
      1. 0
        Tom
        1. 0
          Tom
        2. 0
          Harry
          1. 0
            Tom
            1. 0
              Harry
              1. 0
                Tom
                1. 0

                  Nervende Werbung

                  Dennis
                  • meinung
                  1. 0
                    Fabian Transchel
                    1. 0
                      Dennis
                  2. 0
                    Schuer
                    1. 0
                      Tom
                      1. 0
                        Schuer
                        1. 0
                          Tom
    2. 0
      Dennis
      1. 0
        Tom
        1. 0
          Dennis
          1. 0
            Tom
            1. 0
              Dennis
              1. 0
                Tom
                1. 0
                  Dennis
                  1. 0
                    Tom
                    1. 0
                      Dennis
                      1. 0
                        Tom
                        1. 0
                          Dennis
                          1. 0
                            Tom
                            1. 0
                              Dennis
                              1. 0
                                Tom
                                1. 0
                                  Dennis
                                  1. 0

                                    safe Mode

                                    Dennis
                                  2. 0
                                    Tom
                                    1. 0
                                      Dennis
                                      1. 0

                                        Geschafft!!! Aber nun weiter...

                                        Dennis
                                        1. 0
                                          Tom
                                          1. 0

                                            Verschieben von Daten - Archivierung

                                            Dennis
                                            1. 0
                                              Tom
                                              1. 0
                                                Dennis
                                                1. 0
                                                  Tom
                                                  1. 0
                                                    Tom
                                                    1. 0
                                                      Dennis
                                                      1. 0
                                                        Dennis
                                                        1. 0

                                                          News Script

                                                          Dennis
                                                          1. 0

                                                            File Locking, Fehlerbehandlung

                                                            Tom
                                                            1. 0
                                                              Dennis
                                                              1. 0
                                                                Tom
                                                                1. 0
                                                                  Dennis
                                                                  1. 0
                                                                    Tom
                                                                    1. 0
                                                                      Tom
                                                                      1. 0
                                                                        Dennis
                                                                        1. 0
                                                                          Dennis
                                                                          1. 0
                                                                            Tom
                                                                            1. 0
                                                                              Dennis
                                                                              1. 0
                                                                                Tom
                                                                                1. 0
                                                                                  Dennis
                                                                                  1. 0
                                                                                    Tom
                                                                                    1. 0
                                                                                      Dennis
                                                                                      1. 0
                                                                                        Tom
                                                                                        1. 0
                                                                                          Dennis
                                                                                          1. 0
                                                                                            Tom
                                                                                            1. 0
                                                                                              Dennis
                                                                                              1. 0
                                                                                                Tom
                                                                                                1. 0
                                                                                                  Dennis
                                                                                                  1. 0
                                                                                                    Tom
                                                                                                    1. 0
                                                                                                      Dennis
                                                                                                      1. 0
                                                                                                        Tom
                                                                                                        1. 0

                                                                                                          Haaaalol, sieht uns jemand?

                                                                                                          Tom
                                                                                                          • zu diesem forum
                                                                                                          1. 0

                                                                                                            Haaa *lol*, hier liest keiner mehr :-(

                                                                                                            Dennis
                                                                                                            1. 0

                                                                                                              HAAAALLOOO, SIEHT UNS KEINER? Wertebereich von Schlüsseln

                                                                                                              Tom
                                                                                                              • datenbank
                                                                                                              1. 0
                                                                                                                Vinzenz
                                                                                                              2. 0
                                                                                                                Vinzenz
                                                                                                              3. 0
                                                                                                                Vinzenz
                                                                                                                1. 0
                                                                                                                  Tom
                                                                                                        2. 0

                                                                                                          Functionen, Archivierung

                                                                                                          Dennis
                                                                                                          1. 0
                                                                                                            Tom
                                                                                                            1. 0
                                                                                                              Dennis
                                                                                                              1. 0

                                                                                                                Tom?

                                                                                                                Dennis
                                                                                                                1. 0
                                                                                                                  Tom
                                                                                                                  1. 0

                                                                                                                    Projekt Flatfiles: Datensicherung

                                                                                                                    Tom
                                                                                                                  2. 0
                                                                                                                    Tom
                                                                                                                    1. 0
                                                                                                                      Dennis
                                                                                                                      1. 0
                                                                                                                        Tom
                                                                                                                        1. 0

                                                                                                                          Schnelles und speicherplatzsparendes Speichern in Flatfiles

                                                                                                                          Dennis
                                                                                                                          1. 0

                                                                                                                            Speichern in Flatfiles

                                                                                                                            Tom
                                                                                                                            1. 0
                                                                                                                              Dennis
                                                                                                                              1. 0
                                                                                                                                Tom
                                                                                                                                1. 0
                                                                                                                                  Dennis
                                                                                                                                  1. 0

                                                                                                                                    Tom?

                                                                                                                                    Dennis
                                                                                                                                    1. 0
                                                                                                                                      Dennis
                                                                                                                                      1. 0
                                                                                                                                        Arx
                                                                                                                                        1. 0

                                                                                                                                          Flatfile Funktionen

                                                                                                                                          Dennis
                                                                                                                                          1. 0
                                                                                                                                            Arx
                                                                                                                                            1. 0
                                                                                                                                              Dennis
                                                                                                                                              1. 0
                                                                                                                                                Arx
                                                                                                                                                1. 0
                                                                                                                                                  Dennis
                                                                                                                                                  1. 0
                                                                                                                                                    Arx
                                                                                                                                                    1. 0
                                                                                                                                                      Dennis
                                                                                                                                                      1. 0

                                                                                                                                                        Signatur

                                                                                                                                                        Arx
                                                                                                                                                        • zu diesem forum
                                                                                                                                                        1. 0
                                                                                                                                                          Dennis
                                                                                                                                                          1. 0
                                                                                                                                                            Arx
                                                                                                                                                            1. 0
                                                                                                                                                              Dennis
                                                                                                                                                              1. 0
                                                                                                                                                                Dennis
                                                                                                                                                                1. 0
                                                                                                                                                                  Arx
                                                                                                                                                              2. 0
                                                                                                                                                                Arx
                                                                                                                                                                1. 0
                                                                                                                                                                  Dennis
                                                                                                                                                                  1. 0
                                                                                                                                                                    Arx
                                                                                                                                                                    1. 0
                                                                                                                                                                      Arx
                                                                                                                                                                      1. 0
                                                                                                                                                                        Dennis
                                                                                                                                                                        1. 0
                                                                                                                                                                          Arx
                                                                                                                                                                          1. 0
                                                                                                                                                                            Dennis
                                                                                                                                                                            1. 0
                                                                                                                                                                              Arx
                                                                                                                                                                              1. 0
                                                                                                                                                                                Dennis
                                                                                                                                                                                1. 0
                                                                                                                                                                                  Arx
                                                                                                                                                                                  1. 0
                                                                                                                                                                                    Dennis
                                                                                                                                                                                    1. 0
                                                                                                                                                                                      Arx
                                                                                                                                                                                      1. 0
                                                                                                                                                                                        Dennis
                                                                                                                                                                                        1. 0
                                                                                                                                                                                          Arx
                                                                                                                                                                                          1. 0
                                                                                                                                                                                            Dennis
                                                                                                                                                                                            1. 0
                                                                                                                                                                                              Tom
                                                                                                                                                                                              1. 0
                                                                                                                                                                                                Dennis
                                                                                                                                                                                                1. 0
                                                                                                                                                                                                  Tom
                                                                                                                                                                                        2. 0
                                                                                                                                                                                          Thomas J.S.
                                                                                                                                                                                          1. 0
                                                                                                                                                                                            Dennis
                                                                                                                                                                                            1. 0
                                                                                                                                                                                              Thomas J.S.
                                                                                                                                                                                              1. 0
                                                                                                                                                                                                Dennis
                                                                                                                                                                    2. 0
                                                                                                                                                                      Dennis
                                                                                                                                                                      1. 0
                                                                                                                                                                        Arx
                                                                                                                                                                        1. 0

                                                                                                                                                                          Dies ist ein Test

                                                                                                                                                                          Dennis
                                                                                                                                                                          1. 0
                                                                                                                                                                            Arx
                                                                                                                                                                            1. 0
                                                                                                                                                                              Dennis
                                                                                                                                                                              1. 0
                                                                                                                                                                                Jan R.
                                                                                                                                                                                1. 0
                                                                                                                                                                                  Dennis
                                                                                                                                          2. 0
                                                                                                                                            Tom
                                                                                                                                  2. 0
                                                                                                                                    Tom
                                                                                                                                    1. 0
                                                                                                                                      Dennis
                                                                                                                                      1. 0
                                                                                                                                        Dennis
                                                                                                                                        1. 0
                                                                                                                                          Dennis
                                                                                                                                          1. 0
                                                                                                                                            Dennis
                                                                                                                                            1. 0
                                                                                                                                              Tom
                                                                                                                                              1. 0
                                                                                                                                                Dennis
                                                                                                                                                1. 0
                                                                                                                                                  Tom
                                                                                        2. 0
                                                                                          Tom
                                                                                          1. 0

                                                                                            Speichern in Flatfiles: Performance

                                                                                            Tom
                                                                        2. 0
                                                                          Tom
                2. 0

                  WER DAS HIER LIEST BITTE MELDEN

                  HILFE
                  • zur info
    3. 0
      Arx
      1. 0
        Dennis
  3. 0

    HALLO - Problem Wertebereich von Schlüsseln

    Dennis
    • datenbank
    1. 0
      Thomas J.S.
      1. 0
        Dennis
        1. 0
          Thomas J.S.
          1. 0
            Dennis
        2. 0
          Andreas Korthaus
          1. 0
            Dennis
          2. 0
            Tom
            1. 0
              Andreas Korthaus