linux-l: Perl und Files

Jens Dreger jens.dreger at physik.fu-berlin.de
Fr Jun 2 20:28:24 CEST 2000


On Fri, Jun 02, 2000 at 07:41:14PM +0200, Ulrich Wiederhold wrote:
> Hallo,
> ich verzweifele mal wieder, und bevor ich mir die Kugel gebe und dick
> und fett werde, frage ich doch mal lieber hier nach. Ich bin mir sicher,
> daß hier jemand eine Antwort weiß und vielleicht ist dieser jemand so
> nett, sie mir zukommen zu lassen...
> 
> Problem: Ich möchte eine Datei einlesen, die erste Zeile in einer
> Variable auslesen und in der Datei löschen, die Datei wieder speichern.
> 
> Meine (XXXXXXX-VXXXX.) Versuch sieht wie folgt aus:
> 
> 	open (FILE, "+<$file");
> 	@allines = <FILE>;
> 	$firstline = shift(@allqueues);
> 	print FILE "@allines";
> 	close(FILE);
> 
> *******************************************

Da Du $firstline nicht verwendest, schlage ich mal vor:

   perl -0pi -e 's/^.*\n//' filename

Example:

~> echo -e "line1\nline2\nline3" > test.txt
~> cat test.txt 
line1
line2
line3
~> perl -0pi -e 's/^.*\n//' test.txt
~> cat test.txt
line2
line3

Da war die erste Zeile weg...

Gruss,

Jens.
 
> Die $firstline wird auch richtig bestimmt, die Datei müßte mit "+<" zum
> Schreiben und Lesen geöffnet sein und "shift(ARRAY)" "entnimmt dem
> Vektor den ersten Wert, gibt diesen zurück, kürzt den Vektor um ein
> Element und verschiebt alles nach unten". (aus Programmieren in Perl)
> 
> Anstatt die Datei zu überschreiben, wird der Rest der Datei (ohne Zeile
> 1) hinten drangehängt.

Naja, nachdem Du die Datei eingelesen hast, befindet sich der Zeiger
fuer die aktuelle Position innerhalb der Datei natuerlich am
Ende. Benutze seek (man perlfunc) oder schliess die Datei wieder, und
oeffne sie dann nochmal. 

Normalerweise wuerde man wohl eher die Datei einlesen, dann
umbenennen, dann neue Datei schreiben und bei Erfolg umbenannte
loeschen, sonst wieder zurueckumbenennen. Sonst kann es Dir passieren,
dass Du den Inhalt der Datei irgendwie platt machst. Perl tut all dies
fuer Dich, wenn Du es mit -i aufrufst (man perlrun).

Gruss,

Jens.



Mehr Informationen über die Mailingliste linux-l