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. View full thread welchen Programmierstil findet ihr lesbarer? |