[23816] in Perl-Users-Digest
Perl-Users Digest, Issue: 6019 Volume: 10
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu Jan 29 20:36:25 2004
Date: Thu, 29 Jan 2004 17:30:51 -0800 (PST)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Thu, 29 Jan 2004 Volume: 10 Number: 6019
Today's topics:
Lesen und Schreiben mit einem file handle O_RDWR geht n <u.r.m@t-online.de>
Re: Lesen und Schreiben mit einem file handle O_RDWR ge <u.r.m@t-online.de>
Re: Lesen und Schreiben mit einem file handle O_RDWR ge <gnari@simnet.is>
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Sun, 25 Jan 2004 15:41:39 +0100
From: "Ulrich Raabe" <u.r.m@t-online.de>
Subject: Lesen und Schreiben mit einem file handle O_RDWR geht nicht
Message-Id: <bv0kic$cpi$05$1@news.t-online.com>
Hallo zusammen,
ich möchte eine Datei ändern. Im Beispiel unten ist es das Verdoppeln des
Fileinhaltes. Wenn ich für das Lesen und das Schreiben jeweils ein eigenes
file handle object erzeuge und jeweils nach dem Lesen und Schreiben direkt
schließe funktioniert es.
Nun gibt es ja auch die Option O_RDWR beim Instanziieren des file handle
object. Wenn ich nun damit arbeite, so wird die Datei nicht verändert -
ersichtlich am Zeitstempel des file. Wenn ich mit den Methoden setpos und
truncate arbeite (siehe unten) dann wird das file verändert und hat die
Länge 0 Byte. In der shell wird in beiden Fällen die Ausgabe von $content so
ausgegben wie erwartet, d.h. der verdoppelte Text des ursprünglichen file.
Die Sache mit setpos und truncate hatte ich mal gehört, dass man das
bräuchte, ich weiss aber nicht mehr warum.
Zu dem Thema "Lesen und Schreiben mit demselben file handle" habe ich in der
online Dokumentation nichts gefunden, was mir meine Frage beantwortet.
Vielleicht habe ich auch an denfalschen Stellengesucht (module filehandle,
perlfunc, IO::Handle).
Natürlich kann ich mit 2 file handles arbeiten. Aber wenn der perl
Interpreter die Option O_RDWR anbietet, so sollte es doch einen Weg geben,
dass dies auch genutzt werden kann.
Noch ein Wort zu meiner Umgebung:
Windows 98;
This is perl, v5.6.1 built for MSWin32-x86-multi-thread Binary build 635
provided by ActiveState Corp.
Über eine Antwort, die das Verhalten erklärt und eine Korrektur des Codes
würde mich sehr freuen.
Servus Raaven
Hier der Text der Ausgansdatei:
This is a test file with 3 lines.
This is the second line.
This is the final line.
Hier die Ausgabe am Prompt:
E:\_web\Perl>perl -w test_file_in_out.pl
This is a test file with 3 lines.
This is the second line.
This is the final line.This is a test file with 3 lines.
This is the second line.
This is the final line.
Hier der Code:
#!/usr/bin/perl -w
BEGIN {
;
}
use strict;
use warnings;
use diagnostics;
use FileHandle;
my $sourceAndTargetPath = "e:/_web/perl/inout/";
my $fileName = "test.txt";
my $fh = FileHandle->new( $sourceAndTargetPath . $fileName, O_RDWR );
unless ( $fh ) {
print( "Error while get file $fileName: $!.\n" );
return( 0 );
}
my $contents = join( "", $fh->getlines() );
$contents = $contents . $contents;
print( $contents );
$fh->setpos( 0 );
$fh->truncate( 0 );
$fh->print( $contents );
$fh->close();
exit( 0 );
END {
;
}
1;
------------------------------
Date: Sun, 25 Jan 2004 15:44:24 +0100
From: "Ulrich Raabe" <u.r.m@t-online.de>
Subject: Re: Lesen und Schreiben mit einem file handle O_RDWR geht nicht
Message-Id: <bv0knh$562$07$1@news.t-online.com>
Sorry,
I picked up the wrong newsgroup.
Bye Raaven
"Ulrich Raabe" <u.r.m@t-online.de> schrieb im Newsbeitrag
news:bv0kic$cpi$05$1@news.t-online.com...
> Hallo zusammen,
> ich möchte eine Datei ändern. Im Beispiel unten ist es das Verdoppeln des
> Fileinhaltes. Wenn ich für das Lesen und das Schreiben jeweils ein eigenes
> file handle object erzeuge und jeweils nach dem Lesen und Schreiben direkt
> schließe funktioniert es.
> Nun gibt es ja auch die Option O_RDWR beim Instanziieren des file handle
> object. Wenn ich nun damit arbeite, so wird die Datei nicht verändert -
> ersichtlich am Zeitstempel des file. Wenn ich mit den Methoden setpos und
> truncate arbeite (siehe unten) dann wird das file verändert und hat die
> Länge 0 Byte. In der shell wird in beiden Fällen die Ausgabe von $content
so
> ausgegben wie erwartet, d.h. der verdoppelte Text des ursprünglichen file.
> Die Sache mit setpos und truncate hatte ich mal gehört, dass man das
> bräuchte, ich weiss aber nicht mehr warum.
> Zu dem Thema "Lesen und Schreiben mit demselben file handle" habe ich in
der
> online Dokumentation nichts gefunden, was mir meine Frage beantwortet.
> Vielleicht habe ich auch an denfalschen Stellengesucht (module filehandle,
> perlfunc, IO::Handle).
>
> Natürlich kann ich mit 2 file handles arbeiten. Aber wenn der perl
> Interpreter die Option O_RDWR anbietet, so sollte es doch einen Weg geben,
> dass dies auch genutzt werden kann.
>
> Noch ein Wort zu meiner Umgebung:
> Windows 98;
> This is perl, v5.6.1 built for MSWin32-x86-multi-thread Binary build 635
> provided by ActiveState Corp.
>
> Über eine Antwort, die das Verhalten erklärt und eine Korrektur des Codes
> würde mich sehr freuen.
>
> Servus Raaven
>
>
> Hier der Text der Ausgansdatei:
>
>
> This is a test file with 3 lines.
> This is the second line.
> This is the final line.
>
>
> Hier die Ausgabe am Prompt:
>
>
> E:\_web\Perl>perl -w test_file_in_out.pl
> This is a test file with 3 lines.
> This is the second line.
> This is the final line.This is a test file with 3 lines.
> This is the second line.
> This is the final line.
>
>
> Hier der Code:
>
> #!/usr/bin/perl -w
> BEGIN {
> ;
> }
> use strict;
> use warnings;
> use diagnostics;
> use FileHandle;
> my $sourceAndTargetPath = "e:/_web/perl/inout/";
> my $fileName = "test.txt";
> my $fh = FileHandle->new( $sourceAndTargetPath . $fileName, O_RDWR );
> unless ( $fh ) {
> print( "Error while get file $fileName: $!.\n" );
> return( 0 );
> }
> my $contents = join( "", $fh->getlines() );
> $contents = $contents . $contents;
> print( $contents );
> $fh->setpos( 0 );
> $fh->truncate( 0 );
> $fh->print( $contents );
> $fh->close();
> exit( 0 );
> END {
> ;
> }
> 1;
>
>
------------------------------
Date: Sun, 25 Jan 2004 14:59:54 -0000
From: "gnari" <gnari@simnet.is>
Subject: Re: Lesen und Schreiben mit einem file handle O_RDWR geht nicht
Message-Id: <bv0lqu$6so$1@news.simnet.is>
"Ulrich Raabe" <u.r.m@t-online.de> wrote in message
news:bv0kic$cpi$05$1@news.t-online.com...
> Hallo zusammen,
[snip rest of german]
google translation starts:
Hello together, I would like to change a file. In the example down it is
doubling file contents.
the rest is kind of cryptic, but the code at the end is not.
[snip data that seems to double]
> Hier der Code:
> ...
> my $contents = join( "", $fh->getlines() );
ok. (3 lines in example)
> $contents = $contents . $contents;
now 6 lines
> print( $contents );
6 lines printed to STDOUT
> $fh->setpos( 0 );
> $fh->truncate( 0 );
file truncated
> $fh->print( $contents );
6 lines printed to file
is that not what you got?
did i misunderstand the problem ?
gnari
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc. For subscription or unsubscription requests, send
#the single line:
#
# subscribe perl-users
#or:
# unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.
NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V10 Issue 6019
***************************************