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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/perl
# 24.07.2013
# Test-Datei: öffnen der .txt Dateien und suchen nach .SUBCKT, diese Dateien dann in neue Datei speichern
# Funktioniert noch nicht: Dateien ohne .SUBCKT raussuchen --> Fehler: Für jede Zeile ist ein Array Element angelegt, und speichert somit für jede
# Zeile ohne .SUBCKT den Inhalt der Datei in die neue Datei
use strict;
use warnings;
use File::Find;
use CGI::Carp qw(fatalsToBrowser);
# Variablen
my $Bauteil;
my $Bauteil_found = 1;
my $file;
my $Subckt;
# Arrays
my @Dioden;
my @files;
my @Subckt;
my @Bauteil;
# **********************************************************
# Liest die Dateinamen aus und schreibt sie in @files:
opendir(DIR, ".") or die "Fehler beim Öffnen des Ordners.\n";
@files = readdir(DIR);
foreach $file (sort @files)
{
print "$file\n"; # Ausgabe der eingelesenen Dateinamen im Konsolenfenster
}
closedir(DIR);
# **********************************************************
# Überprüft, ob eine Datei mit .txt hinten in dem Ordner vorhanden ist
foreach (@files)
{
if ($_ =~ /.*.txt$/i)
{
$Bauteil = $_;
$Bauteil_found = 0;
# **********************************************************
# Wenn keine .txt Datei vorhanden oder Fehler beim Öffnen dieser: Error Meldung
if ($Bauteil_found)
{
open (sd_err, ">Error.txt");
print sd_err "Error" ;
close (sd_err);
die "\n\nError: Keine Testdateien vorhanden. Die zu verarbeiteten Dateien müssen mit .txt enden!\n\n";
};
# Wenn doch eine oder mehrere .txt Dateien vorhanden sind
# Schreibe die Daten in das Array "@Bauteil"
open (BAUTEIL,"<$Bauteil");
@Bauteil= <BAUTEIL>;
close BAUTEIL;
# **********************************************************
#print @Bauteil; # Gibt die Daten vom Array @Bauteil auf dem Konsolenfenster aus
# In den Arrays sind die Daten Zeilenweise hinterlegt, also für jede Zeile ein Array!!
foreach (@Bauteil)
{
if ($_ =~ /^\.SUBCKT\b/i) #Erklärung Reguläre Ausdrücke: ^->Beginnt am Anfang einer Zeile, \-> für den . ,
{ #\b-> Wortbegrenzung nach hinten, i-> Groß-und Kleinschreibung wird nicht berücksichtigt
open (ZIELD, ">>SUBCKT.txt");
print ZIELD @Bauteil;
print ZIELD "\n\n\n";
close(ZIELD);
}
else
{
open (ZIELD1, ">>MODEL.txt");
print ZIELD1 @Bauteil;
print ZIELD1 "\n\n\n";
close(ZIELD1);
}
}
} # erste If Schleife schließen
} # foreach Schleife schließen
2013-07-25T07:14:08 NewMein Ziel ist es aber einfach nur, die .txt Dateien quasi zu sortieren nach mit .SUBCKT im Inhalt und ohne und diese dann in zwei neue Dateien zu speichern.
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
#!/usr/bin/perl use warnings; use strict; open( my $subcktFh, '>', 'SUBCKT.TXT' ) or die $!; open( my $modelFh, '>', 'MODEL.TXT' ) or die $!; # Alle *.txt-Dateinamen im aktuellen Verzeichnis my @txtfiles = glob( "*.txt" ); # Iteriere durch die Dateinamen (in sortierter Folge) for my $file ( sort @txtfiles ) { open( my $fh, '<', $file ) or next; # bei Fehler weitermachen # ganze Datei in Skalar einlesen, dafür $INPUT_RECORD_SEPARATOR auf undef # d.h. ganze Datei ist eine "Zeile", $content-Variable außerhalb des Blocks deklarieren; my $content; { local $/; $content = <$fh>; close $fh; } # '.SUBCKT' am Dateianfang (\A) oder nach Newline (\n)? # m{...}x: Whitespace im Suchmuster ignorieren if ( $content =~ m{ (\A|\n) \.SUBCKT \b }ix ) { print $subcktFh "$file\n"; } else { print $modelFh "$file\n"; } } close $subcktFh; close $modelFh;