Announcement

Collapse
No announcement yet.

In Dateien schreiben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • In Dateien schreiben

    Hallo,

    ich möchte gerne verschiedene Zeilen in eine datei schreiben. Jedoch nicht an den Anfang der Datei, sondern ab Zeile 4. Wie geht dieses? Bitte ein Beispiel.

    Dermold

  • #2
    Hi,<br>
    prinzipiell würde ich die datei einlesen, danach direkt die 4 Zeilen schreiben (kleine for-Schleife), dann die neuen Daten einfügen und dann den Rest hinterher. Ist bestimmt nicht der eleganteste weg, aber ein ziemlich einfacher

    Comment


    • #3
      noch ein weg wäre es, folgendes zu tun..

      <br>
      open IN,"<test.txt";<br>
      $fileinput;<br>
      foreach (<IN>) {<br>
      $fileinput.=$_;<br>
      }<br>
      close IN;<br>
      <br>
      $waseinfuegen="Die Zeile bitte zwischen 4 und 5... \n";<br>
      <br>
      $fileinput =~ s/^(.*?)\n(.*?)\n(.*?)\n(.*?)\n/$1\n$2\n$3\n$4\n$waseinfuegen/;<br>
      <br>
      open OUT,">test.txt";<br>
      print OUT $fileinput;<br>
      close OUT;<br>
      <br>
      das wäre, wie man sieht über eine einfache substitution gemacht.<br>
      oder man macht folgendes:<br><br>
      <br>
      open IN,"<test.txt";<br>
      $cnt=1;<br>
      $waseinfuegen="Die Zeile bitte zwischen 4 und 5... \n";<br>
      foreach (<IN>) {<br>
      $fileinput.=$_;<br>
      if ($cnt++ eq 4) { $fileinput.=$waseinfuegen; }<br>
      }<br>
      close IN;<br>
      <br>
      open OUT,">test.txt";<br>
      print OUT $fileinput;<br>
      close OUT;<br>
      <br>
      das wäre ungefähr der weg von subsist. nur etwas anders er liest die datei zeile für zeile ein und schreib nach der 4. zeile direkt den einzufügenden text. am schluss schreibt er dann alles wieder raus.
      <br><br>hoffe ich konnte helfen...<br>gruss, dominik ([email protected]

      Comment


      • #4
        Hi,
        das script von Dominik ist zwar schön und gut, nur was mache ich, wenn die zu lesende Datei Mode:640 UID:0 GID:0 hat und der perl Interpreter unter UID:30 GID:65534 läuft

        Comment


        • #5
          Im "normalen" Unix gibt es sowieso keine Rechte fuer reines Append an Dateien - man kann zwar durch Write-Rechte im Directory verhindern, dass ein neuer INode angelegt wird (ein Verzeichniseintrag, also eine Datei), aber ob diese Datei komplett neu geschrieben wird, ist dem Unix wurscht. Du kannst also mit einem open(FH, filename) eine Datei erst mit ihrem aktuellen Inhalt auslesen und dann auf das gleiche Handle zurueckschreiben, auch wenn Du die ganze Datei dabei vom 1. Byte an neu schreibst. Natuerlich brauchst Du das Recht, Dateien zu beschreiben, aber im Directory brauchst Du dafuer keine Rechte.<p>
          Wenn die Datei die beschriebenen Rechte hat, wirst Du Dich schwer tun, mit irgendeinem Code da was zu aendern. Kontakte den lokalen Sysadmin, such Dir eine andere Datei oder nutze einen CGI-Wrapper, der die CGIs unter der UID des jeweiligen Webusers ausfuehrt.<p>
          Gruss, Marc

          Comment


          • #6
            Überlicherweise open ...">>Dateiname".. hängt an die Datei an
            Christian

            Comment

            Working...
            X