Thread maximale Größe eines Arrays
(33 answers)
Opened by cohama at 2014-06-12 09:27
Kurz ist nicht gleich lesbar. Das musste ich auch lernen :-)
Du wurdest schon auf viele Probleme aufmerksam Gemacht und das betrifft nicht nur die Formatierung Des Codes oder die Benennung der Variablen. Dein Script hat auch richtige Fehler. Z.B. ein or print bricht das Script nicht ab es läuft weiter. Was glaubst du passiert wenn aus einem nicht geöffneten Filehandle gelesen werden soll? Dann gibt es noch ein paar stellen, die könnten bessere Fehlermeldungen gebrauchen. Perl teilt dir als Programmierer mit warum eine Datei nicht geöffnet werden konnte. Das ist für den Benutzer sicherlich hilfreich. Zudem sollte ein Nutzer wissen wie der komplette Pfad zur Datei ist, die nicht geöffnet werden konnte. Aber nun noch etwas zum Format Deines Codes. Auf einiges wurdest du schon hingewiesen. Wie nicht aussagekräftige Variablen Namen. Aber dein Code enthält noch andere seltsame Stellen: Was genau hast du an der Stelle vor? Weißt du was for und shift genau machen und wie sie hier interagieren? Diese Konstruktion ist äußerst ungewöhnlich und ich musste zweimal darüber Nachdenken was hier passiert. Ich hoffe du weißt es. Auch andere Stellen deuten darauf hin das du kein geübter Programmierer bist. Es ist deine Sache wie du Programmierst und was du für Lesbar hältst. Aber bedenke das wir hier im Forum unsere Freizeit dafür einsetzen dir zu helfen. Ein wenig entgegen kommen sollte möglich sein, auch was deinen Code betrifft. Es gibt ein paar allgemeine Regeln wie Code am besten Aufgebaut und formatiert ist. Das hilft dir und uns beim Verständnis. Darum wäre es wirklich gut wenn du auf die Abänderungsvorschläge eingehen könntest. Und hier mal dein Script umformatiert und lesbarer gestaltet zudem habe ich eine Lösung für dein Problem eingebaut, so wie ich es verstanden habe. 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 #!/usr/bin/perl =pod Script zum Konvertieren Es wird nach Einträgen EXTENSIONNUM,NAME,DATEALLOCATED,ACCOUNTID gesucht und in eine neue Datei geschrieben. Ebenso wird EXTENSIONNUM in eine extra Datei geschrieben Es wird zweimal nach einem Dateinamen Gefragt. Dieser muss ohne endung ".log" angeben werden. Die datei wird im verzeichnis '/home/henrik/workspace' gesucht. =cut ######################### # Modul Definitionen ######################### use strict; use warnings; ########################## # Konfiguration ########################## my $BaseDir='/home/henrik/workspace'; ########################## # Shell leeren ########################## system("clear")==0 or die "Keine Shell\n"; ########################## # Time-Calculation ########################## my ( $Date, $Clock ) = calculate_date_and_clock(); ########################## # DateiName Erfagen ########################## my $InputFile = ''; while(!$InputFile) { $InputFile = ask_for_file('Input File: '); $InputFile = "$BaseDir/$InputFile.log"; last if( -f $InputFile ); print qq(Datei "$InputFile" exstiert nicht! Bitte Erneut eingeben\n); $InputFile = ''; } my @InputData = read_file( $InputFile ); print "Input Linecount : ".scalar( @InputData )."\n"; ########################## # Daten verarbeiten ########################## my @OutputData; my @OutputDataExtensions; while (@InputData) { my $line = shift(@InputData); my ($Ext, $ExtName, $allocDate, $AccountID) = ( '' ) x 4; # Extract the Extension-Number $Ext = $1 if( $line =~ /EXTENSIONNUM=(\d+)/ ); $ExtName = $1 if( $line =~ /NAME=(\d+|\w+\d+)/ ); $allocDate = $1 if( $line =~ /DATEALLOCATED=(\d+-\d+-\d+)/ ); $AccountID = $1 if( $line =~ /ACCOUNTID=(\d+)/ ); next unless $Ext and $ExtName and $allocDate and $AccountID; push(@OutputData,"$ExtName $Ext $AccountID $allocDate\n"); push(@OutputDataExtensions,"$Ext\n"); } print "Output Linecount: ".scalar(@OutputData)."\n"; my $OutputFileName = ask_for_filename('Output File: '); write_file("$BaseDir/$OutputFileName.log", \@OutputData); write_file("$BaseDir/$OutputFileName-Extensions.log", \@OutputDataExtensions); ######################################################################## # Funktionen: ######################################################################## # Aktuelles Datum und Uhrzeit Formatieren sub calculate_date_and_clock { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); my $d = sprintf("%04d-%02d-%02d",$year+1900,$mon+1,$mday); my $c = sprintf("%02d:%02d:%02d",$hour,$min,$sec); return ($d, $c); } # Nach einem Dateinamen Fragen sub ask_for_file { my ( $Msg ) = @_; my $FileName=''; while(!$FileName) { print $Msg; $FileName = <STDIN>; chomp($FileName); print "Bitte einen Datei Namen angeben!\n" unless $FileName; } return $FileName; } # Eine Datei in ein Array Lesen sub read_file { my ( $File ) = @_; open (my $FH ,'<', $File ) or die "Error Open: $File ($!)"; my @Data = <$FH>; close( $FH ); return @Data; } # Ein Array in eine Datei schreiben sub write_file { my ( $File, $Data ) = @_; open (my $FH ,'>', $File ) or die "Error Open: $File ($!)"; print $FH @$Data; close($FH); return 1; } |