Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8305[/thread]

schreiben in Txt file

Leser: 1


<< >> 10 Einträge, 1 Seite
Gast Gast
 2006-09-08 16:29
#69585 #69585
Hali hallo, etwas neu und am rum spielen. Bin fleissig am lesen vom Llama Buch und bin im dritten kapitel.

mein problem ist ich moechte gerne in eine .txt datei schreiben. erst hat er mir errors gegeben dann hab ich die gefixt und nun gibt es einen merkwuerding grafischen effekt im CMD.

Hier ist mein code
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!perl 
#perl write test 2
use diagnostics;
use strict;
use warnings;

# creating the txt file
my $data_file = 'h:\\data.txt';

open example, "$data_file" or die "can't open $data_file $!";
#write to the file
while ($data_file){
print " test ";
}
close (example);


also ich wuerde gerne zum data.txt schreiben im h verzeichnis.
irgend welche tipps oder hints ?

danke

/fraggs
Crian
 2006-09-08 16:42
#69586 #69586
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Du schreibst nichts auf das Filehandle "example" (die sollte man groß schreiben btw.). Die ganze While-Schleife ist mir suspekt. Der Dateiname wird immer einen wahren Wert darstellen? Erzähl mal, was du erreichen willst.\n\n

<!--EDIT|Crian|1157719442-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
vayu
 2006-09-08 16:44
#69587 #69587
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
also du willst in $data_file reinschreiben seh ich das richtig?

Code: (dl )
1
2
3
4
5
open( FILE, ">", $data_file )  or die $!;

print FILE "test";

close(FILE);
sid burn
 2006-09-08 23:48
#69588 #69588
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
# creating the txt file
my $data_file = 'h:\\data.txt';

Ich habe es jetzt nicht ausprobiert. Aber du benutzt ein einzelnen Hochkomma bei der String Definition. Bei nur einen Hochkomma werden Variablen innerhlab deines String nicht Interpoliert, auch steht dir "\n" etc. nicht zur Verfügung. Wenn du also einen einzelnen Backslasch schreiben möchtest dann musst du ihn bei Hochkommata nicht escapen.

Du versuchst also auf eine Datei Namens "h:\\data.txt" zuzugreifen was ein ungültiger Verzeichnisname sein dürfte.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2006-09-10 09:51
#69589 #69589
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Besser ist es bei Sachen wie oben, die einfachen Anführungszeichen zu nehmen und nur einen Backslash zu verwenden, also
Code: (dl )
1
2
# creating the txt file
my $data_file = 'h:\data.txt';
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
fraggs
 2006-09-11 11:24
#69590 #69590
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
so endlich ein acount.

oook. ich wuerde gerne eine .txt datei oeffnen dann zb. ein text oder nummern in diese datei schreiben und dann wieder schliessen.
ich bin grade am listen und context im LLama buch lesen alsom habe ich noch ein weilchen um raus zufinden was ich falsch gemacht habe.

vielen dank soweit ich werde mal nachschlagen wo der fehler liegen koennte

danke ich werde updaten
mmm twix
renee
 2006-09-11 11:43
#69591 #69591
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
vayu hat Dir ja schon die Lösung genannt.

Dein Fehler liegt hier:
Code: (dl )
1
2
3
4
5
6
open example, "$data_file" or die "can't open $data_file $!";
#write to the file
while ($data_file){
print " test ";
}
close (example);


1.) Du öffnest die Datei zum Lesen, willst aber in die Datei schreiben...

Schreiben sieht so aus:
Code: (dl )
open(my $fh,'>',$data_file) or die $!;


Auch für das Öffnen zum Lesen solltest Du in Zukunft das 3-Parametrige open verwenden:
Code: (dl )
open(my $fh,'<',$data_file) or die $!;


Unterschied erkannt?


2.) Du überprüfst im Schleifenkopf bei while, ob $data_file einen "wahren" Wert liefert. Da dort drin der Dateiname steht, ist das immer wahr. Du machst hier also eine Endlos-Schleife.

3.) Du machst die Ausgabe (das print) auf STDOUT, die Standardausgabe. Meist ist das die Konsole bzw. DOS-Box. Wenn Du etwas in die Datei schreiben willst, musst Du die Daten in den Filehandle ausgeben. Also:
Code: (dl )
print $fh " test "
.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
fraggs
 2006-09-11 11:56
#69592 #69592
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
so getestet und jetzt gehts erstmals vielend dank ich werde garantiert noch weitere fragen stellen.

eine frage ... dh. um in die datei zu schreiben muss ich sie nicht erst ein lesen ? sondern ich kann direct mit > rein schreiben ?\n\n

<!--EDIT|fraggs|1157961586-->
mmm twix
renee
 2006-09-11 12:14
#69593 #69593
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du musst sie nicht erst lesen. Wenn Du zum Beispiel ein noch nicht existierende Datei schreiben willst, dann kannst Du sie ja auch gar nicht lesen.

Mit open(my $fh,'>',$datei) or die $! erzeugst Du die Datei und schreibst in die Datei. Wenn Du nur etwas an die Datei anhängen willst, dann musst Du open(my $fh,'>>',$datei) or die $! schreiben.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
fraggs
 2006-09-11 12:16
#69594 #69594
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
danke :)
mmm twix
<< >> 10 Einträge, 1 Seite



View all threads created 2006-09-08 16:29.