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

Split von grosser Datei



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Moep
 2006-05-19 20:30
#66313 #66313
User since
2006-05-19
7 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

Ich habe eine 10 bis 20 MB grosse Datei mit jeder Menge Daten drin... ca. alle 10-30 Zeilen steht am Anfang der Zeile "DATA". Jetzt bräuchte ich ein Script, welches Nach "DATA" sucht dann sämtliche Zeilen bis zum nächsten "DATA" rauskopiert und jeweils in ein Extra File schreibt. Aber da das ja tausend files wären, will ich oben noch ne Variable einbauen, mit der ich dann die Anzahl der Sätze steuern kann.

z.B. 20, damit dann in jedem extra File 20 mal die kopierten "DATA" Sätze stehen hab. ( Natürlich mit den kopierten Zeilen zwischen den "Data" Sätzen ;) )

Hört sich evtl. garnichtma so schwer an, aber wahrscheinlich hab ich nen knick in der Logik...

Ich hoffe jemand kann mir weiter helfen und sag schonma vielen Danke Leute!

Grüße moep
renee
 2006-05-19 23:10
#66314 #66314
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
#!/usr/bin/perl

use strict;
use warnings;

my $file = '/path/to/src.file';
my $dir = '/path/to/destination_directory/';

my $number_of_entries = 20; # Anzahl Einträge pro Datei;
my $counter = 0;

{
local $/ = "\nDATA";
my @entries = ();
open(my $fh,"<",$file) or die $!;
while(my $entry = <$fh>){
chomp $entry;
$entry = 'DATA' . $entry unless($entry =~ /^DATA/);
push(@entries,$entry);
if(scalar(@entries) == $number_of_entries){
open(my $w_fh,">",$dir.$counter.".txt") or die $!;
print $w_fh $_,"\n" for(@entries);
close $w_fh;
++$counter;
}
}
close $fh;
}

open(my $w_fh,">",$dir.$counter.".txt") or die $!;
print $w_fh $_,"\n" for(@entries);
close $w_fh;
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/
Moep
 2006-05-20 12:44
#66315 #66315
User since
2006-05-19
7 Artikel
BenutzerIn
[default_avatar]
Morgen,

erstma vielen dank, das das so fix ging. Bekomme leider ne Fehlermeldng beim ausführen. Jemand noch ne Idee?

C:\PXPerl\bin>perl split.pl
Global symbol "@entries" requires explicit package name at split.pl line 31.
Execution of split.pl aborted due to compilation errors.
steffenw
 2006-05-20 13:09
#66316 #66316
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Dann sind die angemekerten Variablen nicht mit my deklariert.
$SIG{USER} = sub {love 'Perl' or die};
renee
 2006-05-20 13:50
#66317 #66317
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nimm das my @entries = (); an den Anfang vom Skript (nach my $dir = ...)
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/
Moep
 2006-05-20 16:52
#66318 #66318
User since
2006-05-19
7 Artikel
BenutzerIn
[default_avatar]
jo, hab die variablen deklariert ...

jetztm üsste noch n kleiner fehler in Zeile 18 sein... "bad name". Ich sehe da keinen Fehler.

C:\PXPerl\bin>perl script.pl
Bad name after DATA' at script.pl line 18.

$entry = 'DATA' . $entry unless($entry =~ /^DATA/);
Dubu
 2006-05-20 17:39
#66319 #66319
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich vermute, dass irgendwo weiter oben ein vereinsamtes ' steht.
Moep
 2006-05-21 02:46
#66320 #66320
User since
2006-05-19
7 Artikel
BenutzerIn
[default_avatar]
hmmm... ich glaube nicht... mehr meckert er net an...
pq
 2006-05-21 03:36
#66321 #66321
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also ich kann genau den fehler reproduzieren, wenn ich schreibe:
$entry = DATA' . $entry unless($entry =~ /^DATA/);
=>
Bad name after DATA' at test.pl line 2.


also bitte das nächste mal ordentlich copy & pasten =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Moep
 2006-05-21 11:08
#66322 #66322
User since
2006-05-19
7 Artikel
BenutzerIn
[default_avatar]
ich hab oben doch die Zeile ausm script hier reinkopiert... siehst du da etwa kein ' ???

das ' ist drin.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-05-19 20:30.