Thread welchen Programmierstil findet ihr lesbarer?
(13 answers)
Opened by lichtkind at 2010-08-10 20:43
Das Problem bei beiden Code-Beispielen ist, dass sie nicht immer funktionieren. Man stelle sich eine Mac-kodierte Datei mit mehreren leeren Zeilen vor:
Beide Codes würden hier durch einander kommen. weiterhin hat der zweite Code ein Problem in der Bedingung wann ein "$eol" geschrieben werden soll: Code (perl): (dl
)
1 2 3 4 unless $last eq "\r" and $ch eq "\n"; if !($last eq "\r" and $ch eq "\n"); if !($last eq "\r") or !($ch eq "\n"); if $last ne "\r" or $ch ne "\n" Das kann wohl so nicht stimmen oder? Nicht zu vergessen das unter Windows (je nach dem wie perl kompiliert wurde) \n auch \x0D\x0A sein kann. Also mein Vorschlag (ungetestet): 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 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 use strict; use warnings; my %eols=( unix => "\x0A", linux => "\x0A", dos => "\x0D\x0A", win => "\x0D\x0A", mac => "\x0D", apple => "\x0D", ); sub usage () { print STDERR "Usage $0 ".join('|', sort keys %eols)."\n"; exit(8); } sub determin_eol($$) { my ($last,$ch)=@_; my $write=''; # Win Ending if($last eq "\x0D" && $ch eq "\x0A") { $write=$eol; $last=''; } # Mac Ending elsif($last eq "\x0D") { $write=$eol; $last=$ch; } # UNX Ending elsif($last eq "\x0A") { $write=$eol; $last=$ch; } # no ending found else { $write=$last; $last=$ch; } return ($write,$last); } binmode(STDIN); binmode(STDOUT); usage() unless (@ARGV && $eols{$ARGV[0]}); my $eol=$eols{$ARGV[0]}; my $ch; my $last=''; while (sysread(STDIN, $ch, 1) > 0) { my $write=''; ($write,$last)=determin_eol($last,$ch); syswrite(STDOUT, $write); } # write last char. syswrite(STDOUT, join('',determin_eol($last,''))); Wobei das auch noch nicht immer funktioniert, da unter jedem System "\r" und "\n" beliebig gemischt vorkommen können, je nach dem was dargestellt werden soll. |