2011-05-26 13 views
7

Chcę dodać tekst na górze mojego pliku data.txt, ten kod dodaje tekst na końcu pliku. w jaki sposób mogę zmodyfikować ten kod, aby napisać tekst na górze mojego pliku data.txt. z góry dziękuję za wszelką pomoc.dodaj tekst na górze pliku

open (MYFILE, '>>data.txt'); 
print MYFILE "Title\n"; 
close (MYFILE) 
+0

http://stackoverflow.com/questions/2322140/how-do-i-change-delete-or -insert-a-line-in-a-file-or-append-to-the-beginning-o – daxim

Odpowiedz

6
perl -pi -e 'print "Title\n" if $. == 1' data.text 
+1

Doskonała jednolinijkowa, ale należy zauważyć, że nadal pętle przechodzą przez plik wiersz po wierszu i drukuje każdy z powrotem do oryginalnego pliku. Zobacz http://oreilly.com/pub/h/73, aby uzyskać świetne recenzje na temat tego przypadku użycia. –

7

Twój składnia jest lekko off nieaktualnych (dzięki Seth):

open(MYFILE, '>>', "data.txt") or die $!; 

Trzeba będzie dokonać pełnej podanie za pośrednictwem pliku i wypisać żądane dane przed istniejących zawartości plików :

open my $in, '<', $file  or die "Can't read old file: $!"; 
open my $out, '>', "$file.new" or die "Can't write new file: $!"; 

print $out "# Add this line to the top\n"; # <--- HERE'S THE MAGIC 

while(<$in>) { 
    print $out $_; 
} 
close $out; 
close $in; 

unlink($file); 
rename("$file.new", $file); 

(nieuzasadniony skradziony z Perl FAQ, a następnie zmodyfikowany)

Spowoduje to przetworzenie pliku wiersz po wierszu, dzięki czemu na dużych plikach nie przeżujesz ton pamięci. Ale nie jest to dokładnie szybkie.

Nadzieję, że pomaga.

+0

Składnia, którą cytował, jest poprawna, ale przestarzała. –

+0

dzięki za odpowiedź !!! – dan

3

Dołączanie do góry jest zwykle nazywane przygotowaniem.

open(M,"<","data.txt"); 
@m = <M>; 
close(M); 
open(M,">","data.txt"); 
print M "foo\n"; 
print M @m; 
close(M); 

Alternatywnie otwarty data.txt- na piśmie, a następnie przenieść data.txt- do data.txt po zamknięciu, który ma taką zaletę, że atomowy więc przerwy nie mogą pozostawić plik data.txt obcięty.

+0

działa idealnie. dzięki wielkie!!! – dan

7

Jest znacznie prostszy jedna wkładka do poprzedzić blok tekstu do każdego pliku. Powiedzmy, że masz zestaw plików nazwanych body1, body2, body3, etc, do której chcesz poprzedzić blok tekstu zawartego w pliku o nazwie nagłówek:

cat header | perl -0 -i -pe 'BEGIN {$h = <STDIN>}; print $h' body* 
+1

Po prostu okazało się, że jest 1 problem z tym kodem: nie wstawia nagłówka do pustego pliku. –

0

Perl -ni -e 'print' Tytuł \ n "$. == 1" nazwa pliku, to wydrukuj odpowiedź raz

Powiązane problemy