Thread Dateien aus Verzeichnis einlesen und zeilenweise bearbeiten (4 answers)
Opened by Bionerd at 2012-05-16 11:51

topeg
 2012-05-16 12:16
#158390 #158390
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
  • Bitte nutze "strict" und "warnings".
  • readdir liefert keine vollständigen Pfade sondern nur die Datei- und Ordner-Namen im geöffneten Verzeichnis.
  • Achte darauf wo du welches Filehandle unter welchem Namen öffnest und schließt.
  • next kann dir hier einige Verschachtelungen sparen und macht den Code damit übersichtlicher.
  • Bitte benutze immer das drei Parameterige open.
  • Wo ist die schleife welche die Datei zeilenweise einließt?
  • Öffne die Ausgabe Datei einmal am Anfang das macht den Code schneller und übersichtlicher.

    Den Code überarbeitet:

Code (perl): (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
#!/usr/bin/perl
use strict;
use warnings;

my $Verzeichnis = 'Sequenzen/';
my $out_dir='Paarungen/';
my $out_file='h.txt';

open(my $out_fh, '>>', $out_dir.$out_file) or die "$out_dir$out_file: $!";

opendir(my $dir_fh, $Verzeichnis) or die "$Verzeichnis: $!";
while(my $file_name=readdir($dir_fh))
{
  next if (!-f $Verzeichnis.$file_name);
  next if ($filename !~ /\.txt$/);

  open(my $in_fh, '<', $Verzeichnis.$file_name) or die "$Verzeichnis.$file_name: $!";
  while(my $line=<$in_fh>)
  {
    chomp ($line);
    next if ($line !~ /^([A-Z]+ (\W){1} [A-Z]+)/g);
    $line =~ s/\s+//g;
    $line =~ s/\+//g;
    next if ($line !~ /Line1andLine2/);

    print "Line1andLine2\n";

    # Ausgabe in Datei
    print $out_fh "$line .\n";
  }
  close($in_fh);
}
closedir($dir_fh);

close($out_fh);

View full thread Dateien aus Verzeichnis einlesen und zeilenweise bearbeiten