Schrift
[thread]8263[/thread]

schreiben in neue datei: erkenne den fehler nicht selbst! (Seite 2)



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
sabrina
 2006-08-24 16:22
#69175 #69175
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
das ist der code von renee zum groesten teil, wollte erst mal den zur ausgabe bekommen dann kann ich am rest hoffendlic weiter arbeiten
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

use warnings;
use strict;


my @data;
my $columns   = 5;

open(FH,"<blubber.txt") or die $!;  #oeffnen der datei
while(my $line = <FH>)
{  
 chomp $line;             #entfernt \n
 my @array = (split(/[\t\s\\]/,$line))[0..($columns-1)];
# splitet nach taps, leerzeichen und backslash

 foreach (@array)
{
     s/^\s+/;/g; # fuehrende und
     s/\s+$/;/g; # abschliessende Blanks (beides entfernen und durch ";" ersetzen)
 } # foreach

 push(@data,[@array]);
} # while

close (FH);

my $format = '';

for my $i(0..scalar(@{$data[0]})-1)
{                 #hier wird das format festgelegtund linksbuendig
 my $max = find_longest(map{$_->[$i]}@data);
 $format .= '%-'.$max.'s ';
}

for my $entry(@data)
{
 print sprintf($format . "<<\n",@$entry);
}

sub find_longest
{     # hier wird der laengste inhalt des feldes berechnet
 my $longest = 0;
 for(@_){
     my $length = length($_);
     $longest = $length if($length > $longest);
 }

 return $longest;
}

open(FH, "<blubber.txt") or die "Fehler beim oeffnen/anlegen: $!";
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";

while(<FH>)
{
print OUTDATEN @data;
}
close (OUTDATEN)or die $!;
close (FH)or die $!;

lg sabrina
vayu
 2006-08-24 16:36
#69176 #69176
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
ersetze mal

Code: (dl )
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";


durch

Code: (dl )
open(OUTDATEN, "+>", "ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";


ich wette die datei ist schon vorhanden und leer, wird aber beim nächsten skript durchlauf nicht überschrieben und bleibt leer.
sabrina
 2006-08-24 16:41
#69177 #69177
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
ich probiers mal aber die datei wird staendig ueberschrieben, denn als ich alle moegliche variablen ausprobiert habe, kam ja auch staendig ne neue ausgabe!
aber ich probiers

es kommt genau das gleiche wie zuvor!
lg sabrina:(
renee
 2006-08-24 16:51
#69178 #69178
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=vayu,24.08.2006, 14:36]ersetze mal

Code: (dl )
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";


durch

Code: (dl )
open(OUTDATEN, "+>", "ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";


ich wette die datei ist schon vorhanden und leer, wird aber beim nächsten skript durchlauf nicht überschrieben und bleibt leer.[/quote]
Bei open(FH,">",$file) wird die Datei immer überschrieben - vorausgesetzt, man hat die Rechte dazu...

Mit dem +< kann man die Datei für den lesenden und den schreibenden Zugriff öffnen. Ist hier also unsinnig.

@sabrina: in @data stecken lauter Arrayreferenzen drin. Deswegen bekommst Du die "komische" Ausgabe.

Willst Du die Sachen aus @data in die Ausgabedatei haben oder willst Du eine Kopiel von blubb.txt machen?
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/
sabrina
 2006-08-24 16:58
#69179 #69179
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
ich will die daten die ich ueberarbeitet habe!die,die ich auch sehe auf dem bildschirm!weist du welche ich meine???
lg sabrina
renee
 2006-08-24 17:17
#69180 #69180
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/perl

use warnings;
use strict;


my @data;
my $columns = 5;

open(FH,"<blubber.txt") or die $!; #oeffnen der datei
while(my $line = <FH>)
{
chomp $line; #entfernt \n
my @array = (split(/[\t\s\\]/,$line))[0..($columns-1)];
# splitet nach taps, leerzeichen und backslash

foreach (@array)
{
s/^\s+/;/g; # fuehrende und
s/\s+$/;/g; # abschliessende Blanks (beides entfernen und durch ";" ersetzen)
} # foreach

push(@data,[@array]);
} # while

close (FH);

my $format = '';

for my $i(0..scalar(@{$data[0]})-1)
{ #hier wird das format festgelegtund linksbuendig
my $max = find_longest(map{$_->[$i]}@data);
$format .= '%-'.$max.'s ';
}

# Ich verwende einen Skalar als Filehandle,
# Du kannst aber statt $out_fh auch OUTDATEN
# schreiben
open(my $out_fh,'>','Ziel.txt') or die $!;
for my $entry(@data)
{
print sprintf($format . "<<\n",@$entry); # Ausgabe auf Bildschirm
print $out_fh sprintf($format . "<<\n",@$entry); # Ausgabe in Datei
}
close $out_fh or die $!;

sub find_longest
{ # hier wird der laengste inhalt des feldes berechnet
my $longest = 0;
for(@_){
my $length = length($_);
$longest = $length if($length > $longest);
}

return $longest;
}
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/
sabrina
 2006-08-24 17:41
#69181 #69181
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
danke schoen es funktioniert nahe zu perfekt!!!
aergerlich ich hatte es schon mal so aehnlich hab die idee aber wieder verworfen :(
hatte nur das $sprintf naja
das print fuer bildschirm ausgabe lass ich weg funzt auch so!
du hast ein open vergesen sieht jetzt also so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
 
open(FH, "<blubber.txt") or die "Fehler beim oeffnen/anlegen: $!";
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";
for my $entry(@data)
{
print OUTDATEN sprintf($format . "<<\n",@$entry);  #ausgabe in datei
}
close (OUTDATEN)or die $!;
close (FH)or die $!;


ich hatte zwar gelesen das sub am schluss stehen aber ich dachte immer am schluss bevor man neue datei oeffnet!wieder was gelernt :D  danke schoen!!

danke fuer die schnelle hilfe sag jetzt lieber nicht wie lange ich schon daran rum dokter.
hab zum glueck hier im forum den link zu perl in 21 tagen gefunden und bin fleißig am lesen.
ich wuesste nicht was ich ohne dieses Forum gemacht haette
danke danke danke
lg sabrina
ps: bis bald
renee
 2006-08-24 18:17
#69182 #69182
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das open brauchst Du nicht. Wie Du selbst siehst, öffnest Du die Datei nur und schließt sie dann wieder - ohne aus der Datei gelesen zu haben. Die Daten hast Du ja schon in @data.
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/
sabrina
 2006-08-24 18:28
#69183 #69183
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
ok sorry hatte es einfach nur mit kopiert und nicht drauf geachtet das in der ausgabe kein FH vorkommt
danke
lg sabrina
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2006-08-24 14:44.