1 2 3 4 5 6 7 8 9 10
open(FILE, "<Testtest.txt") or die "Could not open file: $!"; my ($words) = (0); while (<FILE>) { $words += scalar(split(/\W+/, $_)); } print("words=$words\n");
if($content =~ m/^\.subckt [a-z0-9]+ (.+)/im)
Guest Gast_13Gibt es da evtl ein Regex, womit man Worte auslesen kann?
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
#!/usr/bin/perl use strict; use warnings; my $words = 0; while (<DATA>) { my @wds = split(/[^\w.]+/, $_); print join "; ", @wds[2..$#wds]; print "\n"; $words += scalar(@wds)-2; } print("words=$words\n"); __DATA__ .SUBCKT D1N4148 Anode1 Kathode1 foo .SUBCKT D1N4248 Anode2 Kathode2 foo bar .SUBCKT D1N4348 Anode3 Kathode3 .SUBCKT D1N4448 Anode4 Kathode4 foo .SUBCKT D1N4548 Anode5 Kathode5 foo bar .SUBCKT D1N4648 Anode6 Kathode6 .SUBCKT D1N4748 Anode7 Kathode7 foo .SUBCKT D1N4848 Anode8 Kathode8 foo bar .SUBCKT D1N4948 Anode9 Kathode9
1 2 3 4 5 6 7 8 9 10 11 12
use strict; use warnings; my $a = q|TEST ist das Haus vom Test Ni Ko Laus|; my @words; push @words, split(/ /, $_) for ($a =~ /^Test (.*)/img); say join(',',@words); say scalar @words;
say scalar map { split(/ /, $_) } ($a =~ /^Test (.*)/img);
say 0+map{split/ /}$a=~/^Test (.*)/img;
2013-09-13T09:39:13 MuffiWeils mich jetzt interessiert hat: das Kürzeste was ich zusammengebracht habe
Code (perl): (dl )say 0+map{split/ /}$a=~/^Test (.*)/img;
Guest Gast_13Bei dem Code wird quasi in jeder Zeile ab dem dritten Wort ausgelesen und hochgezählt. Ich brauche aber einen Code, der nur in der Zeile, die mit .SUBCKT anfängt, ab dem dritten Wort ausliest(Die anderen Zeilen in der Datei bestehen aus anderen Anfangswörtern und interessieren mich nicht).
Guest Gast_13Zudem gibt es Probleme bei einer Zeile mit weniger als drei Wörtern, da subtrahiert er wieder ein Wort von der Hochzählung.
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
#!/usr/bin/perl use strict; use warnings; my $words = 0; while (<DATA>) { next unless /^\.SUBCKT /; #my @wds = splice([split(/[^\w.]+/)],2); (lieber nicht so, siehe Hinweis von Linuxer!) my @wds = split(/[^\w.]+/); @wds = splice(@wds,2); next unless @wds; print join "; ", @wds; print "\n"; $words += scalar(@wds); } print("words=$words\n"); __DATA__ .SUBCKT D1N4148 Anode1 Kathode1 foo .SUBCKT D1N4248 Anode2 Kathode2 foo bar .SUBCKT D1N4348 Anode3 Kathode3 .UBCKT D1N4448 Anode4 Kathode4 foo SUBCKT D1N4548 Anode5 Kathode5 foo bar .SUBCKTa D1N4648 Anode6 Kathode6 .SUBCKT D1N4748 .SUBCKT .SUBCKT D1N4948 Anode9 Kathode9
perldoc -f spliceStarting with Perl 5.14, splice can take scalar EXPR, which must hold a reference to an unblessed array. The argument will be dereferenced automatically. This aspect of splice is considered highly experimental. The exact behaviour may change in a future version of Perl.
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
#!/usr/bin/perl use strict; use warnings; my $_; my $name1; my @wds; open(my $WorteFh, '>', 'Worte.TXT' ) or die $!; my @txtfiles = glob( "*.txt" ) or die $!; for my $file ( sort @txtfiles ) { open( my $fh, '<', $file ) or next; local $/; my $content = <$fh>; close $fh; my $words = 0; if ($content =~ m{ (\n) \.SUBCKT \b }mix )# Test ob .Subckt enthalten { if ($content =~ m/^\.subckt ([\w.\s]+)/im) # Wenn ja, alles nach .Subckt auslesen { $name1 = $1; (undef, my @wds) = split(/ /,$name1); next unless @wds; print join "; ", @wds; print "\n"; $words += scalar(@wds); print("words=$words\n"); print "$file\n$name1\n"; print $WorteFh "$words\n"; } } } close $WorteFh;
1 2 3 4 5 6
if ($content =~ m{^\.SUBCKT\s+\S+\s+([\w.\s]+?)\s+$}i ) { my $name1 = $1; my @wds = split(/\s+/,$name1); ... }
1 2 3 4 5 6
if ($content =~ m{^\.SUBCKT\s+\S+\s+([\w.\s]+?[\w.]+)\s*$}i ) { my $name1 = $1; my @wds = split(/\s+/,$name1); ... }